OSDN Git Service

* decl.c (duplicate_decls): Use same_type_p.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45
46 #define obstack_chunk_alloc xmalloc
47 #define obstack_chunk_free free
48
49 extern tree builtin_return_address_fndecl;
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern int static_labelno;
59
60 extern tree current_namespace;
61 extern tree global_namespace;
62
63 extern void (*print_error_function) PROTO((char *));
64
65 /* Stack of places to restore the search obstack back to.  */
66    
67 /* Obstack used for remembering local class declarations (like
68    enums and static (const) members.  */
69 #include "stack.h"
70 struct obstack decl_obstack;
71 static struct stack_level *decl_stack;
72
73 #ifndef CHAR_TYPE_SIZE
74 #define CHAR_TYPE_SIZE BITS_PER_UNIT
75 #endif
76
77 #ifndef SHORT_TYPE_SIZE
78 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
79 #endif
80
81 #ifndef INT_TYPE_SIZE
82 #define INT_TYPE_SIZE BITS_PER_WORD
83 #endif
84
85 #ifndef LONG_TYPE_SIZE
86 #define LONG_TYPE_SIZE BITS_PER_WORD
87 #endif
88
89 #ifndef LONG_LONG_TYPE_SIZE
90 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
91 #endif
92
93 #ifndef WCHAR_UNSIGNED
94 #define WCHAR_UNSIGNED 0
95 #endif
96
97 #ifndef FLOAT_TYPE_SIZE
98 #define FLOAT_TYPE_SIZE BITS_PER_WORD
99 #endif
100
101 #ifndef DOUBLE_TYPE_SIZE
102 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
103 #endif
104
105 #ifndef LONG_DOUBLE_TYPE_SIZE
106 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
107 #endif
108
109 #ifndef BOOL_TYPE_SIZE
110 #ifdef SLOW_BYTE_ACCESS
111 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
112 #else
113 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
114 #endif
115 #endif
116
117 /* We let tm.h override the types used here, to handle trivial differences
118    such as the choice of unsigned int or long unsigned int for size_t.
119    When machines start needing nontrivial differences in the size type,
120    it would be best to do something here to figure out automatically
121    from other information what type to use.  */
122
123 #ifndef SIZE_TYPE
124 #define SIZE_TYPE "long unsigned int"
125 #endif
126
127 #ifndef PTRDIFF_TYPE
128 #define PTRDIFF_TYPE "long int"
129 #endif
130
131 #ifndef WCHAR_TYPE
132 #define WCHAR_TYPE "int"
133 #endif
134
135 static tree grokparms                           PROTO((tree, int));
136 static tree lookup_nested_type                  PROTO((tree, tree));
137 static char *redeclaration_error_message        PROTO((tree, tree));
138
139 static struct stack_level *push_decl_level PROTO((struct stack_level *,
140                                                   struct obstack *));
141 static void push_binding_level PROTO((struct binding_level *, int,
142                                       int));
143 static void pop_binding_level PROTO((void));
144 static void suspend_binding_level PROTO((void));
145 static void resume_binding_level PROTO((struct binding_level *));
146 static struct binding_level *make_binding_level PROTO((void));
147 static void declare_namespace_level PROTO((void));
148 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
149 static void storedecls PROTO((tree));
150 static void storetags PROTO((tree));
151 static void require_complete_types_for_parms PROTO((tree));
152 static void push_overloaded_decl_1 PROTO((tree));
153 static int ambi_op_p PROTO((tree));
154 static int unary_op_p PROTO((tree));
155 static tree store_bindings PROTO((tree, tree));
156 static tree lookup_tag_reverse PROTO((tree, tree));
157 static tree obscure_complex_init PROTO((tree, tree));
158 static tree maybe_build_cleanup_1 PROTO((tree, tree));
159 static tree lookup_name_real PROTO((tree, int, int, int));
160 static void warn_extern_redeclared_static PROTO((tree, tree));
161 static void grok_reference_init PROTO((tree, tree, tree));
162 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
163                               enum overload_flags, tree,
164                               tree, tree, int, int, int, int, int, int, tree));
165 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
166 static tree lookup_tag PROTO((enum tree_code, tree,
167                               struct binding_level *, int));
168 static void set_identifier_type_value_with_scope
169         PROTO((tree, tree, struct binding_level *));
170 static void record_builtin_type PROTO((enum rid, char *, tree));
171 static void record_unknown_type PROTO((tree, char *));
172 static int member_function_or_else PROTO((tree, tree, char *));
173 static void bad_specifiers PROTO((tree, char *, int, int, int, int,
174                                   int));
175 static void lang_print_error_function PROTO((char *));
176 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
177 static void check_for_uninitialized_const_var PROTO((tree));
178 static unsigned long typename_hash PROTO((hash_table_key));
179 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
180 static void push_binding PROTO((tree, tree, struct binding_level*));
181 static void add_binding PROTO((tree, tree));
182 static void pop_binding PROTO((tree, tree));
183 static tree local_variable_p PROTO((tree));
184
185 #if defined (DEBUG_CP_BINDING_LEVELS)
186 static void indent PROTO((void));
187 #endif
188
189 /* A node which has tree code ERROR_MARK, and whose type is itself.
190    All erroneous expressions are replaced with this node.  All functions
191    that accept nodes as arguments should avoid generating error messages
192    if this node is one of the arguments, since it is undesirable to get
193    multiple error messages from one error in the input.  */
194
195 tree error_mark_node;
196
197 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
198 tree error_mark_list;
199
200 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
201
202 tree short_integer_type_node;
203 tree integer_type_node;
204 tree long_integer_type_node;
205 tree long_long_integer_type_node;
206
207 tree short_unsigned_type_node;
208 tree unsigned_type_node;
209 tree long_unsigned_type_node;
210 tree long_long_unsigned_type_node;
211
212 tree ptrdiff_type_node;
213
214 tree unsigned_char_type_node;
215 tree signed_char_type_node;
216 tree char_type_node;
217 tree wchar_type_node;
218 tree signed_wchar_type_node;
219 tree unsigned_wchar_type_node;
220
221 tree wchar_decl_node;
222
223 tree float_type_node;
224 tree double_type_node;
225 tree long_double_type_node;
226
227 tree complex_integer_type_node;
228 tree complex_float_type_node;
229 tree complex_double_type_node;
230 tree complex_long_double_type_node;
231
232 tree intQI_type_node;
233 tree intHI_type_node;
234 tree intSI_type_node;
235 tree intDI_type_node;
236 #if HOST_BITS_PER_WIDE_INT >= 64
237 tree intTI_type_node;
238 #endif
239
240 tree unsigned_intQI_type_node;
241 tree unsigned_intHI_type_node;
242 tree unsigned_intSI_type_node;
243 tree unsigned_intDI_type_node;
244 #if HOST_BITS_PER_WIDE_INT >= 64
245 tree unsigned_intTI_type_node;
246 #endif
247
248 tree java_byte_type_node;
249 tree java_short_type_node;
250 tree java_int_type_node;
251 tree java_long_type_node;
252 tree java_float_type_node;
253 tree java_double_type_node;
254 tree java_char_type_node;
255 tree java_boolean_type_node;
256
257 /* A VOID_TYPE node, and the same, packaged in a TREE_LIST.  */
258
259 tree void_type_node, void_list_node;
260 tree void_zero_node;
261
262 /* Nodes for types `void *' and `const void *'.  */
263
264 tree ptr_type_node;
265 tree const_ptr_type_node;
266
267 /* Nodes for types `char *' and `const char *'.  */
268
269 tree string_type_node, const_string_type_node;
270
271 /* Type `char[256]' or something like it.
272    Used when an array of char is needed and the size is irrelevant.  */
273
274 tree char_array_type_node;
275
276 /* Type `int[256]' or something like it.
277    Used when an array of int needed and the size is irrelevant.  */
278
279 tree int_array_type_node;
280
281 /* Type `wchar_t[256]' or something like it.
282    Used when a wide string literal is created.  */
283
284 tree wchar_array_type_node;
285
286 /* The bool data type, and constants */
287 tree boolean_type_node, boolean_true_node, boolean_false_node;
288
289 /* Type `int ()' -- used for implicit declaration of functions.  */
290
291 tree default_function_type;
292
293 /* Function types `double (double)' and `double (double, double)', etc.  */
294
295 static tree double_ftype_double, double_ftype_double_double;
296 static tree int_ftype_int, long_ftype_long;
297 static tree float_ftype_float;
298 static tree ldouble_ftype_ldouble;
299
300 /* Function type `int (const void *, const void *, size_t)' */
301 static tree int_ftype_cptr_cptr_sizet;
302
303 /* C++ extensions */
304 tree vtable_entry_type;
305 tree delta_type_node;
306 #if 0
307 /* Old rtti stuff.  */
308 tree __baselist_desc_type_node;
309 tree __i_desc_type_node, __m_desc_type_node;
310 tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
311 #endif
312 tree __t_desc_type_node;
313 #if 0
314 tree __tp_desc_type_node;
315 #endif
316 tree __access_mode_type_node;
317 tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
318 tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
319 tree __ptmf_desc_type_node, __ptmd_desc_type_node;
320 #if 0
321 /* Not needed yet?  May be needed one day?  */
322 tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
323 tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
324 tree __ptmf_desc_array_type, __ptmd_desc_array_type;
325 #endif
326
327 /* Indicates that there is a type value in some namespace, although
328    that is not necessarily in scope at the moment. */
329
330 static tree global_type_node;
331
332 tree class_star_type_node;
333 tree class_type_node, record_type_node, union_type_node, enum_type_node;
334 tree unknown_type_node;
335 tree opaque_type_node, signature_type_node;
336 tree sigtable_entry_type;
337
338 /* Array type `vtable_entry_type[]' */
339 tree vtbl_type_node;
340 tree vtbl_ptr_type_node;
341
342 /* namespace std */
343 tree std_node;
344 int in_std = 0;
345
346 /* Expect only namespace names now. */
347 static int only_namespace_names;
348
349 /* In a destructor, the point at which all derived class destroying
350    has been done, just before any base class destroying will be done.  */
351
352 tree dtor_label;
353
354 /* In a destructor, the last insn emitted after the start of the
355    function and the parms.  */
356
357 static rtx last_dtor_insn;
358
359 /* In a constructor, the last insn emitted after the start of the
360    function and the parms, the exception specification and any
361    function-try-block.  The constructor initializers are emitted after
362    this insn.  */
363
364 static rtx last_parm_cleanup_insn;
365
366 /* In a constructor, the point at which we are ready to return
367    the pointer to the initialized object.  */
368
369 tree ctor_label;
370
371 /* A FUNCTION_DECL which can call `abort'.  Not necessarily the
372    one that the user will declare, but sufficient to be called
373    by routines that want to abort the program.  */
374
375 tree abort_fndecl;
376
377 /* A FUNCTION_DECL for the default `::operator delete'.  */
378
379 tree global_delete_fndecl;
380
381 extern rtx cleanup_label, return_label;
382
383 /* If original DECL_RESULT of current function was a register,
384    but due to being an addressable named return value, would up
385    on the stack, this variable holds the named return value's
386    original location.  */
387 static rtx original_result_rtx;
388
389 /* Sequence of insns which represents base initialization.  */
390 tree base_init_expr;
391
392 /* C++: Keep these around to reduce calls to `get_identifier'.
393    Identifiers for `this' in member functions and the auto-delete
394    parameter for destructors.  */
395 tree this_identifier, in_charge_identifier;
396 tree ctor_identifier, dtor_identifier;
397 /* Used in pointer to member functions, in vtables, and in sigtables.  */
398 tree pfn_identifier, index_identifier, delta_identifier, delta2_identifier;
399 tree pfn_or_delta2_identifier, tag_identifier;
400 tree vt_off_identifier;
401
402 struct named_label_list
403 {
404   struct binding_level *binding_level;
405   tree names_in_scope;
406   tree label_decl;
407   char *filename_o_goto;
408   int lineno_o_goto;
409   struct named_label_list *next;
410 };
411
412 /* A list (chain of TREE_LIST nodes) of named label uses.
413    The TREE_PURPOSE field is the list of variables defined
414    in the label's scope defined at the point of use.
415    The TREE_VALUE field is the LABEL_DECL used.
416    The TREE_TYPE field holds `current_binding_level' at the
417    point of the label's use.
418
419    BWAHAHAAHAHahhahahahaah.  No, no, no, said the little chicken.
420
421    Look at the pretty struct named_label_list. See the pretty struct
422    with the pretty named fields that describe what they do. See the
423    pretty lack of gratuitous casts. Notice the code got a lot cleaner.
424
425    Used only for jumps to as-yet undefined labels, since
426    jumps to defined labels can have their validity checked
427    by stmt.c.  */
428
429 static struct named_label_list *named_label_uses = NULL;
430
431 /* A list of objects which have constructors or destructors
432    which reside in the global scope.  The decl is stored in
433    the TREE_VALUE slot and the initializer is stored
434    in the TREE_PURPOSE slot.  */
435 tree static_aggregates;
436
437 /* -- end of C++ */
438
439 /* Two expressions that are constants with value zero.
440    The first is of type `int', the second of type `void *'.  */
441
442 tree integer_zero_node;
443 tree null_pointer_node;
444
445 /* The value for __null (NULL), namely, a zero of an integer type with
446    the same number of bits as a pointer.  */
447 tree null_node;
448
449 /* A node for the integer constants 1, 2, and 3.  */
450
451 tree integer_one_node, integer_two_node, integer_three_node;
452
453 /* While defining an enum type, this is 1 plus the last enumerator
454    constant value.  */
455
456 static tree enum_next_value;
457
458 /* Nonzero means that there was overflow computing enum_next_value.  */
459
460 static int enum_overflow;
461
462 /* Parsing a function declarator leaves a list of parameter names
463    or a chain or parameter decls here.  */
464
465 tree last_function_parms;
466
467 /* Parsing a function declarator leaves here a chain of structure
468    and enum types declared in the parmlist.  */
469
470 static tree last_function_parm_tags;
471
472 /* After parsing the declarator that starts a function definition,
473    `start_function' puts here the list of parameter names or chain of decls.
474    `store_parm_decls' finds it here.  */
475
476 static tree current_function_parms;
477
478 /* Similar, for last_function_parm_tags.  */
479 static tree current_function_parm_tags;
480
481 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
482    that have names.  Here so we can clear out their names' definitions
483    at the end of the function.  */
484
485 static tree named_labels;
486
487 /* A list of LABEL_DECLs from outer contexts that are currently shadowed.  */
488
489 static tree shadowed_labels;
490
491 /* The FUNCTION_DECL for the function currently being compiled,
492    or 0 if between functions.  */
493 tree current_function_decl;
494
495 /* Set to 0 at beginning of a function definition, set to 1 if
496    a return statement that specifies a return value is seen.  */
497
498 int current_function_returns_value;
499
500 /* Set to 0 at beginning of a function definition, set to 1 if
501    a return statement with no argument is seen.  */
502
503 int current_function_returns_null;
504
505 /* Set to 0 at beginning of a function definition, and whenever
506    a label (case or named) is defined.  Set to value of expression
507    returned from function when that value can be transformed into
508    a named return value.  */
509
510 tree current_function_return_value;
511
512 /* Nonzero means give `double' the same size as `float'.  */
513
514 extern int flag_short_double;
515
516 /* Nonzero means don't recognize any builtin functions.  */
517
518 extern int flag_no_builtin;
519
520 /* Nonzero means don't recognize the non-ANSI builtin functions.
521    -ansi sets this.  */
522
523 extern int flag_no_nonansi_builtin;
524
525 /* Nonzero means enable obscure ANSI features and disable GNU extensions
526    that might cause ANSI-compliant code to be miscompiled.  */
527
528 extern int flag_ansi;
529
530 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
531    objects.  */
532 extern int flag_huge_objects;
533
534 /* Nonzero if we want to conserve space in the .o files.  We do this
535    by putting uninitialized data and runtime initialized data into
536    .common instead of .data at the expense of not flagging multiple
537    definitions.  */
538 extern int flag_conserve_space;
539
540 /* Pointers to the base and current top of the language name stack.  */
541
542 extern tree *current_lang_base, *current_lang_stack;
543 \f
544 /* C and C++ flags are in decl2.c.  */
545
546 /* Set to 0 at beginning of a constructor, set to 1
547    if that function does an allocation before referencing its
548    instance variable.  */
549 static int current_function_assigns_this;
550 int current_function_just_assigned_this;
551
552 /* Set to 0 at beginning of a function.  Set non-zero when
553    store_parm_decls is called.  Don't call store_parm_decls
554    if this flag is non-zero!  */
555 int current_function_parms_stored;
556
557 /* Flag used when debugging spew.c */
558
559 extern int spew_debug;
560
561 /* This is a copy of the class_shadowed list of the previous class binding
562    contour when at global scope.  It's used to reset IDENTIFIER_CLASS_VALUEs
563    when entering another class scope (i.e. a cache miss).  */
564 extern tree previous_class_values;
565
566 /* A expression of value 0 with the same precision as a sizetype
567    node, but signed.  */
568 tree signed_size_zero_node;
569
570 /* The name of the anonymous namespace, throughout this translation
571    unit.  */
572 tree anonymous_namespace_name;
573
574 \f
575 /* Allocate a level of searching.  */
576
577 static
578 struct stack_level *
579 push_decl_level (stack, obstack)
580      struct stack_level *stack;
581      struct obstack *obstack;
582 {
583   struct stack_level tem;
584   tem.prev = stack;
585
586   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
587 }
588 \f
589 /* For each binding contour we allocate a binding_level structure
590    which records the names defined in that contour.
591    Contours include:
592     0) the global one
593     1) one for each function definition,
594        where internal declarations of the parameters appear.
595     2) one for each compound statement,
596        to record its declarations.
597
598    The current meaning of a name can be found by searching the levels
599    from the current one out to the global one.
600
601    Off to the side, may be the class_binding_level.  This exists only
602    to catch class-local declarations.  It is otherwise nonexistent.
603
604    Also there may be binding levels that catch cleanups that must be
605    run when exceptions occur.  Thus, to see whether a name is bound in
606    the current scope, it is not enough to look in the
607    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
608    instead.  */
609
610 /* Note that the information in the `names' component of the global contour
611    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
612
613 struct binding_level
614   {
615     /* A chain of _DECL nodes for all variables, constants, functions,
616        and typedef types.  These are in the reverse of the order
617        supplied.  There may be OVERLOADs on this list, too, but they
618        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
619     tree names;
620
621     /* A list of structure, union and enum definitions, for looking up
622        tag names.
623        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
624        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
625        or ENUMERAL_TYPE node.
626
627        C++: the TREE_VALUE nodes can be simple types for
628        component_bindings.  */
629     tree tags;
630
631     /* A list of USING_DECL nodes. */
632     tree usings;
633
634     /* A list of used namespaces. PURPOSE is the namespace,
635        VALUE the common ancestor with this binding_level's namespace. */
636     tree using_directives;
637
638     /* If this binding level is the binding level for a class, then
639        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
640        is the name of an entity bound in the class; the TREE_VALUE is
641        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
642        when leaving class scope, we can restore the
643        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
644        the DECL bound by this name in the class.  */
645     tree class_shadowed;
646
647     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
648        is used for all binding levels.  */
649     tree type_shadowed;
650
651     /* For each level (except not the global one),
652        a chain of BLOCK nodes for all the levels
653        that were entered and exited one level down.  */
654     tree blocks;
655
656     /* The BLOCK node for this level, if one has been preallocated.
657        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
658     tree this_block;
659
660     /* The binding level which this one is contained in (inherits from).  */
661     struct binding_level *level_chain;
662
663     /* List of decls in `names' that have incomplete
664        structure or union types.  */
665     tree incomplete;
666
667     /* List of VAR_DECLS saved from a previous for statement.
668        These would be dead in ANSI-conforming code, but might
669        be referenced in ARM-era code.  These are stored in a
670        TREE_LIST; the TREE_VALUE is the actual declaration.  */
671     tree dead_vars_from_for;
672
673     /* 1 for the level that holds the parameters of a function.
674        2 for the level that holds a class declaration.
675        3 for levels that hold parameter declarations.  */
676     unsigned parm_flag : 4;
677
678     /* 1 means make a BLOCK for this level regardless of all else.
679        2 for temporary binding contours created by the compiler.  */
680     unsigned keep : 3;
681
682     /* Nonzero if this level "doesn't exist" for tags.  */
683     unsigned tag_transparent : 1;
684
685     /* Nonzero if this level can safely have additional
686        cleanup-needing variables added to it.  */
687     unsigned more_cleanups_ok : 1;
688     unsigned have_cleanups : 1;
689
690     /* Nonzero if this level is for storing the decls for template
691        parameters and generic decls; these decls will be discarded and
692        replaced with a TEMPLATE_DECL.  */
693     unsigned pseudo_global : 1;
694
695     /* This is set for a namespace binding level.  */
696     unsigned namespace_p : 1;
697
698     /* True if this level is that of a for-statement where we need to
699        worry about ambiguous (ARM or ANSI) scope rules.  */
700     unsigned is_for_scope : 1;
701
702     /* Two bits left for this word.  */
703
704 #if defined(DEBUG_CP_BINDING_LEVELS)
705     /* Binding depth at which this level began.  */
706     unsigned binding_depth;
707 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
708   };
709
710 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
711   
712 /* The (non-class) binding level currently in effect.  */
713
714 static struct binding_level *current_binding_level;
715
716 /* The binding level of the current class, if any.  */
717
718 static struct binding_level *class_binding_level;
719
720 /* The current (class or non-class) binding level currently in effect.  */
721
722 #define inner_binding_level \
723   (class_binding_level ? class_binding_level : current_binding_level)
724
725 /* A chain of binding_level structures awaiting reuse.  */
726
727 static struct binding_level *free_binding_level;
728
729 /* The outermost binding level, for names of file scope.
730    This is created when the compiler is started and exists
731    through the entire run.  */
732
733 static struct binding_level *global_binding_level;
734
735 /* Binding level structures are initialized by copying this one.  */
736
737 static struct binding_level clear_binding_level;
738
739 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
740
741 static int keep_next_level_flag;
742
743 #if defined(DEBUG_CP_BINDING_LEVELS)
744 static int binding_depth = 0;
745 static int is_class_level = 0;
746
747 static void
748 indent ()
749 {
750   register unsigned i;
751
752   for (i = 0; i < binding_depth*2; i++)
753     putc (' ', stderr);
754 }
755 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
756
757 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
758
759 static void
760 push_binding_level (newlevel, tag_transparent, keep)
761      struct binding_level *newlevel;
762      int tag_transparent, keep;
763 {
764   /* Add this level to the front of the chain (stack) of levels that
765      are active.  */
766   *newlevel = clear_binding_level;
767   if (class_binding_level)
768     {
769       newlevel->level_chain = class_binding_level;
770       class_binding_level = (struct binding_level *)0;
771     }
772   else
773     {
774       newlevel->level_chain = current_binding_level;
775     }
776   current_binding_level = newlevel;
777   newlevel->tag_transparent = tag_transparent;
778   newlevel->more_cleanups_ok = 1;
779   newlevel->keep = keep;
780 #if defined(DEBUG_CP_BINDING_LEVELS)
781   newlevel->binding_depth = binding_depth;
782   indent ();
783   fprintf (stderr, "push %s level 0x%08x line %d\n",
784            (is_class_level) ? "class" : "block", newlevel, lineno);
785   is_class_level = 0;
786   binding_depth++;
787 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
788 }
789
790 static void
791 pop_binding_level ()
792 {
793   if (class_binding_level)
794     current_binding_level = class_binding_level;
795
796   if (global_binding_level)
797     {
798       /* Cannot pop a level, if there are none left to pop.  */
799       if (current_binding_level == global_binding_level)
800         my_friendly_abort (123);
801     }
802   /* Pop the current level, and free the structure for reuse.  */
803 #if defined(DEBUG_CP_BINDING_LEVELS)
804   binding_depth--;
805   indent ();
806   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
807           (is_class_level) ? "class" : "block",
808           current_binding_level, lineno);
809   if (is_class_level != (current_binding_level == class_binding_level))
810     {
811       indent ();
812       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
813     }
814   is_class_level = 0;
815 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
816   {
817     register struct binding_level *level = current_binding_level;
818     current_binding_level = current_binding_level->level_chain;
819     level->level_chain = free_binding_level;
820 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
821     if (level->binding_depth != binding_depth)
822       abort ();
823 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
824       free_binding_level = level;
825
826     class_binding_level = current_binding_level;
827     if (class_binding_level->parm_flag != 2)
828       class_binding_level = 0;
829     while (current_binding_level->parm_flag == 2)
830       current_binding_level = current_binding_level->level_chain;
831   }
832 }
833
834 static void
835 suspend_binding_level ()
836 {
837   if (class_binding_level)
838     current_binding_level = class_binding_level;
839
840   if (global_binding_level)
841     {
842       /* Cannot suspend a level, if there are none left to suspend.  */
843       if (current_binding_level == global_binding_level)
844         my_friendly_abort (123);
845     }
846   /* Suspend the current level.  */
847 #if defined(DEBUG_CP_BINDING_LEVELS)
848   binding_depth--;
849   indent ();
850   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
851           (is_class_level) ? "class" : "block",
852           current_binding_level, lineno);
853   if (is_class_level != (current_binding_level == class_binding_level))
854     {
855       indent ();
856       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
857     }
858   is_class_level = 0;
859 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
860   {
861     current_binding_level = current_binding_level->level_chain;
862     class_binding_level = current_binding_level;
863     if (class_binding_level->parm_flag != 2)
864       class_binding_level = 0;
865     while (current_binding_level->parm_flag == 2)
866       current_binding_level = current_binding_level->level_chain;
867   }
868 }
869
870 static void
871 resume_binding_level (b)
872      struct binding_level *b;
873 {
874   /* Resuming binding levels is meant only for namespaces,
875      and those cannot nest into classes. */
876   my_friendly_assert(!class_binding_level, 386);
877   /* Also, resuming a non-directly nested namespace is a no-no.  */
878   my_friendly_assert(b->level_chain == current_binding_level, 386);
879   current_binding_level = b;
880 #if defined(DEBUG_CP_BINDING_LEVELS)
881   b->binding_depth = binding_depth;
882   indent ();
883   fprintf (stderr, "resume %s level 0x%08x line %d\n",
884            (is_class_level) ? "class" : "block", b, lineno);
885   is_class_level = 0;
886   binding_depth++;
887 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
888 }
889 \f
890 /* Create a new `struct binding_level'.  */
891
892 static
893 struct binding_level *
894 make_binding_level ()
895 {
896   /* NOSTRICT */
897   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
898 }
899
900 /* Nonzero if we are currently in the global binding level.  */
901
902 int
903 global_bindings_p ()
904 {
905   return current_binding_level == global_binding_level;
906 }
907
908 /* Nonzero if we are currently in a toplevel binding level.  This
909    means either the global binding level or a namespace in a toplevel
910    binding level.
911    Since there are no non-toplevel namespace levels, this really
912    means any namespace or pseudo-global level.  */
913
914 int
915 toplevel_bindings_p ()
916 {
917   return current_binding_level->namespace_p 
918     || current_binding_level->pseudo_global;
919 }
920
921 /* Nonzero if this is a namespace scope.  */
922
923 int
924 namespace_bindings_p ()
925 {
926   return current_binding_level->namespace_p;
927 }
928
929 void
930 keep_next_level ()
931 {
932   keep_next_level_flag = 1;
933 }
934
935 /* Nonzero if the current level needs to have a BLOCK made.  */
936
937 int
938 kept_level_p ()
939 {
940   return (current_binding_level->blocks != NULL_TREE
941           || current_binding_level->keep
942           || current_binding_level->names != NULL_TREE
943           || (current_binding_level->tags != NULL_TREE
944               && !current_binding_level->tag_transparent));
945 }
946
947 /* Identify this binding level as a level of parameters.  */
948
949 void
950 declare_parm_level ()
951 {
952   current_binding_level->parm_flag = 1;
953 }
954
955 void
956 declare_pseudo_global_level ()
957 {
958   current_binding_level->pseudo_global = 1;
959 }
960
961 static void
962 declare_namespace_level ()
963 {
964   current_binding_level->namespace_p = 1;
965 }
966
967 int
968 pseudo_global_level_p ()
969 {
970   return current_binding_level->pseudo_global;
971 }
972
973 void
974 set_class_shadows (shadows)
975      tree shadows;
976 {
977   class_binding_level->class_shadowed = shadows;
978 }
979
980 /* Enter a new binding level.
981    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
982    not for that of tags.  */
983
984 void
985 pushlevel (tag_transparent)
986      int tag_transparent;
987 {
988   register struct binding_level *newlevel = NULL_BINDING_LEVEL;
989
990   /* If this is the top level of a function,
991      just make sure that NAMED_LABELS is 0.
992      They should have been set to 0 at the end of the previous function.  */
993
994   if (current_binding_level == global_binding_level)
995     my_friendly_assert (named_labels == NULL_TREE, 134);
996
997   /* Reuse or create a struct for this binding level.  */
998
999 #if defined(DEBUG_CP_BINDING_LEVELS)
1000   if (0)
1001 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1002   if (free_binding_level)
1003 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1004     {
1005       newlevel = free_binding_level;
1006       free_binding_level = free_binding_level->level_chain;
1007     }
1008   else
1009     {
1010       newlevel = make_binding_level ();
1011     }
1012
1013   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
1014   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
1015   keep_next_level_flag = 0;
1016 }
1017
1018 void
1019 note_level_for_for ()
1020 {
1021   current_binding_level->is_for_scope = 1;
1022 }
1023
1024 void
1025 pushlevel_temporary (tag_transparent)
1026      int tag_transparent;
1027 {
1028   pushlevel (tag_transparent);
1029   current_binding_level->keep = 2;
1030   clear_last_expr ();
1031
1032   /* Note we don't call push_momentary() here.  Otherwise, it would cause
1033      cleanups to be allocated on the momentary obstack, and they will be
1034      overwritten by the next statement.  */
1035
1036   expand_start_bindings (0);
1037 }
1038
1039 /* For a binding between a name and an entity at a block scope,
1040    this is the `struct binding_level' for the block.  */
1041 #define BINDING_LEVEL(NODE) \
1042    (((struct tree_binding*)NODE)->scope.level)
1043
1044 /* These are currently unused, but permanent, CPLUS_BINDING nodes.
1045    They are kept here because they are allocated from the permanent
1046    obstack and cannot be easily freed.  */
1047 static tree free_binding_nodes;
1048
1049 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
1050    level at which this declaration is being bound.  */
1051
1052 static void
1053 push_binding (id, decl, level)
1054      tree id;
1055      tree decl;
1056      struct binding_level* level;
1057 {
1058   tree binding;
1059
1060   if (!free_binding_nodes)
1061     {
1062       /* There are no free nodes, so we must build one here.  */
1063       push_obstacks_nochange ();
1064       end_temporary_allocation ();
1065       binding = make_node (CPLUS_BINDING);
1066       pop_obstacks ();
1067     }
1068   else
1069     {
1070       /* There are nodes on the free list.  Grab the first one.  */
1071       binding = free_binding_nodes;
1072       
1073       /* And update the free list.  */
1074       free_binding_nodes = TREE_CHAIN (free_binding_nodes);
1075     }
1076
1077   /* Now, fill in the binding information.  */
1078   BINDING_VALUE (binding) = decl;
1079   BINDING_TYPE (binding) = NULL_TREE;
1080   BINDING_LEVEL (binding) = level;
1081   LOCAL_BINDING_P (binding) = (level != class_binding_level);
1082
1083   /* And put it on the front of the ilst of bindings for ID.  */
1084   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
1085   IDENTIFIER_BINDING (id) = binding;
1086 }
1087
1088 /* ID is already bound in the current scope.  But, DECL is an
1089    additional binding for ID in the same scope.  This is the `struct
1090    stat' hack whereby a non-typedef class-name or enum-name can be
1091    bound at the same level as some other kind of entity.  It's the
1092    responsibility of the caller to check that inserting this name is
1093    legal here.  */
1094 static void
1095 add_binding (id, decl)
1096      tree id;
1097      tree decl;
1098 {
1099   tree binding = IDENTIFIER_BINDING (id);
1100
1101   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
1102     /* The new name is the type name.  */
1103     BINDING_TYPE (binding) = decl;
1104   else 
1105     {
1106       /* The old name must be the type name.  It was placed in
1107          IDENTIFIER_VALUE because it was thought, at the point it
1108          was declared, to be the only entity with such a name.  */
1109       my_friendly_assert (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
1110                           && DECL_ARTIFICIAL (BINDING_VALUE (binding)),
1111                           0);
1112
1113       /* Move the type name into the type slot; it is now hidden by
1114          the new binding.  */
1115       BINDING_TYPE (binding) = BINDING_VALUE (binding);
1116       BINDING_VALUE (binding) = decl;
1117     }
1118 }
1119
1120 /* Bind DECL to ID in the current_binding_level.
1121    If PUSH_USING is set in FLAGS, we know that DECL doesn't really belong
1122    to this binding level, that it got here through a using-declaration.  */
1123
1124 void
1125 push_local_binding (id, decl, flags)
1126      tree id;
1127      tree decl;
1128      int flags;
1129 {
1130   tree d = decl;
1131
1132   if (lookup_name_current_level (id))
1133     /* Supplement the existing binding.  */
1134     add_binding (id, d);
1135   else
1136     /* Create a new binding.  */
1137     push_binding (id, d, current_binding_level);
1138
1139   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1140     /* We must put the OVERLOAD into a TREE_LIST since the
1141        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1142        decls that got here through a using-declaration.  */
1143     decl = build_tree_list (NULL_TREE, decl);
1144
1145   /* And put DECL on the list of things declared by the current
1146      binding level.  */
1147   TREE_CHAIN (decl) = current_binding_level->names;
1148   current_binding_level->names = decl;
1149 }
1150
1151 /* Bind DECL to ID in the class_binding_level.  */
1152
1153 void
1154 push_class_binding (id, decl)
1155      tree id;
1156      tree decl;
1157 {
1158   if (IDENTIFIER_BINDING (id)
1159       && BINDING_LEVEL (IDENTIFIER_BINDING (id)) == class_binding_level)
1160     /* Supplement the existing binding.  */
1161     add_binding (id, decl);
1162   else
1163     /* Create a new binding.  */
1164     push_binding (id, decl, class_binding_level);
1165
1166   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1167      class-level declaration.  Note that we do not use DECL here
1168      because of the possibility of the `struct stat' hack; if DECL is
1169      a class-name or enum-name we might prefer a field-name, or some
1170      such.  */
1171   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1172 }
1173
1174 /* Remove the binding for DECL which should be the innermost binding
1175    for ID.  */
1176
1177 static void 
1178 pop_binding (id, decl) 
1179      tree id;
1180      tree decl;
1181 {
1182   tree binding;
1183     
1184   if (id == NULL_TREE)
1185     /* It's easiest to write the loops that call this function without
1186        checking whether or not the entities involved have names.  We
1187        get here for such an entity.  */
1188     return;
1189
1190   /* Get the innermost binding for ID.  */
1191   binding = IDENTIFIER_BINDING (id);
1192
1193   /* The name should be bound.  */
1194   my_friendly_assert (binding != NULL_TREE, 0);
1195
1196   /* The DECL will be either the ordinary binding or the type
1197      binding for this identifier.  Remove that binding.  */
1198   if (BINDING_VALUE (binding) == decl)
1199     BINDING_VALUE (binding) = NULL_TREE;
1200   else if (BINDING_TYPE (binding) == decl)
1201     BINDING_TYPE (binding) = NULL_TREE;
1202   else
1203     my_friendly_abort (0);
1204
1205   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1206     {
1207       /* We're completely done with the innermost binding for this
1208          identifier.  Unhook it from the list of bindings.  */
1209       IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1210
1211       /* And place it on the free list.  */
1212       TREE_CHAIN (binding) = free_binding_nodes;
1213       free_binding_nodes = binding;
1214     }
1215 }
1216
1217 /* Exit a binding level.
1218    Pop the level off, and restore the state of the identifier-decl mappings
1219    that were in effect when this level was entered.
1220
1221    If KEEP == 1, this level had explicit declarations, so
1222    and create a "block" (a BLOCK node) for the level
1223    to record its declarations and subblocks for symbol table output.
1224
1225    If FUNCTIONBODY is nonzero, this level is the body of a function,
1226    so create a block as if KEEP were set and also clear out all
1227    label names.
1228
1229    If REVERSE is nonzero, reverse the order of decls before putting
1230    them into the BLOCK.  */
1231
1232 tree
1233 poplevel (keep, reverse, functionbody)
1234      int keep;
1235      int reverse;
1236      int functionbody;
1237 {
1238   register tree link;
1239   /* The chain of decls was accumulated in reverse order.
1240      Put it into forward order, just for cleanliness.  */
1241   tree decls;
1242   int tmp = functionbody;
1243   int real_functionbody = current_binding_level->keep == 2
1244     ? ((functionbody = 0), tmp) : functionbody;
1245   tree tags = functionbody >= 0 ? current_binding_level->tags : 0;
1246   tree subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1247   tree block = NULL_TREE;
1248   tree decl;
1249   int block_previously_created;
1250   int leaving_for_scope;
1251
1252   if (current_binding_level->parm_flag == 2
1253       || current_binding_level->class_shadowed)
1254     /* We should not be using poplevel to pop a class binding level.
1255        Use poplevel_class instead.  */
1256     my_friendly_abort (0);
1257
1258   /* We used to use KEEP == 2 to indicate that the new block should go
1259      at the beginning of the list of blocks at this binding level,
1260      rather than the end.  This hack is no longer used.  */
1261   my_friendly_assert (keep == 0 || keep == 1, 0);
1262
1263   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1264                       (HOST_WIDE_INT) current_binding_level->level_chain,
1265                       current_binding_level->parm_flag,
1266                       current_binding_level->keep);
1267
1268   if (current_binding_level->keep == 1)
1269     keep = 1;
1270
1271   /* Get the decls in the order they were written.
1272      Usually current_binding_level->names is in reverse order.
1273      But parameter decls were previously put in forward order.  */
1274
1275   if (reverse)
1276     current_binding_level->names
1277       = decls = nreverse (current_binding_level->names);
1278   else
1279     decls = current_binding_level->names;
1280
1281   /* Output any nested inline functions within this block
1282      if they weren't already output.  */
1283
1284   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1285     if (TREE_CODE (decl) == FUNCTION_DECL
1286         && ! TREE_ASM_WRITTEN (decl)
1287         && DECL_INITIAL (decl) != NULL_TREE
1288         && TREE_ADDRESSABLE (decl)
1289         && decl_function_context (decl) == current_function_decl)
1290       {
1291         /* If this decl was copied from a file-scope decl
1292            on account of a block-scope extern decl,
1293            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1294         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1295           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1296         else
1297           {
1298             push_function_context ();
1299             output_inline_function (decl);
1300             pop_function_context ();
1301           }
1302       }
1303
1304   /* If there were any declarations or structure tags in that level,
1305      or if this level is a function body,
1306      create a BLOCK to record them for the life of this function.  */
1307
1308   block = NULL_TREE;
1309   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1310   if (block_previously_created)
1311     block = current_binding_level->this_block;
1312   else if (keep == 1 || functionbody)
1313     block = make_node (BLOCK);
1314   if (block != NULL_TREE)
1315     {
1316       if (block_previously_created)
1317         {
1318           if (decls || tags || subblocks)
1319             {
1320               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1321                 warning ("internal compiler error: debugging info corrupted");
1322
1323               BLOCK_VARS (block) = decls;
1324               BLOCK_TYPE_TAGS (block) = tags;
1325
1326               /* We can have previous subblocks and new subblocks when
1327                  doing fixup_gotos with complex cleanups.  We chain the new
1328                  subblocks onto the end of any pre-existing subblocks.  */
1329               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1330                                                  subblocks);
1331             }
1332           /* If we created the block earlier on, and we are just
1333              diddling it now, then it already should have a proper
1334              BLOCK_END_NOTE value associated with it.  */
1335         }
1336       else
1337         {
1338           BLOCK_VARS (block) = decls;
1339           BLOCK_TYPE_TAGS (block) = tags;
1340           BLOCK_SUBBLOCKS (block) = subblocks;
1341           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1342              value.  */ 
1343           remember_end_note (block);
1344         }
1345     }
1346
1347   /* In each subblock, record that this is its superior.  */
1348
1349   if (keep >= 0)
1350     for (link = subblocks; link; link = TREE_CHAIN (link))
1351       BLOCK_SUPERCONTEXT (link) = block;
1352
1353   /* We still support the old for-scope rules, whereby the variables
1354      in a for-init statement were in scope after the for-statement
1355      ended.  We only use the new rules in flag_new_for_scope is
1356      nonzero.  */
1357   leaving_for_scope 
1358     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1359
1360   /* Remove declarations for all the DECLs in this level.  */
1361   for (link = decls; link; link = TREE_CHAIN (link))
1362     {
1363       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1364         {
1365           tree outer_binding 
1366             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1367           tree ns_binding;
1368
1369           if (!outer_binding)
1370             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1371           else
1372             ns_binding = NULL_TREE;
1373
1374           if (outer_binding 
1375               && (BINDING_LEVEL (outer_binding) 
1376                   == current_binding_level->level_chain))
1377             /* We have something like:
1378                
1379                  int i;
1380                  for (int i; ;);
1381                  
1382                and we are leaving the `for' scope.  There's no reason to
1383                keep the binding of the inner `i' in this case.  */
1384             pop_binding (DECL_NAME (link), link);
1385           else if ((outer_binding 
1386                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1387                         == TYPE_DECL))
1388                    || (ns_binding 
1389                        && TREE_CODE (ns_binding) == TYPE_DECL))
1390             /* Here, we have something like:
1391
1392                  typedef int I;
1393
1394                  void f () {
1395                    for (int I; ;);
1396                  }
1397
1398                We must pop the for-scope binding so we know what's a
1399                type and what isn't.  */
1400             pop_binding (DECL_NAME (link), link);
1401           else
1402             {
1403               /* Mark this VAR_DECL as dead so that we can tell we left it
1404                  there only for backward compatibility.  */
1405               DECL_DEAD_FOR_LOCAL (link) = 1;
1406               
1407               /* Keep track of what should of have happenned when we
1408                  popped the binding.  */
1409               if (outer_binding && BINDING_VALUE (outer_binding))
1410                 DECL_SHADOWED_FOR_VAR (link) 
1411                   = BINDING_VALUE (outer_binding);
1412
1413               /* Add it to the list of dead variables in the next
1414                  outermost binding to that we can remove these when we
1415                  leave that binding.  */
1416               current_binding_level->level_chain->dead_vars_from_for
1417                 = tree_cons (NULL_TREE, link,
1418                              current_binding_level->level_chain->
1419                              dead_vars_from_for);
1420
1421               /* Although we don't pop the CPLUS_BINDING, we do clear
1422                  its BINDING_LEVEL since the level is going away now.  */
1423               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1424                 = 0;
1425             }
1426         }
1427       else 
1428         {
1429           /* Remove the binding.  */
1430           decl = link;
1431           if (TREE_CODE (decl) == TREE_LIST)
1432             decl = TREE_VALUE (decl);
1433           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1434             pop_binding (DECL_NAME (decl), decl);
1435           else if (TREE_CODE (decl) == OVERLOAD)
1436             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1437           else 
1438             my_friendly_abort (0);
1439         }
1440     }
1441
1442   /* Remove declarations for any `for' variables from inner scopes
1443      that we kept around.  */
1444   for (link = current_binding_level->dead_vars_from_for;
1445        link; link = TREE_CHAIN (link))
1446     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1447
1448   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1449   for (link = current_binding_level->type_shadowed;
1450        link; link = TREE_CHAIN (link))
1451     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1452   
1453   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1454      list if a `using' declaration put them there.  The debugging
1455      back-ends won't understand OVERLOAD, so we remove them here.
1456      Because the BLOCK_VARS are (temporarily) shared with
1457      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1458      popped all the bindings.  */
1459   if (block)
1460     {
1461       tree* d;
1462
1463       for (d = &BLOCK_VARS (block); *d; )
1464         {
1465           if (TREE_CODE (*d) == TREE_LIST)
1466             *d = TREE_CHAIN (*d);
1467           else
1468             d = &TREE_CHAIN (*d);
1469         }
1470     }
1471
1472   /* If the level being exited is the top level of a function,
1473      check over all the labels.  */
1474
1475   if (functionbody)
1476     {
1477       /* If this is the top level block of a function,
1478          the vars are the function's parameters.
1479          Don't leave them in the BLOCK because they are
1480          found in the FUNCTION_DECL instead.  */
1481
1482       BLOCK_VARS (block) = 0;
1483
1484       /* Clear out the definitions of all label names,
1485          since their scopes end here.  */
1486
1487       for (link = named_labels; link; link = TREE_CHAIN (link))
1488         {
1489           register tree label = TREE_VALUE (link);
1490
1491           if (DECL_INITIAL (label) == NULL_TREE)
1492             {
1493               cp_error_at ("label `%D' used but not defined", label);
1494               /* Avoid crashing later.  */
1495               define_label (input_filename, 1, DECL_NAME (label));
1496             }
1497           else if (warn_unused && !TREE_USED (label))
1498             cp_warning_at ("label `%D' defined but not used", label);
1499           SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), NULL_TREE);
1500
1501           /* Put the labels into the "variables" of the
1502              top-level block, so debugger can see them.  */
1503           TREE_CHAIN (label) = BLOCK_VARS (block);
1504           BLOCK_VARS (block) = label;
1505         }
1506
1507       named_labels = NULL_TREE;
1508     }
1509
1510   /* Any uses of undefined labels now operate under constraints
1511      of next binding contour.  */
1512   {
1513     struct binding_level *level_chain;
1514     level_chain = current_binding_level->level_chain;
1515     if (level_chain)
1516       {
1517         struct named_label_list *labels;
1518         for (labels = named_label_uses; labels; labels = labels->next)
1519           if (labels->binding_level == current_binding_level)
1520             {
1521               labels->binding_level = level_chain;
1522               labels->names_in_scope = level_chain->names;
1523             }
1524       }
1525   }
1526
1527   tmp = current_binding_level->keep;
1528
1529   pop_binding_level ();
1530   if (functionbody)
1531     DECL_INITIAL (current_function_decl) = block;
1532   else if (block)
1533     {
1534       if (!block_previously_created)
1535         current_binding_level->blocks
1536           = chainon (current_binding_level->blocks, block);
1537     }
1538   /* If we did not make a block for the level just exited,
1539      any blocks made for inner levels
1540      (since they cannot be recorded as subblocks in that level)
1541      must be carried forward so they will later become subblocks
1542      of something else.  */
1543   else if (subblocks)
1544     current_binding_level->blocks
1545       = chainon (current_binding_level->blocks, subblocks);
1546
1547   /* Take care of compiler's internal binding structures.  */
1548   if (tmp == 2)
1549     {
1550       expand_end_bindings (getdecls (), keep, 1);
1551       /* Each and every BLOCK node created here in `poplevel' is important
1552          (e.g. for proper debugging information) so if we created one
1553          earlier, mark it as "used".  */
1554       if (block)
1555         TREE_USED (block) = 1;
1556       block = poplevel (keep, reverse, real_functionbody);
1557     }
1558
1559   /* Each and every BLOCK node created here in `poplevel' is important
1560      (e.g. for proper debugging information) so if we created one
1561      earlier, mark it as "used".  */
1562   if (block)
1563     TREE_USED (block) = 1;
1564   return block;
1565 }
1566
1567 /* Delete the node BLOCK from the current binding level.
1568    This is used for the block inside a stmt expr ({...})
1569    so that the block can be reinserted where appropriate.  */
1570
1571 void
1572 delete_block (block)
1573      tree block;
1574 {
1575   tree t;
1576   if (current_binding_level->blocks == block)
1577     current_binding_level->blocks = TREE_CHAIN (block);
1578   for (t = current_binding_level->blocks; t;)
1579     {
1580       if (TREE_CHAIN (t) == block)
1581         TREE_CHAIN (t) = TREE_CHAIN (block);
1582       else
1583         t = TREE_CHAIN (t);
1584     }
1585   TREE_CHAIN (block) = NULL_TREE;
1586   /* Clear TREE_USED which is always set by poplevel.
1587      The flag is set again if insert_block is called.  */
1588   TREE_USED (block) = 0;
1589 }
1590
1591 /* Insert BLOCK at the end of the list of subblocks of the
1592    current binding level.  This is used when a BIND_EXPR is expanded,
1593    to handle the BLOCK node inside the BIND_EXPR.  */
1594
1595 void
1596 insert_block (block)
1597      tree block;
1598 {
1599   TREE_USED (block) = 1;
1600   current_binding_level->blocks
1601     = chainon (current_binding_level->blocks, block);
1602 }
1603
1604 /* Set the BLOCK node for the innermost scope
1605    (the one we are currently in).  */
1606
1607 void
1608 set_block (block)
1609     register tree block;
1610 {
1611   current_binding_level->this_block = block;
1612 }
1613
1614 /* Do a pushlevel for class declarations.  */
1615
1616 void
1617 pushlevel_class ()
1618 {
1619   register struct binding_level *newlevel;
1620
1621   /* Reuse or create a struct for this binding level.  */
1622 #if defined(DEBUG_CP_BINDING_LEVELS)
1623   if (0)
1624 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1625   if (free_binding_level)
1626 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1627     {
1628       newlevel = free_binding_level;
1629       free_binding_level = free_binding_level->level_chain;
1630     }
1631   else
1632     newlevel = make_binding_level ();
1633
1634 #if defined(DEBUG_CP_BINDING_LEVELS)
1635   is_class_level = 1;
1636 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1637
1638   push_binding_level (newlevel, 0, 0);
1639
1640   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1641   class_binding_level = current_binding_level;
1642   class_binding_level->parm_flag = 2;
1643   /* We have just pushed into a new binding level.  Now, fake out the rest
1644      of the compiler.  Set the `current_binding_level' back to point to
1645      the most closely containing non-class binding level.  */
1646   do
1647     {
1648       current_binding_level = current_binding_level->level_chain;
1649     }
1650   while (current_binding_level->parm_flag == 2);
1651 }
1652
1653 /* ...and a poplevel for class declarations.  FORCE is used to force
1654    clearing out of CLASS_VALUEs after a class definition.  */
1655
1656 tree
1657 poplevel_class (force)
1658      int force;
1659 {
1660   register struct binding_level *level = class_binding_level;
1661   tree block = NULL_TREE;
1662   tree shadowed;
1663
1664   my_friendly_assert (level != 0, 354);
1665   
1666   decl_stack = pop_stack_level (decl_stack);
1667   /* If we're leaving a toplevel class, don't bother to do the setting
1668      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1669      shouldn't even be used when current_class_type isn't set, and second,
1670      if we don't touch it here, we're able to use the cache effect if the
1671      next time we're entering a class scope, it is the same class.  */
1672   if (current_class_depth != 1 || force)
1673     for (shadowed = level->class_shadowed;
1674          shadowed;
1675          shadowed = TREE_CHAIN (shadowed))
1676       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
1677   else
1678     /* Remember to save what IDENTIFIER's were bound in this scope so we
1679        can recover from cache misses.  */
1680     {
1681       previous_class_type = current_class_type;
1682       previous_class_values = class_binding_level->class_shadowed;
1683     }
1684   for (shadowed = level->type_shadowed;
1685        shadowed;
1686        shadowed = TREE_CHAIN (shadowed))
1687     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1688
1689   /* Remove the bindings for all of the class-level declarations.  */
1690   for (shadowed = level->class_shadowed; 
1691        shadowed; 
1692        shadowed = TREE_CHAIN (shadowed))
1693     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1694
1695   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1696                       (HOST_WIDE_INT) class_binding_level->level_chain,
1697                       class_binding_level->parm_flag,
1698                       class_binding_level->keep);
1699
1700   if (class_binding_level->parm_flag != 2)
1701     class_binding_level = (struct binding_level *)0;
1702
1703   /* Now, pop out of the binding level which we created up in the
1704      `pushlevel_class' routine.  */
1705 #if defined(DEBUG_CP_BINDING_LEVELS)
1706   is_class_level = 1;
1707 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1708
1709   pop_binding_level ();
1710
1711   return block;
1712 }
1713 \f
1714 /* For debugging.  */
1715 static int no_print_functions = 0;
1716 static int no_print_builtins = 0;
1717
1718 void
1719 print_binding_level (lvl)
1720      struct binding_level *lvl;
1721 {
1722   tree t;
1723   int i = 0, len;
1724   fprintf (stderr, " blocks=");
1725   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1726   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1727            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1728   if (lvl->tag_transparent)
1729     fprintf (stderr, " tag-transparent");
1730   if (lvl->more_cleanups_ok)
1731     fprintf (stderr, " more-cleanups-ok");
1732   if (lvl->have_cleanups)
1733     fprintf (stderr, " have-cleanups");
1734   fprintf (stderr, "\n");
1735   if (lvl->names)
1736     {
1737       fprintf (stderr, " names:\t");
1738       /* We can probably fit 3 names to a line?  */
1739       for (t = lvl->names; t; t = TREE_CHAIN (t))
1740         {
1741           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1742             continue;
1743           if (no_print_builtins
1744               && (TREE_CODE (t) == TYPE_DECL)
1745               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1746             continue;
1747
1748           /* Function decls tend to have longer names.  */
1749           if (TREE_CODE (t) == FUNCTION_DECL)
1750             len = 3;
1751           else
1752             len = 2;
1753           i += len;
1754           if (i > 6)
1755             {
1756               fprintf (stderr, "\n\t");
1757               i = len;
1758             }
1759           print_node_brief (stderr, "", t, 0);
1760           if (t == error_mark_node)
1761             break;
1762         }
1763       if (i)
1764         fprintf (stderr, "\n");
1765     }
1766   if (lvl->tags)
1767     {
1768       fprintf (stderr, " tags:\t");
1769       i = 0;
1770       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1771         {
1772           if (TREE_PURPOSE (t) == NULL_TREE)
1773             len = 3;
1774           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1775             len = 2;
1776           else
1777             len = 4;
1778           i += len;
1779           if (i > 5)
1780             {
1781               fprintf (stderr, "\n\t");
1782               i = len;
1783             }
1784           if (TREE_PURPOSE (t) == NULL_TREE)
1785             {
1786               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1787               fprintf (stderr, ">");
1788             }
1789           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1790             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1791           else
1792             {
1793               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1794               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1795               fprintf (stderr, ">");
1796             }
1797         }
1798       if (i)
1799         fprintf (stderr, "\n");
1800     }
1801   if (lvl->class_shadowed)
1802     {
1803       fprintf (stderr, " class-shadowed:");
1804       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1805         {
1806           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1807         }
1808       fprintf (stderr, "\n");
1809     }
1810   if (lvl->type_shadowed)
1811     {
1812       fprintf (stderr, " type-shadowed:");
1813       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1814         {
1815           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1816         }
1817       fprintf (stderr, "\n");
1818     }
1819 }
1820
1821 void
1822 print_other_binding_stack (stack)
1823      struct binding_level *stack;
1824 {
1825   struct binding_level *level;
1826   for (level = stack; level != global_binding_level; level = level->level_chain)
1827     {
1828       fprintf (stderr, "binding level ");
1829       fprintf (stderr, HOST_PTR_PRINTF, level);
1830       fprintf (stderr, "\n");
1831       print_binding_level (level);
1832     }
1833 }
1834
1835 void
1836 print_binding_stack ()
1837 {
1838   struct binding_level *b;
1839   fprintf (stderr, "current_binding_level=");
1840   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1841   fprintf (stderr, "\nclass_binding_level=");
1842   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1843   fprintf (stderr, "\nglobal_binding_level=");
1844   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1845   fprintf (stderr, "\n");
1846   if (class_binding_level)
1847     {
1848       for (b = class_binding_level; b; b = b->level_chain)
1849         if (b == current_binding_level)
1850           break;
1851       if (b)
1852         b = class_binding_level;
1853       else
1854         b = current_binding_level;
1855     }
1856   else
1857     b = current_binding_level;
1858   print_other_binding_stack (b);
1859   fprintf (stderr, "global:\n");
1860   print_binding_level (global_binding_level);
1861 }
1862
1863 /* Namespace binding access routines: The namespace_bindings field of
1864    the identifier is polymorphic, with three possible values:
1865    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1866    indicating the BINDING_VALUE of global_namespace. */
1867
1868 /* Check whether the a binding for the name to scope is known.
1869    Assumes that the bindings of the name are already a list
1870    of bindings. Returns the binding found, or NULL_TREE. */
1871
1872 static tree
1873 find_binding (name, scope)
1874      tree name;
1875      tree scope;
1876 {
1877   tree iter, prev = NULL_TREE;
1878
1879   scope = ORIGINAL_NAMESPACE (scope);
1880   
1881   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
1882        iter = TREE_CHAIN (iter))
1883     {
1884       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
1885       if (BINDING_SCOPE (iter) == scope)
1886         {
1887           /* Move binding found to the fron of the list, so
1888              subsequent lookups will find it faster. */
1889           if (prev)
1890             {
1891               TREE_CHAIN (prev) = TREE_CHAIN (iter);
1892               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
1893               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
1894             }
1895           return iter;
1896         }
1897       prev = iter;
1898     }
1899   return NULL_TREE;
1900 }
1901
1902 /* Always returns a binding for name in scope. If the
1903    namespace_bindings is not a list, convert it to one first.
1904    If no binding is found, make a new one. */
1905
1906 tree
1907 binding_for_name (name, scope)
1908      tree name;
1909      tree scope;
1910 {
1911   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1912   tree result;
1913
1914   scope = ORIGINAL_NAMESPACE (scope);
1915   
1916   if (b && TREE_CODE (b) != CPLUS_BINDING)
1917     {
1918       /* Get rid of optimization for global scope. */
1919       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
1920       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
1921       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1922     }
1923   if (b && (result = find_binding (name, scope)))
1924     return result;
1925   /* Not found, make a new permanent one. */
1926   push_obstacks (&permanent_obstack, &permanent_obstack);
1927   result = make_node (CPLUS_BINDING);
1928   TREE_CHAIN (result) = b;
1929   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
1930   BINDING_SCOPE (result) = scope;
1931   BINDING_TYPE (result) = NULL_TREE;
1932   BINDING_VALUE (result) = NULL_TREE;
1933   pop_obstacks ();
1934   return result;
1935 }
1936
1937 /* Return the binding value for name in scope, considering that
1938    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
1939
1940 tree
1941 namespace_binding (name, scope)
1942      tree name;
1943      tree scope;
1944 {
1945   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1946   if (b == NULL_TREE)
1947     return NULL_TREE;
1948   if (scope == NULL_TREE)
1949     scope = global_namespace;
1950   if (TREE_CODE (b) != CPLUS_BINDING)
1951     return (scope == global_namespace) ? b : NULL_TREE;
1952   name = find_binding (name,scope);
1953   if (name == NULL_TREE)
1954     return name;
1955   return BINDING_VALUE (name);
1956 }
1957
1958 /* Set the binding value for name in scope. If modifying the binding
1959    of global_namespace is attempted, try to optimize it. */
1960
1961 void
1962 set_namespace_binding (name, scope, val)
1963      tree name;
1964      tree scope;
1965      tree val;
1966 {
1967   tree b;
1968
1969   if (scope == NULL_TREE)
1970     scope = global_namespace;
1971   
1972   if (scope == global_namespace)
1973     {
1974       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
1975       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
1976         {
1977           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
1978           return;
1979         }
1980     }
1981   b = binding_for_name (name, scope);
1982   BINDING_VALUE (b) = val;
1983 }
1984
1985 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
1986    select a name that is unique to this compilation unit.  */
1987
1988 void
1989 push_namespace (name)
1990      tree name;
1991 {
1992   tree d = NULL_TREE;
1993   int need_new = 1;
1994   int implicit_use = 0;
1995   int global = 0;
1996   if (!global_namespace)
1997     {
1998       /* This must be ::. */
1999       my_friendly_assert (name == get_identifier ("::"), 377);
2000       global = 1;
2001     }
2002   else if (!name)
2003     {
2004       /* The name of anonymous namespace is unique for the translation
2005          unit.  */
2006       if (!anonymous_namespace_name)
2007         anonymous_namespace_name = get_file_function_name ('N');
2008       name = anonymous_namespace_name;
2009       d = IDENTIFIER_NAMESPACE_VALUE (name);
2010       if (d)
2011         /* Reopening anonymous namespace.  */
2012         need_new = 0;
2013       implicit_use = 1;
2014     }
2015   else if (current_namespace == global_namespace
2016            && name == DECL_NAME (std_node))
2017     {
2018       in_std++;
2019       return;
2020     }
2021   else
2022     {
2023       /* Check whether this is an extended namespace definition. */
2024       d = IDENTIFIER_NAMESPACE_VALUE (name);
2025       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2026         {
2027           need_new = 0;
2028           if (DECL_NAMESPACE_ALIAS (d))
2029             {
2030               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2031                         d, DECL_NAMESPACE_ALIAS (d));
2032               d = DECL_NAMESPACE_ALIAS (d);
2033             }
2034         }
2035     }
2036   
2037   if (need_new)
2038     {
2039       /* Make a new namespace, binding the name to it. */
2040       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2041       /* The global namespace is not pushed, and the global binding
2042          level is set elsewhere.  */
2043       if (!global)
2044         {
2045           d = pushdecl (d);
2046           pushlevel (0);
2047           declare_namespace_level ();
2048           NAMESPACE_LEVEL (d) = current_binding_level;
2049         }
2050     }
2051   else
2052     resume_binding_level (NAMESPACE_LEVEL (d));
2053
2054   if (implicit_use)
2055     do_using_directive (d);
2056   /* Enter the name space. */
2057   current_namespace = d;
2058 }
2059
2060 /* Pop from the scope of the current namespace.  */
2061
2062 void
2063 pop_namespace ()
2064 {
2065   if (current_namespace == global_namespace)
2066     {
2067       my_friendly_assert (in_std>0, 980421);
2068       in_std--;
2069       return;
2070     }
2071   current_namespace = CP_DECL_CONTEXT (current_namespace);
2072   /* The binding level is not popped, as it might be re-opened later.  */
2073   suspend_binding_level ();
2074 }
2075
2076 /* Concatenate the binding levels of all namespaces. */
2077
2078 void
2079 cat_namespace_levels()
2080 {
2081   tree current;
2082   tree last;
2083   struct binding_level *b;
2084
2085   last = NAMESPACE_LEVEL (global_namespace) -> names;
2086   /* The nested namespaces appear in the names list of their ancestors. */
2087   for (current = last; current; current = TREE_CHAIN (current))
2088     {
2089       /* Catch simple infinite loops.  */
2090       if (TREE_CHAIN (current) == current)
2091         my_friendly_abort (990126);
2092
2093       if (TREE_CODE (current) != NAMESPACE_DECL
2094           || DECL_NAMESPACE_ALIAS (current))
2095         continue;
2096       if (!DECL_LANG_SPECIFIC (current))
2097         {
2098           /* Hmm. std. */
2099           my_friendly_assert (current == std_node, 393);
2100           continue;
2101         }
2102       b = NAMESPACE_LEVEL (current);
2103       while (TREE_CHAIN (last))
2104         last = TREE_CHAIN (last);
2105       TREE_CHAIN (last) = NAMESPACE_LEVEL (current) -> names;
2106     }
2107 }
2108 \f
2109 /* Subroutines for reverting temporarily to top-level for instantiation
2110    of templates and such.  We actually need to clear out the class- and
2111    local-value slots of all identifiers, so that only the global values
2112    are at all visible.  Simply setting current_binding_level to the global
2113    scope isn't enough, because more binding levels may be pushed.  */
2114 struct saved_scope {
2115   struct binding_level *old_binding_level;
2116   tree old_bindings;
2117   tree old_namespace;
2118   struct saved_scope *prev;
2119   tree class_name, class_type;
2120   tree access_specifier;
2121   tree function_decl;
2122   struct binding_level *class_bindings;
2123   tree *lang_base, *lang_stack, lang_name;
2124   int lang_stacksize;
2125   int minimal_parse_mode;
2126   tree last_function_parms;
2127   tree template_parms;
2128   HOST_WIDE_INT processing_template_decl;
2129   tree previous_class_type, previous_class_values;
2130   int processing_specialization;
2131   int processing_explicit_instantiation;
2132 };
2133 static struct saved_scope *current_saved_scope;
2134
2135 /* A chain of the binding vecs created by store_bindings.  We create a
2136    whole bunch of these during compilation, on permanent_obstack, so we
2137    can't just throw them away.  */
2138 static tree free_binding_vecs;
2139
2140 static tree
2141 store_bindings (names, old_bindings)
2142      tree names, old_bindings;
2143 {
2144   tree t;
2145   for (t = names; t; t = TREE_CHAIN (t))
2146     {
2147       tree binding, t1, id;
2148
2149       if (TREE_CODE (t) == TREE_LIST)
2150         id = TREE_PURPOSE (t);
2151       else
2152         id = DECL_NAME (t);
2153
2154       if (!id 
2155           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2156              we have no IDENTIFIER_BINDING if we have left the class
2157              scope, but cached the class-level declarations.  */
2158           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2159         continue;
2160
2161       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2162         if (TREE_VEC_ELT (t1, 0) == id)
2163           goto skip_it;
2164
2165       if (free_binding_vecs)
2166         {
2167           binding = free_binding_vecs;
2168           free_binding_vecs = TREE_CHAIN (free_binding_vecs);
2169         }
2170       else
2171         binding = make_tree_vec (4);
2172
2173       if (id)
2174         {
2175           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2176           TREE_VEC_ELT (binding, 0) = id;
2177           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2178           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2179           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2180           IDENTIFIER_BINDING (id) = NULL_TREE;
2181           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2182         }
2183       TREE_CHAIN (binding) = old_bindings;
2184       old_bindings = binding;
2185     skip_it:
2186       ;
2187     }
2188   return old_bindings;
2189 }
2190
2191 void
2192 maybe_push_to_top_level (pseudo)
2193      int pseudo;
2194 {
2195   extern int current_lang_stacksize;
2196   struct saved_scope *s
2197     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
2198   struct binding_level *b = inner_binding_level;
2199   tree old_bindings = NULL_TREE;
2200
2201   push_cp_function_context (NULL_TREE);
2202
2203   if (previous_class_type)
2204     old_bindings = store_bindings (previous_class_values, old_bindings);
2205
2206   /* Have to include global_binding_level, because class-level decls
2207      aren't listed anywhere useful.  */
2208   for (; b; b = b->level_chain)
2209     {
2210       tree t;
2211
2212       /* Template IDs are inserted into the global level. If they were
2213          inserted into namespace level, finish_file wouldn't find them
2214          when doing pending instantiations. Therefore, don't stop at
2215          namespace level, but continue until :: .  */
2216       if (b == global_binding_level || (pseudo && b->pseudo_global))
2217         break;
2218
2219       old_bindings = store_bindings (b->names, old_bindings);
2220       /* We also need to check class_shadowed to save class-level type
2221          bindings, since pushclass doesn't fill in b->names.  */
2222       if (b->parm_flag == 2)
2223         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2224
2225       /* Unwind type-value slots back to top level.  */
2226       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2227         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2228     }
2229
2230   s->old_binding_level = current_binding_level;
2231   current_binding_level = b;
2232
2233   s->old_namespace = current_namespace;
2234   s->class_name = current_class_name;
2235   s->class_type = current_class_type;
2236   s->access_specifier = current_access_specifier;
2237   s->function_decl = current_function_decl;
2238   s->class_bindings = class_binding_level;
2239   s->lang_stack = current_lang_stack;
2240   s->lang_base = current_lang_base;
2241   s->lang_stacksize = current_lang_stacksize;
2242   s->lang_name = current_lang_name;
2243   s->minimal_parse_mode = minimal_parse_mode;
2244   s->last_function_parms = last_function_parms;
2245   s->template_parms = current_template_parms;
2246   s->processing_template_decl = processing_template_decl;
2247   s->previous_class_type = previous_class_type;
2248   s->previous_class_values = previous_class_values;
2249   s->processing_specialization = processing_specialization;
2250   s->processing_explicit_instantiation = processing_explicit_instantiation;
2251
2252   current_class_name = current_class_type = NULL_TREE;
2253   current_function_decl = NULL_TREE;
2254   class_binding_level = (struct binding_level *)0;
2255   current_lang_stacksize = 10;
2256   current_lang_stack = current_lang_base
2257     = (tree *) xmalloc (current_lang_stacksize * sizeof (tree));
2258   current_lang_name = lang_name_cplusplus;
2259   strict_prototype = strict_prototypes_lang_cplusplus;
2260   named_labels = NULL_TREE;
2261   shadowed_labels = NULL_TREE;
2262   minimal_parse_mode = 0;
2263   previous_class_type = previous_class_values = NULL_TREE;
2264   processing_specialization = 0;
2265   processing_explicit_instantiation = 0;
2266   current_template_parms = NULL_TREE;
2267   processing_template_decl = 0;
2268   current_namespace = global_namespace;
2269
2270   s->prev = current_saved_scope;
2271   s->old_bindings = old_bindings;
2272   current_saved_scope = s;
2273
2274   push_obstacks (&permanent_obstack, &permanent_obstack);
2275 }
2276
2277 void
2278 push_to_top_level ()
2279 {
2280   maybe_push_to_top_level (0);
2281 }
2282
2283 void
2284 pop_from_top_level ()
2285 {
2286   extern int current_lang_stacksize;
2287   struct saved_scope *s = current_saved_scope;
2288   tree t;
2289
2290   /* Clear out class-level bindings cache.  */
2291   if (previous_class_type)
2292     {
2293       popclass (-1);
2294       previous_class_type = NULL_TREE;
2295     }
2296
2297   pop_obstacks ();
2298
2299   current_binding_level = s->old_binding_level;
2300   current_saved_scope = s->prev;
2301   for (t = s->old_bindings; t; )
2302     {
2303       tree save = t;
2304       tree id = TREE_VEC_ELT (t, 0);
2305       if (id)
2306         {
2307           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2308           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2309           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2310         }
2311       t = TREE_CHAIN (t);
2312       TREE_CHAIN (save) = free_binding_vecs;
2313       free_binding_vecs = save;
2314     }
2315   current_namespace = s->old_namespace;
2316   current_class_name = s->class_name;
2317   current_class_type = s->class_type;
2318   current_access_specifier = s->access_specifier;
2319   current_function_decl = s->function_decl;
2320   class_binding_level = s->class_bindings;
2321   free (current_lang_base);
2322   current_lang_base = s->lang_base;
2323   current_lang_stack = s->lang_stack;
2324   current_lang_name = s->lang_name;
2325   current_lang_stacksize = s->lang_stacksize;
2326   if (current_lang_name == lang_name_cplusplus)
2327     strict_prototype = strict_prototypes_lang_cplusplus;
2328   else if (current_lang_name == lang_name_c)
2329     strict_prototype = strict_prototypes_lang_c;
2330   minimal_parse_mode = s->minimal_parse_mode;
2331   last_function_parms = s->last_function_parms;
2332   current_template_parms = s->template_parms;
2333   processing_template_decl = s->processing_template_decl;
2334   previous_class_type = s->previous_class_type;
2335   previous_class_values = s->previous_class_values;
2336   processing_specialization = s->processing_specialization;
2337   processing_explicit_instantiation = s->processing_explicit_instantiation;
2338
2339   free (s);
2340
2341   pop_cp_function_context (NULL_TREE);
2342 }
2343 \f
2344 /* Push a definition of struct, union or enum tag "name".
2345    into binding_level "b".   "type" should be the type node, 
2346    We assume that the tag "name" is not already defined.
2347
2348    Note that the definition may really be just a forward reference.
2349    In that case, the TYPE_SIZE will be a NULL_TREE.
2350
2351    C++ gratuitously puts all these tags in the name space.  */
2352
2353 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2354    record the shadowed value for this binding contour.  TYPE is
2355    the type that ID maps to.  */
2356
2357 static void
2358 set_identifier_type_value_with_scope (id, type, b)
2359      tree id;
2360      tree type;
2361      struct binding_level *b;
2362 {
2363   if (!b->namespace_p)
2364     {
2365       /* Shadow the marker, not the real thing, so that the marker
2366          gets restored later. */
2367       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2368       b->type_shadowed
2369         = tree_cons (id, old_type_value, b->type_shadowed);
2370     }
2371   else
2372     {
2373       tree binding = binding_for_name (id, current_namespace);
2374       BINDING_TYPE (binding) = type;
2375       /* Store marker instead of real type. */
2376       type = global_type_node;
2377     }
2378   SET_IDENTIFIER_TYPE_VALUE (id, type);
2379 }
2380
2381 /* As set_identifier_type_value_with_scope, but using inner_binding_level.  */
2382
2383 void
2384 set_identifier_type_value (id, type)
2385      tree id;
2386      tree type;
2387 {
2388   set_identifier_type_value_with_scope (id, type, inner_binding_level);
2389 }
2390
2391 /* Return the type associated with id. */
2392
2393 tree
2394 identifier_type_value (id)
2395      tree id;
2396 {
2397   /* There is no type with that name, anywhere. */
2398   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2399     return NULL_TREE;
2400   /* This is not the type marker, but the real thing. */
2401   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2402     return REAL_IDENTIFIER_TYPE_VALUE (id);
2403   /* Have to search for it. It must be on the global level, now.
2404      Ask lookup_name not to return non-types. */
2405   id = lookup_name_real (id, 2, 1, 0);
2406   if (id)
2407     return TREE_TYPE (id);
2408   return NULL_TREE;
2409 }
2410
2411 /* Pop off extraneous binding levels left over due to syntax errors.
2412
2413    We don't pop past namespaces, as they might be valid.  */
2414
2415 void
2416 pop_everything ()
2417 {
2418 #ifdef DEBUG_CP_BINDING_LEVELS
2419   fprintf (stderr, "XXX entering pop_everything ()\n");
2420 #endif
2421   while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
2422     {
2423       if (class_binding_level)
2424         pop_nested_class (1);
2425       else
2426         poplevel (0, 0, 0);
2427     }
2428 #ifdef DEBUG_CP_BINDING_LEVELS
2429   fprintf (stderr, "XXX leaving pop_everything ()\n");
2430 #endif
2431 }
2432
2433 /* The type TYPE is being declared.  If it is a class template, or a
2434    specialization of a class template, do any processing required and
2435    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2436    being declared a friend.  B is the binding level at which this TYPE
2437    should be bound.
2438
2439    Returns the TYPE_DECL for TYPE, which may have been altered by this
2440    processing.  */
2441
2442 static tree 
2443 maybe_process_template_type_declaration (type, globalize, b)
2444      tree type;
2445      int globalize;
2446      struct binding_level* b;
2447 {
2448   tree decl = TYPE_NAME (type);
2449  
2450   if (processing_template_parmlist)
2451     /* You can't declare a new template type in a template parameter
2452        list.  But, you can declare a non-template type:
2453        
2454          template <class A*> struct S;
2455        
2456        is a forward-declaration of `A'.  */
2457     ;
2458   else 
2459     {
2460       maybe_check_template_type (type);
2461
2462       my_friendly_assert (IS_AGGR_TYPE (type) 
2463                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2464                           
2465                           
2466       if (/* If !GLOBALIZE then we are looking at a definition.
2467              It may not be a primary template.  (For example, in:
2468                   
2469                template <class T>
2470                struct S1 { class S2 {}; }
2471                   
2472              we have to push_template_decl for S2.)  */
2473           (processing_template_decl && !globalize)
2474           /* If we are declaring a friend template class, we will
2475              have GLOBALIZE set, since something like:
2476
2477                template <class T>
2478                struct S1 {
2479                  template <class U>
2480                  friend class S2; 
2481                };
2482
2483              declares S2 to be at global scope.  */
2484           || PROCESSING_REAL_TEMPLATE_DECL_P ())
2485         {
2486           /* This may change after the call to
2487              push_template_decl_real, but we want the original value.  */
2488           tree name = DECL_NAME (decl);
2489
2490           decl = push_template_decl_real (decl, globalize);
2491           /* If the current binding level is the binding level for the
2492              template parameters (see the comment in
2493              begin_template_parm_list) and the enclosing level is a class
2494              scope, and we're not looking at a friend, push the
2495              declaration of the member class into the class scope.  In the
2496              friend case, push_template_decl will already have put the
2497              friend into global scope, if appropriate.  */
2498           if (TREE_CODE (type) != ENUMERAL_TYPE
2499               && !globalize && b->pseudo_global
2500               && b->level_chain->parm_flag == 2)
2501             {
2502               pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
2503                                    b->level_chain);
2504               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2505               /* Put this tag on the list of tags for the class, since
2506                  that won't happen below because B is not the class
2507                  binding level, but is instead the pseudo-global level.  */
2508               b->level_chain->tags = 
2509                 saveable_tree_cons (name, type, b->level_chain->tags);
2510               TREE_NONLOCAL_FLAG (type) = 1;
2511               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2512                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2513             }
2514         }
2515     }
2516
2517   return decl;
2518 }
2519
2520 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2521    Normally put it into the inner-most non-tag-transparent scope,
2522    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2523    The latter is needed for implicit declarations.  */
2524
2525 void
2526 pushtag (name, type, globalize)
2527      tree name, type;
2528      int globalize;
2529 {
2530   register struct binding_level *b;
2531   tree context = 0;
2532   tree c_decl = 0;
2533
2534   b = inner_binding_level;
2535   while (b->tag_transparent
2536          || (globalize && b->parm_flag == 2))
2537     b = b->level_chain;
2538
2539   if (toplevel_bindings_p ())
2540     b->tags = perm_tree_cons (name, type, b->tags);
2541   else
2542     b->tags = saveable_tree_cons (name, type, b->tags);
2543
2544   if (name)
2545     {
2546       context = type ? TYPE_CONTEXT (type) : NULL_TREE;
2547       if (! context)
2548         {
2549           tree cs = current_scope ();
2550
2551           if (! globalize)
2552             context = cs;
2553           else if (cs != NULL_TREE 
2554                    && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2555             /* When declaring a friend class of a local class, we want
2556                to inject the newly named class into the scope
2557                containing the local class, not the namespace scope.  */
2558             context = hack_decl_function_context (get_type_decl (cs));
2559         }
2560       if (context)
2561         c_decl = TREE_CODE (context) == FUNCTION_DECL
2562           ? context : TYPE_MAIN_DECL (context);
2563
2564       if (!context)
2565         context = current_namespace;
2566
2567       /* Do C++ gratuitous typedefing.  */
2568       if (IDENTIFIER_TYPE_VALUE (name) != type)
2569         {
2570           register tree d = NULL_TREE;
2571           int newdecl = 0, in_class = 0;
2572
2573           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2574               || b->parm_flag == 2)
2575             in_class = 1;
2576           else
2577             d = lookup_nested_type (type, c_decl);
2578
2579           if (d == NULL_TREE)
2580             {
2581               newdecl = 1;
2582               d = build_decl (TYPE_DECL, name, type);
2583               if (current_lang_name == lang_name_java)
2584                 TYPE_FOR_JAVA (type) = 1;
2585               SET_DECL_ARTIFICIAL (d);
2586               if (! in_class)
2587                 set_identifier_type_value_with_scope (name, type, b);
2588             }
2589           else
2590             d = TYPE_MAIN_DECL (d);
2591
2592           TYPE_NAME (type) = d;
2593           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2594
2595           d = maybe_process_template_type_declaration (type,
2596                                                        globalize, b);
2597
2598           if (b->parm_flag == 2)
2599             {
2600               pushdecl_class_level (d);
2601               if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
2602                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2603                    class.  But if it's a member template class, we
2604                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2605                    is done later.  */
2606                 finish_member_declaration (d);
2607             }
2608           else
2609             d = pushdecl_with_scope (d, b);
2610
2611           if (newdecl)
2612             {
2613               if (ANON_AGGRNAME_P (name))
2614                 DECL_IGNORED_P (d) = 1;
2615
2616               TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2617               DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2618               if (!uses_template_parms (type))
2619                 DECL_ASSEMBLER_NAME (d)
2620                   = get_identifier (build_overload_name (type, 1, 1));
2621             }
2622         }
2623       if (b->parm_flag == 2)
2624         {
2625           TREE_NONLOCAL_FLAG (type) = 1;
2626           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2627             CLASSTYPE_TAGS (current_class_type) = b->tags;
2628         }
2629     }
2630
2631   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2632     /* Use the canonical TYPE_DECL for this node.  */
2633     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2634   else
2635     {
2636       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2637          will be the tagged type we just added to the current
2638          binding level.  This fake NULL-named TYPE_DECL node helps
2639          dwarfout.c to know when it needs to output a
2640          representation of a tagged type, and it also gives us a
2641          convenient place to record the "scope start" address for
2642          the tagged type.  */
2643
2644       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2645       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2646     }
2647 }
2648
2649 /* Counter used to create anonymous type names.  */
2650
2651 static int anon_cnt = 0;
2652
2653 /* Return an IDENTIFIER which can be used as a name for
2654    anonymous structs and unions.  */
2655
2656 tree
2657 make_anon_name ()
2658 {
2659   char buf[32];
2660
2661   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2662   return get_identifier (buf);
2663 }
2664
2665 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2666    This keeps dbxout from getting confused.  */
2667
2668 void
2669 clear_anon_tags ()
2670 {
2671   register struct binding_level *b;
2672   register tree tags;
2673   static int last_cnt = 0;
2674
2675   /* Fast out if no new anon names were declared.  */
2676   if (last_cnt == anon_cnt)
2677     return;
2678
2679   b = current_binding_level;
2680   while (b->tag_transparent)
2681     b = b->level_chain;
2682   tags = b->tags;
2683   while (tags)
2684     {
2685       /* A NULL purpose means we have already processed all tags
2686          from here to the end of the list.  */
2687       if (TREE_PURPOSE (tags) == NULL_TREE)
2688         break;
2689       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2690         TREE_PURPOSE (tags) = NULL_TREE;
2691       tags = TREE_CHAIN (tags);
2692     }
2693   last_cnt = anon_cnt;
2694 }
2695 \f
2696 /* Subroutine of duplicate_decls: return truthvalue of whether
2697    or not types of these decls match.
2698
2699    For C++, we must compare the parameter list so that `int' can match
2700    `int&' in a parameter position, but `int&' is not confused with
2701    `const int&'.  */
2702
2703 int
2704 decls_match (newdecl, olddecl)
2705      tree newdecl, olddecl;
2706 {
2707   int types_match;
2708
2709   if (newdecl == olddecl)
2710     return 1;
2711
2712   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2713     /* If the two DECLs are not even the same kind of thing, we're not
2714        interested in their types.  */
2715     return 0;
2716
2717   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2718     {
2719       tree f1 = TREE_TYPE (newdecl);
2720       tree f2 = TREE_TYPE (olddecl);
2721       tree p1 = TYPE_ARG_TYPES (f1);
2722       tree p2 = TYPE_ARG_TYPES (f2);
2723
2724       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2725           && ! (DECL_LANGUAGE (newdecl) == lang_c
2726                 && DECL_LANGUAGE (olddecl) == lang_c))
2727         return 0;
2728
2729       /* When we parse a static member function definition,
2730          we put together a FUNCTION_DECL which thinks its type
2731          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2732          proceed.  */
2733       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2734         revert_static_member_fn (&newdecl, &f1, &p1);
2735       else if (TREE_CODE (f2) == METHOD_TYPE
2736                && DECL_STATIC_FUNCTION_P (newdecl))
2737         revert_static_member_fn (&olddecl, &f2, &p2);
2738
2739       /* Here we must take care of the case where new default
2740          parameters are specified.  Also, warn if an old
2741          declaration becomes ambiguous because default
2742          parameters may cause the two to be ambiguous.  */
2743       if (TREE_CODE (f1) != TREE_CODE (f2))
2744         {
2745           if (TREE_CODE (f1) == OFFSET_TYPE)
2746             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2747           else
2748             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2749           return 0;
2750         }
2751
2752       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2753         {
2754           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2755               && p2 == NULL_TREE)
2756             {
2757               types_match = self_promoting_args_p (p1);
2758               if (p1 == void_list_node)
2759                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2760             }
2761           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2762                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2763             {
2764               types_match = self_promoting_args_p (p2);
2765               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2766             }
2767           else
2768             types_match = compparms (p1, p2);
2769         }
2770       else
2771         types_match = 0;
2772     }
2773   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2774     {
2775       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2776                                 DECL_TEMPLATE_PARMS (olddecl)))
2777         return 0;
2778       
2779       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2780         types_match = 1;
2781       else
2782         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2783                                    DECL_TEMPLATE_RESULT (newdecl));
2784     }
2785   else
2786     {
2787       if (TREE_TYPE (newdecl) == error_mark_node)
2788         types_match = TREE_TYPE (olddecl) == error_mark_node;
2789       else if (TREE_TYPE (olddecl) == NULL_TREE)
2790         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2791       else if (TREE_TYPE (newdecl) == NULL_TREE)
2792         types_match = 0;
2793       else
2794         types_match = comptypes (TREE_TYPE (newdecl),
2795                                  TREE_TYPE (olddecl),
2796                                  COMPARE_REDECLARATION);
2797     }
2798
2799   return types_match;
2800 }
2801
2802 /* If NEWDECL is `static' and an `extern' was seen previously,
2803    warn about it.  (OLDDECL may be NULL_TREE; NAME contains
2804    information about previous usage as an `extern'.)
2805
2806    Note that this does not apply to the C++ case of declaring
2807    a variable `extern const' and then later `const'.
2808
2809    Don't complain about built-in functions, since they are beyond
2810    the user's control.  */
2811
2812 static void
2813 warn_extern_redeclared_static (newdecl, olddecl)
2814      tree newdecl, olddecl;
2815 {
2816   tree name;
2817
2818   static char *explicit_extern_static_warning
2819     = "`%D' was declared `extern' and later `static'";
2820   static char *implicit_extern_static_warning
2821     = "`%D' was declared implicitly `extern' and later `static'";
2822
2823   if (TREE_CODE (newdecl) == TYPE_DECL)
2824     return;
2825
2826   name = DECL_ASSEMBLER_NAME (newdecl);
2827   if (TREE_PUBLIC (name) && DECL_THIS_STATIC (newdecl))
2828     {
2829       /* It's okay to redeclare an ANSI built-in function as static,
2830          or to declare a non-ANSI built-in function as anything.  */
2831       if (! (TREE_CODE (newdecl) == FUNCTION_DECL
2832              && olddecl != NULL_TREE
2833              && TREE_CODE (olddecl) == FUNCTION_DECL
2834              && (DECL_BUILT_IN (olddecl)
2835                  || DECL_BUILT_IN_NONANSI (olddecl))))
2836         {
2837           cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2838                       ? implicit_extern_static_warning
2839                       : explicit_extern_static_warning, newdecl);
2840           if (olddecl != NULL_TREE)
2841             cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2842         }
2843     }
2844 }
2845
2846 /* Handle when a new declaration NEWDECL has the same name as an old
2847    one OLDDECL in the same binding contour.  Prints an error message
2848    if appropriate.
2849
2850    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2851    Otherwise, return 0.  */
2852
2853 int
2854 duplicate_decls (newdecl, olddecl)
2855      tree newdecl, olddecl;
2856 {
2857   extern struct obstack permanent_obstack;
2858   unsigned olddecl_uid = DECL_UID (olddecl);
2859   int olddecl_friend = 0, types_match = 0;
2860   int new_defines_function = 0;
2861
2862   if (newdecl == olddecl)
2863     return 1;
2864
2865   types_match = decls_match (newdecl, olddecl);
2866
2867   /* If either the type of the new decl or the type of the old decl is an
2868      error_mark_node, then that implies that we have already issued an
2869      error (earlier) for some bogus type specification, and in that case,
2870      it is rather pointless to harass the user with yet more error message
2871      about the same declaration, so just pretend the types match here.  */
2872   if (TREE_TYPE (newdecl) == error_mark_node
2873       || TREE_TYPE (olddecl) == error_mark_node)
2874     types_match = 1;
2875  
2876   /* Check for redeclaration and other discrepancies. */
2877   if (TREE_CODE (olddecl) == FUNCTION_DECL
2878       && DECL_ARTIFICIAL (olddecl)
2879       && (DECL_BUILT_IN (olddecl) || DECL_BUILT_IN_NONANSI (olddecl)))
2880     {
2881       /* If you declare a built-in or predefined function name as static,
2882          the old definition is overridden, but optionally warn this was a
2883          bad choice of name.  Ditto for overloads.  */
2884       if (! TREE_PUBLIC (newdecl)
2885           || (TREE_CODE (newdecl) == FUNCTION_DECL
2886               && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)))
2887         {
2888           if (warn_shadow)
2889             cp_warning ("shadowing %s function `%#D'",
2890                         DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2891                         olddecl);
2892           /* Discard the old built-in function.  */
2893           return 0;
2894         }
2895       else if (! types_match)
2896         {
2897           if (TREE_CODE (newdecl) != FUNCTION_DECL)
2898             {
2899               /* If the built-in is not ansi, then programs can override
2900                  it even globally without an error.  */
2901               if (! DECL_BUILT_IN (olddecl))
2902                 cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2903                             olddecl, newdecl);
2904               else
2905                 {
2906                   cp_error ("declaration of `%#D'", newdecl);
2907                   cp_error ("conflicts with built-in declaration `%#D'",
2908                             olddecl);
2909                 }
2910               return 0;
2911             }
2912
2913           cp_warning ("declaration of `%#D'", newdecl);
2914           cp_warning ("conflicts with built-in declaration `%#D'",
2915                       olddecl);
2916         }
2917     }
2918   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
2919     {
2920       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
2921            && TREE_CODE (newdecl) != TYPE_DECL
2922            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
2923                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
2924           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
2925               && TREE_CODE (olddecl) != TYPE_DECL
2926               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
2927                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2928                         == TYPE_DECL))))
2929         {
2930           /* We do nothing special here, because C++ does such nasty
2931              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
2932              get shadowed, and know that if we need to find a TYPE_DECL
2933              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
2934              slot of the identifier.  */
2935           return 0;
2936         }
2937
2938       if ((TREE_CODE (newdecl) == FUNCTION_DECL
2939            && DECL_FUNCTION_TEMPLATE_P (olddecl))
2940           || (TREE_CODE (olddecl) == FUNCTION_DECL
2941               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
2942         return 0;
2943
2944       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
2945       if (TREE_CODE (olddecl) == TREE_LIST)
2946         olddecl = TREE_VALUE (olddecl);
2947       cp_error_at ("previous declaration of `%#D'", olddecl);
2948
2949       /* New decl is completely inconsistent with the old one =>
2950          tell caller to replace the old one.  */
2951
2952       return 0;
2953     }
2954   else if (!types_match)
2955     {
2956       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
2957         /* These are certainly not duplicate declarations; they're
2958            from different scopes.  */
2959         return 0;
2960
2961       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2962         {
2963           /* The name of a class template may not be declared to refer to
2964              any other template, class, function, object, namespace, value,
2965              or type in the same scope.  */
2966           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
2967               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2968             {
2969               cp_error ("declaration of template `%#D'", newdecl);
2970               cp_error_at ("conflicts with previous declaration `%#D'",
2971                            olddecl);
2972             }
2973           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
2974                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
2975                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
2976                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
2977                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2978                                            DECL_TEMPLATE_PARMS (olddecl)))
2979             {
2980               cp_error ("new declaration `%#D'", newdecl);
2981               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2982             }
2983           return 0;
2984         }
2985       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2986         {
2987           if (DECL_LANGUAGE (newdecl) == lang_c
2988               && DECL_LANGUAGE (olddecl) == lang_c)
2989             {
2990               cp_error ("declaration of C function `%#D' conflicts with",
2991                         newdecl);
2992               cp_error_at ("previous declaration `%#D' here", olddecl);
2993             }
2994           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2995                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2996             {
2997               cp_error ("new declaration `%#D'", newdecl);
2998               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
2999             }
3000           else
3001             return 0;
3002         }
3003
3004       /* Already complained about this, so don't do so again.  */
3005       else if (current_class_type == NULL_TREE
3006           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3007         {
3008           cp_error ("conflicting types for `%#D'", newdecl);
3009           cp_error_at ("previous declaration as `%#D'", olddecl);
3010         }
3011     }
3012   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3013             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3014                  && (!DECL_TEMPLATE_INFO (newdecl)
3015                      || (DECL_TI_TEMPLATE (newdecl) 
3016                          != DECL_TI_TEMPLATE (olddecl))))
3017                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3018                     && (!DECL_TEMPLATE_INFO (olddecl)
3019                         || (DECL_TI_TEMPLATE (olddecl) 
3020                             != DECL_TI_TEMPLATE (newdecl))))))
3021     /* It's OK to have a template specialization and a non-template
3022        with the same type, or to have specializations of two
3023        different templates with the same type.  Note that if one is a
3024        specialization, and the other is an instantiation of the same
3025        template, that we do not exit at this point.  That situation
3026        can occur if we instantiate a template class, and then
3027        specialize one of its methods.  This situation is legal, but
3028        the declarations must be merged in the usual way.  */
3029     return 0;
3030   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3031            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3032                 && !DECL_USE_TEMPLATE (newdecl))
3033                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3034                    && !DECL_USE_TEMPLATE (olddecl))))
3035     /* One of the declarations is a template instantiation, and the
3036        other is not a template at all.  That's OK.  */
3037     return 0;
3038   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3039            && DECL_NAMESPACE_ALIAS (newdecl)
3040            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3041     /* Redeclaration of namespace alias, ignore it. */
3042     return 1;
3043   else
3044     {
3045       char *errmsg = redeclaration_error_message (newdecl, olddecl);
3046       if (errmsg)
3047         {
3048           cp_error (errmsg, newdecl);
3049           if (DECL_NAME (olddecl) != NULL_TREE)
3050             cp_error_at ((DECL_INITIAL (olddecl)
3051                           && namespace_bindings_p ())
3052                          ? "`%#D' previously defined here"
3053                          : "`%#D' previously declared here", olddecl);
3054         }
3055       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3056                && DECL_INITIAL (olddecl) != NULL_TREE
3057                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3058                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3059         {
3060           /* Prototype decl follows defn w/o prototype.  */
3061           cp_warning_at ("prototype for `%#D'", newdecl);
3062           cp_warning_at ("follows non-prototype definition here", olddecl);
3063         }
3064       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3065                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3066         {
3067           /* extern "C" int foo ();
3068              int foo () { bar (); }
3069              is OK.  */
3070           if (current_lang_stack == current_lang_base)
3071             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3072           else
3073             {
3074               cp_error_at ("previous declaration of `%#D' with %L linkage",
3075                            olddecl, DECL_LANGUAGE (olddecl));
3076               cp_error ("conflicts with new declaration with %L linkage",
3077                         DECL_LANGUAGE (newdecl));
3078             }
3079         }
3080
3081       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3082         ;
3083       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3084         {
3085           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3086           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3087           int i = 1;
3088
3089           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3090             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3091         
3092           for (; t1 && t1 != void_list_node;
3093                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3094             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3095               {
3096                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3097                                            TREE_PURPOSE (t2)))
3098                   {
3099                     if (pedantic)
3100                       {
3101                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3102                                     i, newdecl);
3103                         cp_pedwarn_at ("after previous specification in `%#D'",
3104                                        olddecl);
3105                       }
3106                   }
3107                 else
3108                   {
3109                     cp_error ("default argument given for parameter %d of `%#D'",
3110                               i, newdecl);
3111                     cp_error_at ("after previous specification in `%#D'",
3112                                  olddecl);
3113                   }
3114               }
3115
3116           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3117               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3118             {
3119               cp_warning ("`%#D' was used before it was declared inline",
3120                           newdecl);
3121               cp_warning_at ("previous non-inline declaration here",
3122                              olddecl);
3123             }
3124         }
3125     }
3126
3127   /* If new decl is `static' and an `extern' was seen previously,
3128      warn about it.  */
3129   warn_extern_redeclared_static (newdecl, olddecl);
3130
3131   /* We have committed to returning 1 at this point.  */
3132   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3133     {
3134       /* Now that functions must hold information normally held
3135          by field decls, there is extra work to do so that
3136          declaration information does not get destroyed during
3137          definition.  */
3138       if (DECL_VINDEX (olddecl))
3139         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3140       if (DECL_CONTEXT (olddecl))
3141         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3142       if (DECL_CLASS_CONTEXT (olddecl))
3143         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3144       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3145         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3146       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3147       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3148       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3149       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3150       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3151       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3152       
3153       /* Optionally warn about more than one declaration for the same
3154          name, but don't warn about a function declaration followed by a
3155          definition.  */
3156       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3157           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3158           /* Don't warn about extern decl followed by definition. */
3159           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3160           /* Don't warn about friends, let add_friend take care of it. */
3161           && ! DECL_FRIEND_P (newdecl))
3162         {
3163           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3164           cp_warning_at ("previous declaration of `%D'", olddecl);
3165         }
3166     }
3167
3168   /* Deal with C++: must preserve virtual function table size.  */
3169   if (TREE_CODE (olddecl) == TYPE_DECL)
3170     {
3171       register tree newtype = TREE_TYPE (newdecl);
3172       register tree oldtype = TREE_TYPE (olddecl);
3173
3174       if (newtype != error_mark_node && oldtype != error_mark_node
3175           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3176         {
3177           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3178           CLASSTYPE_FRIEND_CLASSES (newtype)
3179             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3180         }
3181     }
3182
3183   /* Copy all the DECL_... slots specified in the new decl
3184      except for any that we copy here from the old type.  */
3185   DECL_MACHINE_ATTRIBUTES (newdecl) 
3186     = merge_machine_decl_attributes (olddecl, newdecl);
3187
3188   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3189     {
3190       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3191                              DECL_TEMPLATE_RESULT (olddecl)))
3192         cp_error ("invalid redeclaration of %D", newdecl);
3193       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3194       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3195         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3196                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3197  
3198       return 1;
3199     }
3200     
3201   if (types_match)
3202     {
3203       /* Automatically handles default parameters.  */
3204       tree oldtype = TREE_TYPE (olddecl);
3205       tree newtype;
3206
3207       /* Make sure we put the new type in the same obstack as the old one.  */
3208       if (oldtype)
3209         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3210       else
3211         {
3212           push_obstacks_nochange ();
3213           end_temporary_allocation ();
3214         }
3215
3216       /* Merge the data types specified in the two decls.  */
3217       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3218
3219       if (TREE_CODE (newdecl) == VAR_DECL)
3220         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3221       /* Do this after calling `common_type' so that default
3222          parameters don't confuse us.  */
3223       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3224           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3225               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3226         {
3227           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3228                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3229           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3230                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3231
3232           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3233               && DECL_SOURCE_LINE (olddecl) != 0
3234               && flag_exceptions
3235               && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3236             {
3237               cp_pedwarn ("declaration of `%D' throws different exceptions",
3238                         newdecl);
3239               cp_pedwarn_at ("previous declaration here", olddecl);
3240             }
3241         }
3242       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3243
3244       /* Lay the type out, unless already done.  */
3245       if (! same_type_p (newtype, oldtype)
3246           && TREE_TYPE (newdecl) != error_mark_node
3247           && !(processing_template_decl && uses_template_parms (newdecl)))
3248         layout_type (TREE_TYPE (newdecl));
3249
3250       if ((TREE_CODE (newdecl) == VAR_DECL
3251            || TREE_CODE (newdecl) == PARM_DECL
3252            || TREE_CODE (newdecl) == RESULT_DECL
3253            || TREE_CODE (newdecl) == FIELD_DECL
3254            || TREE_CODE (newdecl) == TYPE_DECL)
3255           && !(processing_template_decl && uses_template_parms (newdecl)))
3256         layout_decl (newdecl, 0);
3257
3258       /* Merge the type qualifiers.  */
3259       if (TREE_READONLY (newdecl))
3260         TREE_READONLY (olddecl) = 1;
3261       if (TREE_THIS_VOLATILE (newdecl))
3262         TREE_THIS_VOLATILE (olddecl) = 1;
3263
3264       /* Merge the initialization information.  */
3265       if (DECL_INITIAL (newdecl) == NULL_TREE
3266           && DECL_INITIAL (olddecl) != NULL_TREE)
3267         {
3268           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3269           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3270           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3271           if (DECL_LANG_SPECIFIC (newdecl)
3272               && DECL_LANG_SPECIFIC (olddecl))
3273             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3274         }
3275
3276       /* Merge the section attribute.
3277          We want to issue an error if the sections conflict but that must be
3278          done later in decl_attributes since we are called before attributes
3279          are assigned.  */
3280       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3281         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3282
3283       /* Keep the old rtl since we can safely use it, unless it's the
3284          call to abort() used for abstract virtuals.  */
3285       if ((DECL_LANG_SPECIFIC (olddecl)
3286            && !DECL_ABSTRACT_VIRTUAL_P (olddecl))
3287           || DECL_RTL (olddecl) != DECL_RTL (abort_fndecl))
3288         DECL_RTL (newdecl) = DECL_RTL (olddecl);
3289
3290       pop_obstacks ();
3291     }
3292   /* If cannot merge, then use the new type and qualifiers,
3293      and don't preserve the old rtl.  */
3294   else
3295     {
3296       /* Clean out any memory we had of the old declaration.  */
3297       tree oldstatic = value_member (olddecl, static_aggregates);
3298       if (oldstatic)
3299         TREE_VALUE (oldstatic) = error_mark_node;
3300
3301       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3302       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3303       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3304       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3305     }
3306
3307   /* Merge the storage class information.  */
3308   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3309   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3310   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3311   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3312   if (! DECL_EXTERNAL (olddecl))
3313     DECL_EXTERNAL (newdecl) = 0;
3314   
3315   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3316     {
3317       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3318       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3319       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3320       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3321         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3322       /* Don't really know how much of the language-specific
3323          values we should copy from old to new.  */
3324       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3325       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3326       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3327       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3328       olddecl_friend = DECL_FRIEND_P (olddecl);
3329     }
3330
3331   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3332     {
3333       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3334           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3335         {
3336           /* If newdecl is not a specialization, then it is not a
3337              template-related function at all.  And that means that we
3338              shoud have exited above, returning 0.  */
3339           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3340                               0);
3341
3342           if (TREE_USED (olddecl)) 
3343             /* From [temp.expl.spec]:
3344                
3345                If a template, a member template or the member of a class
3346                template is explicitly specialized then that
3347                specialization shall be declared before the first use of
3348                that specialization that would cause an implicit
3349                instantiation to take place, in every translation unit in
3350                which such a use occurs.  */
3351             cp_error ("explicit specialization of %D after first use", 
3352                       olddecl);
3353
3354           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3355         }
3356       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3357
3358       /* If either decl says `inline', this fn is inline, unless its
3359          definition was passed already.  */
3360       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3361         DECL_INLINE (olddecl) = 1;
3362       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3363
3364       if (! types_match)
3365         {
3366           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3367           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3368           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3369         }
3370       if (! types_match || new_defines_function)
3371         {
3372           /* These need to be copied so that the names are available.  */
3373           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3374           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3375         }
3376       if (new_defines_function)
3377         /* If defining a function declared with other language
3378            linkage, use the previously declared language linkage.  */
3379         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3380       else
3381         {
3382           /* If redeclaring a builtin function, and not a definition,
3383              it stays built in.  */
3384           if (DECL_BUILT_IN (olddecl))
3385             {
3386               DECL_BUILT_IN (newdecl) = 1;
3387               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3388               /* If we're keeping the built-in definition, keep the rtl,
3389                  regardless of declaration matches.  */
3390               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3391             }
3392           else
3393             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3394
3395           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3396           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3397             /* Previously saved insns go together with
3398                the function's previous definition.  */
3399             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3400           /* Don't clear out the arguments if we're redefining a function.  */
3401           if (DECL_ARGUMENTS (olddecl))
3402             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3403         }
3404       if (DECL_LANG_SPECIFIC (olddecl))
3405         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3406     }
3407
3408   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3409     {
3410       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3411     }
3412
3413   /* Now preserve various other info from the definition.  */
3414   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3415   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3416   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3417   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3418
3419   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3420     {
3421       int function_size;
3422       struct lang_decl *ol = DECL_LANG_SPECIFIC (olddecl);
3423       struct lang_decl *nl = DECL_LANG_SPECIFIC (newdecl);
3424
3425       function_size = sizeof (struct tree_decl);
3426
3427       bcopy ((char *) newdecl + sizeof (struct tree_common),
3428              (char *) olddecl + sizeof (struct tree_common),
3429              function_size - sizeof (struct tree_common));
3430
3431       /* Can we safely free the storage used by newdecl?  */
3432
3433 #define ROUND(x) ((x + obstack_alignment_mask (&permanent_obstack)) \
3434                   & ~ obstack_alignment_mask (&permanent_obstack))
3435
3436       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3437         {
3438           /* If newdecl is a template instantiation, it is possible that
3439              the following sequence of events has occurred:
3440
3441              o A friend function was declared in a class template.  The
3442              class template was instantiated.  
3443
3444              o The instantiation of the friend declaration was 
3445              recorded on the instantiation list, and is newdecl.  
3446
3447              o Later, however, instantiate_class_template called pushdecl
3448              on the newdecl to perform name injection.  But, pushdecl in
3449              turn called duplicate_decls when it discovered that another
3450              declaration of a global function with the same name already
3451              existed. 
3452
3453              o Here, in duplicate_decls, we decided to clobber newdecl.
3454
3455              If we're going to do that, we'd better make sure that
3456              olddecl, and not newdecl, is on the list of
3457              instantiations so that if we try to do the instantiation
3458              again we won't get the clobbered declaration.  */
3459
3460           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3461           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3462
3463           for (; decls; decls = TREE_CHAIN (decls))
3464             if (TREE_VALUE (decls) == newdecl)
3465               TREE_VALUE (decls) = olddecl;
3466         }
3467
3468       if (((char *)newdecl + ROUND (function_size) == (char *)nl
3469            && ((char *)newdecl + ROUND (function_size)
3470                + ROUND (sizeof (struct lang_decl))
3471                == obstack_next_free (&permanent_obstack)))
3472           || ((char *)newdecl + ROUND (function_size)
3473               == obstack_next_free (&permanent_obstack)))
3474         {
3475           DECL_MAIN_VARIANT (newdecl) = olddecl;
3476           DECL_LANG_SPECIFIC (olddecl) = ol;
3477           bcopy ((char *)nl, (char *)ol, sizeof (struct lang_decl));
3478
3479           obstack_free (&permanent_obstack, newdecl);
3480         }
3481       else if (LANG_DECL_PERMANENT (ol) && ol != nl)
3482         {
3483           if (DECL_MAIN_VARIANT (olddecl) == olddecl)
3484             {
3485               /* Save these lang_decls that would otherwise be lost.  */
3486               extern tree free_lang_decl_chain;
3487               tree free_lang_decl = (tree) ol;
3488
3489               if (DECL_LANG_SPECIFIC (olddecl) == ol)
3490                 abort ();
3491
3492               TREE_CHAIN (free_lang_decl) = free_lang_decl_chain;
3493               free_lang_decl_chain = free_lang_decl;
3494             }
3495           else
3496             {
3497               /* Storage leak.  */;
3498             }
3499         }
3500     }
3501   else
3502     {
3503       bcopy ((char *) newdecl + sizeof (struct tree_common),
3504              (char *) olddecl + sizeof (struct tree_common),
3505              sizeof (struct tree_decl) - sizeof (struct tree_common)
3506              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3507     }
3508
3509   DECL_UID (olddecl) = olddecl_uid;
3510   if (olddecl_friend)
3511     DECL_FRIEND_P (olddecl) = 1;
3512
3513   /* NEWDECL contains the merged attribute lists.
3514      Update OLDDECL to be the same.  */
3515   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3516
3517   return 1;
3518 }
3519
3520 /* Record a decl-node X as belonging to the current lexical scope.
3521    Check for errors (such as an incompatible declaration for the same
3522    name already seen in the same scope).
3523
3524    Returns either X or an old decl for the same name.
3525    If an old decl is returned, it may have been smashed
3526    to agree with what X says.  */
3527
3528 tree
3529 pushdecl (x)
3530      tree x;
3531 {
3532   register tree t;
3533   register tree name = DECL_ASSEMBLER_NAME (x);
3534   int need_new_binding = 1;
3535
3536   if (DECL_TEMPLATE_PARM_P (x))
3537     /* Template parameters have no context; they are not X::T even
3538        when declared within a class or namespace.  */
3539     ;
3540   else
3541     {
3542       if (current_function_decl && x != current_function_decl
3543           /* A local declaration for a function doesn't constitute
3544              nesting.  */
3545           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3546           /* Don't change DECL_CONTEXT of virtual methods.  */
3547           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3548           && !DECL_CONTEXT (x))
3549         DECL_CONTEXT (x) = current_function_decl;
3550       if (!DECL_CONTEXT (x))
3551         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3552     }
3553
3554   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3555      compiler wants to use.  */
3556   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3557       || TREE_CODE (x) == NAMESPACE_DECL)
3558     name = DECL_NAME (x);
3559
3560   if (name)
3561     {
3562 #if 0
3563       /* Not needed...see below.  */
3564       char *file;
3565       int line;
3566 #endif
3567       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3568         name = TREE_OPERAND (name, 0);
3569       
3570       /* Namespace-scoped variables are not found in the current level. */
3571       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3572         t = namespace_binding (name, DECL_CONTEXT (x));
3573       else
3574         t = lookup_name_current_level (name);
3575       if (t == error_mark_node)
3576         {
3577           /* error_mark_node is 0 for a while during initialization!  */
3578           t = NULL_TREE;
3579           cp_error_at ("`%#D' used prior to declaration", x);
3580         }
3581
3582       else if (t != NULL_TREE)
3583         {
3584 #if 0
3585           /* This is turned off until I have time to do it right (bpk).  */
3586           /* With the code below that uses it...  */
3587           file = DECL_SOURCE_FILE (t);
3588           line = DECL_SOURCE_LINE (t);
3589 #endif
3590           if (TREE_CODE (t) == PARM_DECL)
3591             {
3592               if (DECL_CONTEXT (t) == NULL_TREE)
3593                 fatal ("parse errors have confused me too much");
3594
3595               /* Check for duplicate params.  */
3596               if (duplicate_decls (x, t))
3597                 return t;
3598             }
3599           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3600                     || DECL_FUNCTION_TEMPLATE_P (x))
3601                    && is_overloaded_fn (t))
3602             /* Don't do anything just yet. */;
3603           else if (t == wchar_decl_node)
3604             {
3605               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3606                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3607
3608               /* Throw away the redeclaration.  */
3609               return t;
3610             }
3611           else if (TREE_CODE (t) != TREE_CODE (x))
3612             {
3613               if (duplicate_decls (x, t))
3614                 return t;
3615             }
3616           else if (duplicate_decls (x, t))
3617             {
3618 #if 0
3619               /* This is turned off until I have time to do it right (bpk).  */
3620
3621               /* Also warn if they did a prototype with `static' on it, but
3622                  then later left the `static' off.  */
3623               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3624                 {
3625                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3626                     return t;
3627
3628                   if (extra_warnings)
3629                     {
3630                       cp_warning ("`static' missing from declaration of `%D'",
3631                                   t);
3632                       warning_with_file_and_line (file, line,
3633                                                   "previous declaration of `%s'",
3634                                                   decl_as_string (t, 0));
3635                     }
3636
3637                   /* Now fix things so it'll do what they expect.  */
3638                   if (current_function_decl)
3639                     TREE_PUBLIC (current_function_decl) = 0;
3640                 }
3641               /* Due to interference in memory reclamation (X may be
3642                  obstack-deallocated at this point), we must guard against
3643                  one really special case.  [jason: This should be handled
3644                  by start_function]  */
3645               if (current_function_decl == x)
3646                 current_function_decl = t;
3647 #endif
3648               if (TREE_CODE (t) == TYPE_DECL)
3649                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3650               else if (TREE_CODE (t) == FUNCTION_DECL)
3651                 check_default_args (t);
3652
3653               return t;
3654             }
3655           else if (DECL_MAIN_P (x))
3656             {
3657               /* A redeclaration of main, but not a duplicate of the
3658                  previous one. 
3659
3660                  [basic.start.main]
3661
3662                  This function shall not be overloaded.  */
3663               cp_error_at ("invalid redeclaration of `%D'", t);
3664               cp_error ("as `%D'", x);
3665               /* We don't try to push this declaration since that
3666                  causes a crash.  */
3667               return x;
3668             }
3669         }
3670
3671       check_template_shadow (x);
3672
3673       /* If this is a function conjured up by the backend, massage it
3674          so it looks friendly.  */
3675       if (TREE_CODE (x) == FUNCTION_DECL
3676           && ! DECL_LANG_SPECIFIC (x))
3677         {
3678           retrofit_lang_decl (x);
3679           DECL_LANGUAGE (x) = lang_c;
3680         }
3681
3682       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3683         {
3684           t = push_overloaded_decl (x, PUSH_LOCAL);
3685           if (t != x || DECL_LANGUAGE (x) == lang_c)
3686             return t;
3687           if (!namespace_bindings_p ())
3688             /* We do not need to create a binding for this name;
3689                push_overloaded_decl will have already done so if
3690                necessary.  */
3691             need_new_binding = 0;
3692         }
3693       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3694         return push_overloaded_decl (x, PUSH_GLOBAL);
3695
3696       /* If declaring a type as a typedef, copy the type (unless we're
3697          at line 0), and install this TYPE_DECL as the new type's typedef
3698          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3699       if (TREE_CODE (x) == TYPE_DECL)
3700         {
3701           tree type = TREE_TYPE (x);
3702           if (DECL_SOURCE_LINE (x) == 0)
3703             {
3704               if (TYPE_NAME (type) == 0)
3705                 TYPE_NAME (type) = x;
3706             }
3707           else if (type != error_mark_node && TYPE_NAME (type) != x
3708                    /* We don't want to copy the type when all we're
3709                       doing is making a TYPE_DECL for the purposes of
3710                       inlining.  */
3711                    && (!TYPE_NAME (type) 
3712                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3713             {
3714               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3715
3716               DECL_ORIGINAL_TYPE (x) = type;
3717               type = build_type_copy (type);
3718               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3719               TYPE_NAME (type) = x;
3720               TREE_TYPE (x) = type;
3721
3722               pop_obstacks ();
3723             }
3724
3725           if (type != error_mark_node
3726               && TYPE_NAME (type)
3727               && TYPE_IDENTIFIER (type))
3728             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3729                                                   current_binding_level);
3730
3731         }
3732
3733       /* Multiple external decls of the same identifier ought to match.
3734
3735          We get warnings about inline functions where they are defined.
3736          We get warnings about other functions from push_overloaded_decl.
3737          
3738          Avoid duplicate warnings where they are used.  */
3739       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3740         {
3741           tree decl;
3742
3743           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3744               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3745                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3746             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3747           else
3748             decl = NULL_TREE;
3749
3750           if (decl
3751               /* If different sort of thing, we already gave an error.  */
3752               && TREE_CODE (decl) == TREE_CODE (x)
3753               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3754             {
3755               cp_pedwarn ("type mismatch with previous external decl", x);
3756               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3757             }
3758         }
3759
3760       /* This name is new in its binding level.
3761          Install the new declaration and return it.  */
3762       if (namespace_bindings_p ())
3763         {
3764           /* Install a global value.  */
3765
3766           /* If the first global decl has external linkage,
3767              warn if we later see static one.  */
3768           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3769             TREE_PUBLIC (name) = 1;
3770
3771           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3772                 && t != NULL_TREE))
3773             {
3774               if (TREE_CODE (x) == FUNCTION_DECL)
3775                 my_friendly_assert 
3776                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3777                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3778               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3779             }
3780
3781           /* Don't forget if the function was used via an implicit decl.  */
3782           if (IDENTIFIER_IMPLICIT_DECL (name)
3783               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3784             TREE_USED (x) = 1;
3785
3786           /* Don't forget if its address was taken in that way.  */
3787           if (IDENTIFIER_IMPLICIT_DECL (name)
3788               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3789             TREE_ADDRESSABLE (x) = 1;
3790
3791           /* Warn about mismatches against previous implicit decl.  */
3792           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3793               /* If this real decl matches the implicit, don't complain.  */
3794               && ! (TREE_CODE (x) == FUNCTION_DECL
3795                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3796             cp_warning
3797               ("`%D' was previously implicitly declared to return `int'", x);
3798
3799           /* If new decl is `static' and an `extern' was seen previously,
3800              warn about it.  */
3801           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3802             warn_extern_redeclared_static (x, t);
3803         }
3804       else
3805         {
3806           /* Here to install a non-global value.  */
3807           tree oldlocal = IDENTIFIER_VALUE (name);
3808           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3809
3810           if (need_new_binding)
3811             {
3812               push_local_binding (name, x, 0);
3813               /* Because push_local_binding will hook X on to the
3814                  current_binding_level's name list, we don't want to
3815                  do that again below.  */
3816               need_new_binding = 0;
3817             }
3818
3819           /* If this is a TYPE_DECL, push it into the type value slot.  */
3820           if (TREE_CODE (x) == TYPE_DECL)
3821             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3822                                                   current_binding_level);
3823
3824           /* Clear out any TYPE_DECL shadowed by a namespace so that
3825              we won't think this is a type.  The C struct hack doesn't
3826              go through namespaces.  */
3827           if (TREE_CODE (x) == NAMESPACE_DECL)
3828             set_identifier_type_value_with_scope (name, NULL_TREE, 
3829                                                   current_binding_level);
3830
3831           /* If this is an extern function declaration, see if we
3832              have a global definition or declaration for the function.  */
3833           if (oldlocal == NULL_TREE
3834               && DECL_EXTERNAL (x)
3835               && oldglobal != NULL_TREE
3836               && TREE_CODE (x) == FUNCTION_DECL
3837               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3838             {
3839               /* We have one.  Their types must agree.  */
3840               if (decls_match (x, oldglobal))
3841                 /* OK */;
3842               else
3843                 {
3844                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3845                   cp_warning_at ("global declaration `%#D'", oldglobal);
3846                 }
3847             }
3848           /* If we have a local external declaration,
3849              and no file-scope declaration has yet been seen,
3850              then if we later have a file-scope decl it must not be static.  */
3851           if (oldlocal == NULL_TREE
3852               && oldglobal == NULL_TREE
3853               && DECL_EXTERNAL (x)
3854               && TREE_PUBLIC (x))
3855             TREE_PUBLIC (name) = 1;
3856
3857           if (DECL_FROM_INLINE (x))
3858             /* Inline decls shadow nothing.  */;
3859
3860           /* Warn if shadowing an argument at the top level of the body.  */
3861           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3862               && TREE_CODE (oldlocal) == PARM_DECL
3863               && TREE_CODE (x) != PARM_DECL)
3864             {
3865               /* Go to where the parms should be and see if we
3866                  find them there.  */
3867               struct binding_level *b = current_binding_level->level_chain;
3868
3869               if (cleanup_label)
3870                 b = b->level_chain;
3871
3872               /* ARM $8.3 */
3873               if (b->parm_flag == 1)
3874                 cp_error ("declaration of `%#D' shadows a parameter", name);
3875             }
3876           else if (warn_shadow && oldlocal != NULL_TREE
3877                    && current_binding_level->is_for_scope
3878                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3879             {
3880               warning ("variable `%s' shadows local",
3881                        IDENTIFIER_POINTER (name));
3882               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3883             }              
3884           /* Maybe warn if shadowing something else.  */
3885           else if (warn_shadow && !DECL_EXTERNAL (x)
3886                    /* No shadow warnings for internally generated vars.  */
3887                    && ! DECL_ARTIFICIAL (x)
3888                    /* No shadow warnings for vars made for inlining.  */
3889                    && ! DECL_FROM_INLINE (x))
3890             {
3891               char *warnstring = NULL;
3892
3893               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3894                 warnstring = "declaration of `%s' shadows a parameter";
3895               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3896                        && current_class_ptr
3897                        && !TREE_STATIC (name))
3898                 warnstring = "declaration of `%s' shadows a member of `this'";
3899               else if (oldlocal != NULL_TREE)
3900                 warnstring = "declaration of `%s' shadows previous local";
3901               else if (oldglobal != NULL_TREE)
3902                 /* XXX shadow warnings in outer-more namespaces */
3903                 warnstring = "declaration of `%s' shadows global declaration";
3904
3905               if (warnstring)
3906                 warning (warnstring, IDENTIFIER_POINTER (name));
3907             }
3908         }
3909
3910       if (TREE_CODE (x) == FUNCTION_DECL)
3911         check_default_args (x);
3912
3913       /* Keep count of variables in this level with incomplete type.  */
3914       if (TREE_CODE (x) == VAR_DECL
3915           && TREE_TYPE (x) != error_mark_node
3916           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3917                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
3918               /* RTTI TD entries are created while defining the type_info.  */
3919               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
3920                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
3921         current_binding_level->incomplete 
3922           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
3923     }
3924
3925   if (need_new_binding)
3926     {
3927       /* Put decls on list in reverse order.
3928          We will reverse them later if necessary.  */
3929       TREE_CHAIN (x) = current_binding_level->names;
3930       current_binding_level->names = x;
3931       if (! (current_binding_level != global_binding_level 
3932              || TREE_PERMANENT (x)))
3933         my_friendly_abort (124);
3934     }
3935
3936   return x;
3937 }
3938
3939 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
3940    caller to set DECL_CONTEXT properly.  */
3941
3942 static tree
3943 pushdecl_with_scope (x, level)
3944      tree x;
3945      struct binding_level *level;
3946 {
3947   register struct binding_level *b;
3948   tree function_decl = current_function_decl;
3949
3950   current_function_decl = NULL_TREE;
3951   if (level->parm_flag == 2)
3952     {
3953       b = class_binding_level;
3954       class_binding_level = level;
3955       pushdecl_class_level (x);
3956       class_binding_level = b;
3957     }
3958   else
3959     {
3960       b = current_binding_level;
3961       current_binding_level = level;
3962       x = pushdecl (x);
3963       current_binding_level = b;
3964     }
3965   current_function_decl = function_decl;
3966   return x;
3967 }
3968
3969 /* Like pushdecl, only it places X in the current namespace,
3970    if appropriate.  */
3971
3972 tree
3973 pushdecl_namespace_level (x)
3974      tree x;
3975 {
3976   register struct binding_level *b = inner_binding_level;
3977   register tree t;
3978
3979   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
3980
3981   /* Now, the type_shadowed stack may screw us.  Munge it so it does
3982      what we want.  */
3983   if (TREE_CODE (x) == TYPE_DECL)
3984     {
3985       tree name = DECL_NAME (x);
3986       tree newval;
3987       tree *ptr = (tree *)0;
3988       for (; b != global_binding_level; b = b->level_chain)
3989         {
3990           tree shadowed = b->type_shadowed;
3991           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
3992             if (TREE_PURPOSE (shadowed) == name)
3993               {
3994                 ptr = &TREE_VALUE (shadowed);
3995                 /* Can't break out of the loop here because sometimes
3996                    a binding level will have duplicate bindings for
3997                    PT names.  It's gross, but I haven't time to fix it.  */
3998               }
3999         }
4000       newval = TREE_TYPE (x);
4001       if (ptr == (tree *)0)
4002         {
4003           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4004              up here if this is changed to an assertion.  --KR  */
4005           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4006         }
4007       else
4008         {
4009           *ptr = newval;
4010         }
4011     }
4012   return t;
4013 }
4014
4015 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4016    if appropriate.  */
4017
4018 tree
4019 pushdecl_top_level (x)
4020      tree x;
4021 {
4022   tree cur_namespace = current_namespace;
4023   current_namespace = global_namespace;
4024   x = pushdecl_namespace_level (x);
4025   current_namespace = cur_namespace;
4026   return x;
4027 }
4028
4029 /* Make the declaration of X appear in CLASS scope.  */
4030
4031 void
4032 pushdecl_class_level (x)
4033      tree x;
4034 {
4035   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4036      scope looks for the pre-mangled name.  */
4037   register tree name = DECL_NAME (x);
4038
4039   if (name)
4040     {
4041       if (TYPE_BEING_DEFINED (current_class_type))
4042         {
4043           /* A name N used in a class S shall refer to the same declaration
4044              in its context and when re-evaluated in the completed scope of S.
4045              Types, enums, and static vars are checked here; other
4046              members are checked in finish_struct.  */
4047           tree icv = IDENTIFIER_CLASS_VALUE (name);
4048
4049           /* This should match check_member_decl_is_same_in_complete_scope.  */
4050           if (icv && icv != x
4051               && flag_optional_diags
4052               /* Don't complain about inherited names.  */
4053               && id_in_current_class (name)
4054               /* Or shadowed tags.  */
4055               && !(DECL_DECLARES_TYPE_P (icv)
4056                    && DECL_CONTEXT (icv) == current_class_type))
4057             {
4058               cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
4059               cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
4060                              icv);
4061             }
4062
4063           check_template_shadow (x);
4064         }
4065
4066       push_class_level_binding (name, x);
4067       if (TREE_CODE (x) == TYPE_DECL)
4068         set_identifier_type_value (name, TREE_TYPE (x));
4069     }
4070 }
4071
4072 #if 0
4073 /* This function is used to push the mangled decls for nested types into
4074    the appropriate scope.  Previously pushdecl_top_level was used, but that
4075    is incorrect for members of local classes.  */
4076
4077 void
4078 pushdecl_nonclass_level (x)
4079      tree x;
4080 {
4081   struct binding_level *b = current_binding_level;
4082
4083   my_friendly_assert (b->parm_flag != 2, 180);
4084
4085 #if 0
4086   /* Get out of template binding levels */
4087   while (b->pseudo_global)
4088     b = b->level_chain;
4089 #endif
4090
4091   pushdecl_with_scope (x, b);
4092 }
4093 #endif
4094
4095 /* Make the declaration(s) of X appear in CLASS scope
4096    under the name NAME.  */
4097
4098 void
4099 push_class_level_binding (name, x)
4100      tree name;
4101      tree x;
4102 {
4103   /* The class_binding_level will be NULL if x is a template 
4104      parameter name in a member template.  */
4105   if (!class_binding_level)
4106     return;
4107
4108   /* If this declaration shadows a declaration from an enclosing
4109      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4110      we leave this class.  Record the shadowed declaration here.  */
4111   maybe_push_cache_obstack ();
4112   class_binding_level->class_shadowed
4113     = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4114                  class_binding_level->class_shadowed);
4115   TREE_TYPE (class_binding_level->class_shadowed)
4116     = x;
4117   pop_obstacks ();
4118
4119   /* Put the binding on the stack of bindings for the identifier, and
4120      update IDENTIFIER_CLASS_VALUE.  */
4121   push_class_binding (name, x);
4122
4123   obstack_ptr_grow (&decl_obstack, x);
4124 }
4125
4126 /* Insert another USING_DECL into the current binding level,
4127    returning this declaration. If this is a redeclaration,
4128    do nothing and return NULL_TREE.  */
4129
4130 tree
4131 push_using_decl (scope, name)
4132      tree scope;
4133      tree name;
4134 {
4135   tree decl;
4136   
4137   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4138   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4139   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4140     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4141       break;
4142   if (decl)
4143     return NULL_TREE;
4144   decl = build_lang_decl (USING_DECL, name, void_type_node);
4145   DECL_INITIAL (decl) = scope;
4146   TREE_CHAIN (decl) = current_binding_level->usings;
4147   current_binding_level->usings = decl;
4148   return decl;
4149 }
4150
4151 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4152    changed (i.e. there was already a directive), or the fresh
4153    TREE_LIST otherwise.  */
4154
4155 tree
4156 push_using_directive (used)
4157      tree used;
4158 {
4159   tree ud = current_binding_level->using_directives;
4160   tree iter, ancestor;
4161   
4162   /* Check if we already have this. */
4163   if (purpose_member (used, ud) != NULL_TREE)
4164     return NULL_TREE;
4165
4166   /* Recursively add all namespaces used. */
4167   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4168     push_using_directive (TREE_PURPOSE (iter));
4169
4170   ancestor = namespace_ancestor (current_decl_namespace (), used);
4171   ud = current_binding_level->using_directives;
4172   ud = perm_tree_cons (used, ancestor, ud);
4173   current_binding_level->using_directives = ud;
4174   return ud;
4175 }
4176
4177 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4178    other definitions already in place.  We get around this by making
4179    the value of the identifier point to a list of all the things that
4180    want to be referenced by that name.  It is then up to the users of
4181    that name to decide what to do with that list.
4182
4183    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4184    slot.  It is dealt with the same way.
4185
4186    FLAGS is a bitwise-or of the following values:
4187      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4188                  namespace scope.
4189      PUSH_USING: DECL is being pushed as the result of a using
4190                  declaration. 
4191
4192    The value returned may be a previous declaration if we guessed wrong
4193    about what language DECL should belong to (C or C++).  Otherwise,
4194    it's always DECL (and never something that's not a _DECL).  */
4195
4196 tree
4197 push_overloaded_decl (decl, flags)
4198      tree decl;
4199      int flags;
4200 {
4201   tree name = DECL_NAME (decl);
4202   tree old;
4203   tree new_binding;
4204   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4205
4206   if (doing_global)
4207     {
4208       old = namespace_binding (name, DECL_CONTEXT (decl));
4209       if (old && TREE_CODE (old) == FUNCTION_DECL
4210           && DECL_ARTIFICIAL (old)
4211           && (DECL_BUILT_IN (old) || DECL_BUILT_IN_NONANSI (old)))
4212         {
4213           if (duplicate_decls (decl, old))
4214             return old;
4215           old = NULL_TREE;
4216         }
4217     }
4218   else
4219     old = lookup_name_current_level (name);
4220
4221   if (old)
4222     {
4223       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4224         {
4225           tree t = TREE_TYPE (old);
4226           if (IS_AGGR_TYPE (t) && warn_shadow
4227               && (! DECL_IN_SYSTEM_HEADER (decl)
4228                   || ! DECL_IN_SYSTEM_HEADER (old)))
4229             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4230           old = NULL_TREE;
4231         }
4232       else if (is_overloaded_fn (old))
4233         {
4234           tree tmp;
4235           
4236           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4237             {
4238               tree fn = OVL_CURRENT (tmp);
4239
4240               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4241                   && !(flags & PUSH_USING)
4242                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4243                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4244                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4245                           decl, fn);
4246               
4247               if (duplicate_decls (decl, fn))
4248                 return fn;
4249             }
4250         }
4251       else
4252         {
4253           cp_error_at ("previous non-function declaration `%#D'", old);
4254           cp_error ("conflicts with function declaration `%#D'", decl);
4255           return decl;
4256         }
4257     }
4258
4259   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4260     {
4261       if (old && TREE_CODE (old) != OVERLOAD)
4262         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4263       else
4264         new_binding = ovl_cons (decl, old);
4265       if (flags & PUSH_USING)
4266         OVL_USED (new_binding) = 1;
4267     }
4268   else
4269     /* NAME is not ambiguous.  */
4270     new_binding = decl;
4271
4272   if (doing_global)
4273     set_namespace_binding (name, current_namespace, new_binding);
4274   else
4275     {
4276       /* We only create an OVERLOAD if there was a previous binding at
4277          this level, or if decl is a template. In the former case, we
4278          need to remove the old binding and replace it with the new
4279          binding.  We must also run through the NAMES on the binding
4280          level where the name was bound to update the chain.  */
4281
4282       if (TREE_CODE (new_binding) == OVERLOAD && old)
4283         {
4284           tree *d;
4285           
4286           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4287                *d;
4288                d = &TREE_CHAIN (*d))
4289             if (*d == old
4290                 || (TREE_CODE (*d) == TREE_LIST
4291                     && TREE_VALUE (*d) == old))
4292               {
4293                 if (TREE_CODE (*d) == TREE_LIST)
4294                   /* Just replace the old binding with the new.  */
4295                   TREE_VALUE (*d) = new_binding;
4296                 else
4297                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4298                   *d = build_tree_list (NULL_TREE, new_binding);
4299
4300                 /* And update the CPLUS_BINDING node.  */
4301                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4302                   = new_binding;
4303                 return decl;
4304               }
4305
4306           /* We should always find a previous binding in this case.  */
4307           my_friendly_abort (0);
4308         }
4309
4310       /* Install the new binding.  */
4311       push_local_binding (name, new_binding, flags);
4312     }
4313
4314   return decl;
4315 }
4316 \f
4317 /* Generate an implicit declaration for identifier FUNCTIONID
4318    as a function of type int ().  Print a warning if appropriate.  */
4319
4320 tree
4321 implicitly_declare (functionid)
4322      tree functionid;
4323 {
4324   register tree decl;
4325   int temp = allocation_temporary_p ();
4326
4327   push_obstacks_nochange ();
4328
4329   /* Save the decl permanently so we can warn if definition follows.
4330      In ANSI C, warn_implicit is usually false, so the saves little space.
4331      But in C++, it's usually true, hence the extra code.  */
4332   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4333     end_temporary_allocation ();
4334
4335   /* We used to reuse an old implicit decl here,
4336      but this loses with inline functions because it can clobber
4337      the saved decl chains.  */
4338   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4339
4340   DECL_EXTERNAL (decl) = 1;
4341   TREE_PUBLIC (decl) = 1;
4342
4343   /* ANSI standard says implicit declarations are in the innermost block.
4344      So we record the decl in the standard fashion.  */
4345   pushdecl (decl);
4346   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4347
4348   if (warn_implicit
4349       /* Only one warning per identifier.  */
4350       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4351     {
4352       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4353     }
4354
4355   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4356
4357   pop_obstacks ();
4358
4359   return decl;
4360 }
4361
4362 /* Return zero if the declaration NEWDECL is valid
4363    when the declaration OLDDECL (assumed to be for the same name)
4364    has already been seen.
4365    Otherwise return an error message format string with a %s
4366    where the identifier should go.  */
4367
4368 static char *
4369 redeclaration_error_message (newdecl, olddecl)
4370      tree newdecl, olddecl;
4371 {
4372   if (TREE_CODE (newdecl) == TYPE_DECL)
4373     {
4374       /* Because C++ can put things into name space for free,
4375          constructs like "typedef struct foo { ... } foo"
4376          would look like an erroneous redeclaration.  */
4377       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4378         return 0;
4379       else
4380         return "redefinition of `%#D'";
4381     }
4382   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4383     {
4384       /* If this is a pure function, its olddecl will actually be
4385          the original initialization to `0' (which we force to call
4386          abort()).  Don't complain about redefinition in this case.  */
4387       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4388         return 0;
4389
4390       /* If both functions come from different namespaces, this is not
4391          a redeclaration - this is a conflict with a used function. */
4392       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4393           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4394         return "`%D' conflicts with used function";
4395
4396       /* We'll complain about linkage mismatches in
4397          warn_extern_redeclared_static.  */
4398
4399       /* Defining the same name twice is no good.  */
4400       if (DECL_INITIAL (olddecl) != NULL_TREE
4401           && DECL_INITIAL (newdecl) != NULL_TREE)
4402         {
4403           if (DECL_NAME (olddecl) == NULL_TREE)
4404             return "`%#D' not declared in class";
4405           else
4406             return "redefinition of `%#D'";
4407         }
4408       return 0;
4409     }
4410   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4411     {
4412       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4413            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4414            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4415           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4416               && TYPE_SIZE (TREE_TYPE (newdecl))
4417               && TYPE_SIZE (TREE_TYPE (olddecl))))
4418         return "redefinition of `%#D'";
4419       return 0;
4420     }
4421   else if (toplevel_bindings_p ())
4422     {
4423       /* Objects declared at top level:  */
4424       /* If at least one is a reference, it's ok.  */
4425       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4426         return 0;
4427       /* Reject two definitions.  */
4428       return "redefinition of `%#D'";
4429     }
4430   else
4431     {
4432       /* Objects declared with block scope:  */
4433       /* Reject two definitions, and reject a definition
4434          together with an external reference.  */
4435       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4436         return "redeclaration of `%#D'";
4437       return 0;
4438     }
4439 }
4440 \f
4441 /* Get the LABEL_DECL corresponding to identifier ID as a label.
4442    Create one if none exists so far for the current function.
4443    This function is called for both label definitions and label references.  */
4444
4445 tree
4446 lookup_label (id)
4447      tree id;
4448 {
4449   register tree decl = IDENTIFIER_LABEL_VALUE (id);
4450
4451   if (current_function_decl == NULL_TREE)
4452     {
4453       error ("label `%s' referenced outside of any function",
4454              IDENTIFIER_POINTER (id));
4455       return NULL_TREE;
4456     }
4457
4458   if ((decl == NULL_TREE
4459       || DECL_SOURCE_LINE (decl) == 0)
4460       && (named_label_uses == NULL
4461           || named_label_uses->names_in_scope != current_binding_level->names
4462           || named_label_uses->label_decl != decl))
4463     {
4464       struct named_label_list *new_ent;
4465       new_ent
4466         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4467       new_ent->label_decl = decl;
4468       new_ent->names_in_scope = current_binding_level->names;
4469       new_ent->binding_level = current_binding_level;
4470       new_ent->lineno_o_goto = lineno;
4471       new_ent->filename_o_goto = input_filename;
4472       new_ent->next = named_label_uses;
4473       named_label_uses = new_ent;
4474     }
4475
4476   /* Use a label already defined or ref'd with this name.  */
4477   if (decl != NULL_TREE)
4478     {
4479       /* But not if it is inherited and wasn't declared to be inheritable.  */
4480       if (DECL_CONTEXT (decl) != current_function_decl
4481           && ! C_DECLARED_LABEL_FLAG (decl))
4482         return shadow_label (id);
4483       return decl;
4484     }
4485
4486   decl = build_decl (LABEL_DECL, id, void_type_node);
4487
4488   /* Make sure every label has an rtx.  */
4489   label_rtx (decl);
4490
4491   /* A label not explicitly declared must be local to where it's ref'd.  */
4492   DECL_CONTEXT (decl) = current_function_decl;
4493
4494   DECL_MODE (decl) = VOIDmode;
4495
4496   /* Say where one reference is to the label,
4497      for the sake of the error if it is not defined.  */
4498   DECL_SOURCE_LINE (decl) = lineno;
4499   DECL_SOURCE_FILE (decl) = input_filename;
4500
4501   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4502
4503   named_labels = tree_cons (NULL_TREE, decl, named_labels);
4504   named_label_uses->label_decl = decl;
4505
4506   return decl;
4507 }
4508
4509 /* Make a label named NAME in the current function,
4510    shadowing silently any that may be inherited from containing functions
4511    or containing scopes.
4512
4513    Note that valid use, if the label being shadowed
4514    comes from another scope in the same function,
4515    requires calling declare_nonlocal_label right away.  */
4516
4517 tree
4518 shadow_label (name)
4519      tree name;
4520 {
4521   register tree decl = IDENTIFIER_LABEL_VALUE (name);
4522
4523   if (decl != NULL_TREE)
4524     {
4525       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4526       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4527     }
4528
4529   return lookup_label (name);
4530 }
4531
4532 /* Define a label, specifying the location in the source file.
4533    Return the LABEL_DECL node for the label, if the definition is valid.
4534    Otherwise return 0.  */
4535
4536 tree
4537 define_label (filename, line, name)
4538      char *filename;
4539      int line;
4540      tree name;
4541 {
4542   tree decl;
4543
4544   if (minimal_parse_mode)
4545     {
4546       push_obstacks (&permanent_obstack, &permanent_obstack);
4547       decl = build_decl (LABEL_DECL, name, void_type_node);
4548       pop_obstacks ();
4549       DECL_SOURCE_LINE (decl) = line;
4550       DECL_SOURCE_FILE (decl) = filename;
4551       add_tree (decl);
4552       return decl;
4553     }
4554
4555   decl = lookup_label (name);
4556
4557   /* After labels, make any new cleanups go into their
4558      own new (temporary) binding contour.  */
4559   current_binding_level->more_cleanups_ok = 0;
4560
4561   /* If label with this name is known from an outer context, shadow it.  */
4562   if (decl != NULL_TREE && DECL_CONTEXT (decl) != current_function_decl)
4563     {
4564       shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
4565       SET_IDENTIFIER_LABEL_VALUE (name, NULL_TREE);
4566       decl = lookup_label (name);
4567     }
4568
4569   if (name == get_identifier ("wchar_t"))
4570     cp_pedwarn ("label named wchar_t");
4571
4572   if (DECL_INITIAL (decl) != NULL_TREE)
4573     {
4574       cp_error ("duplicate label `%D'", decl);
4575       return 0;
4576     }
4577   else
4578     {
4579       struct named_label_list *uses, *prev;
4580       int identified = 0;
4581
4582       /* Mark label as having been defined.  */
4583       DECL_INITIAL (decl) = error_mark_node;
4584       /* Say where in the source.  */
4585       DECL_SOURCE_FILE (decl) = filename;
4586       DECL_SOURCE_LINE (decl) = line;
4587
4588       prev = NULL;
4589       uses = named_label_uses;
4590       while (uses != NULL)
4591         if (uses->label_decl == decl)
4592           {
4593             struct binding_level *b = current_binding_level;
4594             while (b)
4595               {
4596                 tree new_decls = b->names;
4597                 tree old_decls = (b == uses->binding_level)
4598                                   ? uses->names_in_scope : NULL_TREE;
4599                 while (new_decls != old_decls)
4600                   {
4601                     if (TREE_CODE (new_decls) == VAR_DECL
4602                         /* Don't complain about crossing initialization
4603                            of internal entities.  They can't be accessed,
4604                            and they should be cleaned up
4605                            by the time we get to the label.  */
4606                         && ! DECL_ARTIFICIAL (new_decls)
4607                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4608                              && pod_type_p (TREE_TYPE (new_decls))))
4609                       {
4610                         if (! identified) 
4611                           {
4612                             cp_error ("jump to label `%D'", decl);
4613                             error_with_file_and_line (uses->filename_o_goto,
4614                                                       uses->lineno_o_goto,
4615                                                       "  from here");
4616                             identified = 1;
4617                         }
4618                         if (DECL_INITIAL (new_decls)
4619                             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls)))
4620                           cp_error_at ("  crosses initialization of `%#D'",
4621                                        new_decls);
4622                         else
4623                           cp_error_at ("  enters scope of non-POD `%#D'",
4624                                          new_decls);
4625                       }
4626                     new_decls = TREE_CHAIN (new_decls);
4627                   }
4628                 if (b == uses->binding_level)
4629                   break;
4630                 b = b->level_chain;
4631               }
4632
4633             if (prev != NULL)
4634               prev->next = uses->next;
4635             else
4636               named_label_uses = uses->next;
4637
4638             uses = uses->next;
4639           }
4640         else
4641           {
4642             prev = uses;
4643             uses = uses->next;
4644           }
4645       current_function_return_value = NULL_TREE;
4646       return decl;
4647     }
4648 }
4649
4650 struct cp_switch
4651 {
4652   struct binding_level *level;
4653   struct cp_switch *next;
4654 };
4655
4656 static struct cp_switch *switch_stack;
4657
4658 void
4659 push_switch ()
4660 {
4661   struct cp_switch *p
4662     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4663   p->level = current_binding_level;
4664   p->next = switch_stack;
4665   switch_stack = p;
4666 }
4667
4668 void
4669 pop_switch ()
4670 {
4671   switch_stack = switch_stack->next;
4672 }
4673
4674 /* Same, but for CASE labels.  If DECL is NULL_TREE, it's the default.  */
4675 /* XXX Note decl is never actually used. (bpk) */
4676
4677 void
4678 define_case_label ()
4679 {
4680   tree cleanup = last_cleanup_this_contour ();
4681   struct binding_level *b = current_binding_level;
4682   int identified = 0;
4683
4684   if (cleanup)
4685     {
4686       static int explained = 0;
4687       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4688       warning ("where case label appears here");
4689       if (!explained)
4690         {
4691           warning ("(enclose actions of previous case statements requiring");
4692           warning ("destructors in their own binding contours.)");
4693           explained = 1;
4694         }
4695     }
4696
4697   for (; b && b != switch_stack->level; b = b->level_chain)
4698     {
4699       tree new_decls = b->names;
4700       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4701         {
4702           if (TREE_CODE (new_decls) == VAR_DECL
4703               /* Don't complain about crossing initialization
4704                  of internal entities.  They can't be accessed,
4705                  and they should be cleaned up
4706                  by the time we get to the label.  */
4707               && ! DECL_ARTIFICIAL (new_decls)
4708               && ((DECL_INITIAL (new_decls) != NULL_TREE
4709                    && DECL_INITIAL (new_decls) != error_mark_node)
4710                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4711             {
4712               if (! identified)
4713                 error ("jump to case label");
4714               identified = 1;
4715               cp_error_at ("  crosses initialization of `%#D'",
4716                            new_decls);
4717             }
4718         }
4719     }
4720
4721   /* After labels, make any new cleanups go into their
4722      own new (temporary) binding contour.  */
4723
4724   current_binding_level->more_cleanups_ok = 0;
4725   current_function_return_value = NULL_TREE;
4726 }
4727 \f
4728 /* Return the list of declarations of the current level.
4729    Note that this list is in reverse order unless/until
4730    you nreverse it; and when you do nreverse it, you must
4731    store the result back using `storedecls' or you will lose.  */
4732
4733 tree
4734 getdecls ()
4735 {
4736   return current_binding_level->names;
4737 }
4738
4739 /* Return the list of type-tags (for structs, etc) of the current level.  */
4740
4741 tree
4742 gettags ()
4743 {
4744   return current_binding_level->tags;
4745 }
4746
4747 /* Store the list of declarations of the current level.
4748    This is done for the parameter declarations of a function being defined,
4749    after they are modified in the light of any missing parameters.  */
4750
4751 static void
4752 storedecls (decls)
4753      tree decls;
4754 {
4755   current_binding_level->names = decls;
4756 }
4757
4758 /* Similarly, store the list of tags of the current level.  */
4759
4760 static void
4761 storetags (tags)
4762      tree tags;
4763 {
4764   current_binding_level->tags = tags;
4765 }
4766 \f
4767 /* Given NAME, an IDENTIFIER_NODE,
4768    return the structure (or union or enum) definition for that name.
4769    Searches binding levels from BINDING_LEVEL up to the global level.
4770    If THISLEVEL_ONLY is nonzero, searches only the specified context
4771    (but skips any tag-transparent contexts to find one that is
4772    meaningful for tags).
4773    FORM says which kind of type the caller wants;
4774    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4775    If the wrong kind of type is found, and it's not a template, an error is
4776    reported.  */
4777
4778 static tree
4779 lookup_tag (form, name, binding_level, thislevel_only)
4780      enum tree_code form;
4781      tree name;
4782      struct binding_level *binding_level;
4783      int thislevel_only;
4784 {
4785   register struct binding_level *level;
4786   /* Non-zero if, we should look past a pseudo-global level, even if
4787      THISLEVEL_ONLY.  */
4788   int allow_pseudo_global = 1;
4789
4790   for (level = binding_level; level; level = level->level_chain)
4791     {
4792       register tree tail;
4793       if (ANON_AGGRNAME_P (name))
4794         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4795           {
4796             /* There's no need for error checking here, because
4797                anon names are unique throughout the compilation.  */
4798             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4799               return TREE_VALUE (tail);
4800           }
4801       else if (level->namespace_p)
4802         /* Do namespace lookup. */
4803         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4804           {
4805             tree old = binding_for_name (name, tail);
4806
4807             /* If we just skipped past a pseudo global level, even
4808                though THISLEVEL_ONLY, and we find a template class
4809                declaration, then we use the _TYPE node for the
4810                template.  See the example below.  */
4811             if (thislevel_only && !allow_pseudo_global
4812                 && old && BINDING_VALUE (old) 
4813                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4814               old = TREE_TYPE (BINDING_VALUE (old));
4815             else 
4816               old = BINDING_TYPE (old);
4817
4818             /* If it has an original type, it is a typedef, and we
4819                should not return it.  */
4820             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4821               old = NULL_TREE;
4822             if (old && TREE_CODE (old) != form
4823                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4824               {
4825                 cp_error ("`%#D' redeclared as %C", old, form);
4826                 return NULL_TREE;
4827               }
4828             if (old)
4829               return old;
4830             if (thislevel_only || tail == global_namespace)
4831               return NULL_TREE;
4832           }
4833       else
4834         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4835           {
4836             if (TREE_PURPOSE (tail) == name)
4837               {
4838                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
4839                 /* Should tighten this up; it'll probably permit
4840                    UNION_TYPE and a struct template, for example.  */
4841                 if (code != form
4842                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
4843                   {
4844                     /* Definition isn't the kind we were looking for.  */
4845                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
4846                               form);
4847                     return NULL_TREE;
4848                   }
4849                 return TREE_VALUE (tail);
4850               }
4851           }
4852       if (thislevel_only && ! level->tag_transparent)
4853         {
4854           if (level->pseudo_global && allow_pseudo_global)
4855             {
4856               /* We must deal with cases like this:
4857                  
4858                    template <class T> struct S;
4859                    template <class T> struct S {};
4860                    
4861                  When looking up `S', for the second declaration, we
4862                  would like to find the first declaration.  But, we
4863                  are in the pseudo-global level created for the
4864                  template parameters, rather than the (surrounding)
4865                  namespace level.  Thus, we keep going one more level,
4866                  even though THISLEVEL_ONLY is non-zero.  */
4867               allow_pseudo_global = 0;
4868               continue;
4869             }
4870           else
4871             return NULL_TREE;
4872         }
4873       if (current_class_type && level->level_chain->namespace_p)
4874         {
4875           /* Try looking in this class's tags before heading into
4876              global binding level.  */
4877           tree context = current_class_type;
4878           while (context)
4879             {
4880               switch (TREE_CODE_CLASS (TREE_CODE (context)))
4881                 {
4882                 tree these_tags;
4883                 case 't':
4884                     these_tags = CLASSTYPE_TAGS (context);
4885                     if (ANON_AGGRNAME_P (name))
4886                       while (these_tags)
4887                         {
4888                           if (TYPE_IDENTIFIER (TREE_VALUE (these_tags))
4889                               == name)
4890                             return TREE_VALUE (tail);
4891                           these_tags = TREE_CHAIN (these_tags);
4892                         }
4893                     else
4894                       while (these_tags)
4895                         {
4896                           if (TREE_PURPOSE (these_tags) == name)
4897                             {
4898                               if (TREE_CODE (TREE_VALUE (these_tags)) != form)
4899                                 {
4900                                   cp_error ("`%#D' redeclared as %C in class scope",
4901                                             TREE_VALUE (tail), form);
4902                                   return NULL_TREE;
4903                                 }
4904                               return TREE_VALUE (tail);
4905                             }
4906                           these_tags = TREE_CHAIN (these_tags);
4907                         }
4908                     /* If this type is not yet complete, then don't
4909                        look at its context.  */
4910                     if (TYPE_SIZE (context) == NULL_TREE)
4911                       goto no_context;
4912                     /* Go to next enclosing type, if any.  */
4913                     context = DECL_CONTEXT (TYPE_MAIN_DECL (context));
4914                     break;
4915                 case 'd':
4916                     context = DECL_CONTEXT (context);
4917                     break;
4918                 default:
4919                     my_friendly_abort (10);
4920                 }
4921               continue;
4922               no_context:
4923               break;
4924             }
4925         }
4926     }
4927   return NULL_TREE;
4928 }
4929
4930 #if 0
4931 void
4932 set_current_level_tags_transparency (tags_transparent)
4933      int tags_transparent;
4934 {
4935   current_binding_level->tag_transparent = tags_transparent;
4936 }
4937 #endif
4938
4939 /* Given a type, find the tag that was defined for it and return the tag name.
4940    Otherwise return 0.  However, the value can never be 0
4941    in the cases in which this is used.
4942
4943    C++: If NAME is non-zero, this is the new name to install.  This is
4944    done when replacing anonymous tags with real tag names.  */
4945
4946 static tree
4947 lookup_tag_reverse (type, name)
4948      tree type;
4949      tree name;
4950 {
4951   register struct binding_level *level;
4952
4953   for (level = current_binding_level; level; level = level->level_chain)
4954     {
4955       register tree tail;
4956       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4957         {
4958           if (TREE_VALUE (tail) == type)
4959             {
4960               if (name)
4961                 TREE_PURPOSE (tail) = name;
4962               return TREE_PURPOSE (tail);
4963             }
4964         }
4965     }
4966   return NULL_TREE;
4967 }
4968 \f
4969 /* Lookup TYPE in CONTEXT (a chain of nested types or a FUNCTION_DECL).
4970    Return the type value, or NULL_TREE if not found.  */
4971
4972 static tree
4973 lookup_nested_type (type, context)
4974      tree type;
4975      tree context;
4976 {
4977   if (context == NULL_TREE)
4978     return NULL_TREE;
4979   while (context)
4980     {
4981       switch (TREE_CODE (context))
4982         {
4983         case TYPE_DECL:
4984           {
4985             tree ctype = TREE_TYPE (context);
4986             tree match = value_member (type, CLASSTYPE_TAGS (ctype));
4987             if (match)
4988               return TREE_VALUE (match);
4989             context = DECL_CONTEXT (context);
4990
4991             /* When we have a nested class whose member functions have
4992                local types (e.g., a set of enums), we'll arrive here
4993                with the DECL_CONTEXT as the actual RECORD_TYPE node for
4994                the enclosing class.  Instead, we want to make sure we
4995                come back in here with the TYPE_DECL, not the RECORD_TYPE.  */
4996             if (context && TREE_CODE (context) == RECORD_TYPE)
4997               context = TREE_CHAIN (context);
4998           }
4999           break;
5000         case FUNCTION_DECL:
5001           if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
5002             return lookup_name (TYPE_IDENTIFIER (type), 1);
5003           return NULL_TREE;
5004         default:
5005           my_friendly_abort (12);
5006         }
5007     }
5008   return NULL_TREE;
5009 }
5010
5011 /* Look up NAME in the NAMESPACE.  */
5012
5013 tree
5014 lookup_namespace_name (namespace, name)
5015      tree namespace, name;
5016 {
5017   struct tree_binding _b;
5018   tree val;
5019
5020   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5021
5022   if (TREE_CODE (name) == NAMESPACE_DECL)
5023     /* This happens for A::B<int> when B is a namespace. */
5024     return name;
5025   else if (TREE_CODE (name) == TEMPLATE_DECL)
5026     {
5027       /* This happens for A::B where B is a template, and there are no
5028          template arguments.  */
5029       cp_error ("invalid use of `%D'", name);
5030       return error_mark_node;
5031     }
5032
5033   namespace = ORIGINAL_NAMESPACE (namespace);
5034
5035   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5036   
5037   val = binding_init (&_b);
5038   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5039     return error_mark_node;
5040
5041   if (BINDING_VALUE (val))
5042     {
5043       val = BINDING_VALUE (val);
5044
5045       /* If we have a single function from a using decl, pull it out.  */
5046       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5047         val = OVL_FUNCTION (val);
5048       return val;
5049     }
5050
5051   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5052   return error_mark_node;
5053 }
5054
5055 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5056
5057 static unsigned long
5058 typename_hash (k)
5059      hash_table_key k;
5060 {
5061   unsigned long hash;
5062   tree t;
5063
5064   t = (tree) k;
5065   hash = (((unsigned long) TYPE_CONTEXT (t))
5066           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5067
5068   return hash;
5069 }
5070
5071 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5072
5073 static boolean
5074 typename_compare (k1, k2)
5075      hash_table_key k1;
5076      hash_table_key k2;
5077 {
5078   tree t1;
5079   tree t2;
5080   tree d1;
5081   tree d2;
5082
5083   t1 = (tree) k1;
5084   t2 = (tree) k2;
5085   d1 = TYPE_NAME (t1);
5086   d2 = TYPE_NAME (t2);
5087   
5088   return (DECL_NAME (d1) == DECL_NAME (d2)
5089           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5090           && ((TREE_TYPE (t1) != NULL_TREE) 
5091               == (TREE_TYPE (t2) != NULL_TREE))
5092           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5093           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5094 }
5095
5096 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5097    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5098    is non-NULL, this type is being created by the implicit typename
5099    extension, and BASE_TYPE is a type named `t' in some base class of
5100    `T' which depends on template parameters.  
5101
5102    Returns the new TYPENAME_TYPE.  */
5103
5104 tree
5105 build_typename_type (context, name, fullname, base_type)
5106      tree context;
5107      tree name;
5108      tree fullname;
5109      tree base_type;
5110 {
5111   tree t;
5112   tree d;
5113   struct hash_entry* e;
5114
5115   static struct hash_table ht;
5116
5117   push_obstacks (&permanent_obstack, &permanent_obstack);
5118
5119   if (!ht.table
5120       && !hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5121                            &typename_compare))
5122     fatal ("virtual memory exhausted");
5123
5124   /* Build the TYPENAME_TYPE.  */
5125   t = make_lang_type (TYPENAME_TYPE);
5126   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5127   TYPENAME_TYPE_FULLNAME (t) = fullname;
5128   TREE_TYPE (t) = base_type;
5129
5130   /* Build the corresponding TYPE_DECL.  */
5131   d = build_decl (TYPE_DECL, name, t);
5132   TYPE_NAME (TREE_TYPE (d)) = d;
5133   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5134   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5135   DECL_ARTIFICIAL (d) = 1;
5136
5137   /* See if we already have this type.  */
5138   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5139   if (e)
5140     {
5141       /* This will free not only TREE_TYPE, but the lang-specific data
5142          and the TYPE_DECL as well.  */
5143       obstack_free (&permanent_obstack, t);
5144       t = (tree) e->key;
5145     }
5146   else
5147     /* Insert the type into the table.  */
5148     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5149
5150   pop_obstacks ();
5151
5152   return t;
5153 }
5154
5155 tree
5156 make_typename_type (context, name)
5157      tree context, name;
5158 {
5159   tree t;
5160   tree fullname;
5161
5162   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5163     name = TYPE_IDENTIFIER (name);
5164   else if (TREE_CODE (name) == TYPE_DECL)
5165     name = DECL_NAME (name);
5166
5167   fullname = name;
5168
5169   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5170     {
5171       name = TREE_OPERAND (name, 0);
5172       if (TREE_CODE (name) == TEMPLATE_DECL)
5173         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5174     }
5175   if (TREE_CODE (name) != IDENTIFIER_NODE)
5176     my_friendly_abort (2000);
5177
5178   if (TREE_CODE (context) == NAMESPACE_DECL)
5179     {
5180       /* We can get here from typename_sub0 in the explicit_template_type
5181          expansion.  Just fail.  */
5182       cp_error ("no class template named `%#T' in `%#T'",
5183                 name, context);
5184       return error_mark_node;
5185     }
5186
5187   if (! uses_template_parms (context)
5188       || currently_open_class (context))
5189     {
5190       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5191         {
5192           if (IS_AGGR_TYPE (context))
5193             t = lookup_field (context, name, 0, 0);
5194           else
5195             {
5196               cp_error ("no class template named `%#T' in `%#T'",
5197                         name, context);
5198               return error_mark_node;
5199             }
5200
5201           if (t && DECL_CLASS_TEMPLATE_P (t))
5202             return lookup_template_class (t, TREE_OPERAND (fullname, 1),
5203                                           NULL_TREE, context, 
5204                                           /*entering_scope=*/0);
5205         }
5206       else
5207         {
5208           if (IS_AGGR_TYPE (context))
5209             t = lookup_field (context, name, 0, 1);
5210           else
5211             {
5212               cp_error ("no type named `%#T' in `%#T'", name, context);
5213               return error_mark_node;
5214             }
5215
5216           if (t)
5217             return TREE_TYPE (t);
5218         }
5219     }
5220   
5221   return build_typename_type (context, name, fullname,  NULL_TREE);
5222 }
5223
5224 /* Select the right _DECL from multiple choices. */
5225
5226 static tree
5227 select_decl (binding, flags)
5228      tree binding;
5229      int flags;
5230 {
5231   tree val;
5232   val = BINDING_VALUE (binding);
5233   if (LOOKUP_NAMESPACES_ONLY (flags))
5234     {
5235       /* We are not interested in types. */
5236       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5237         return val;
5238       return NULL_TREE;
5239     }
5240   
5241   /* If we could have a type and
5242      we have nothing or we need a type and have none.  */
5243   if (BINDING_TYPE (binding)
5244       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5245                    && TREE_CODE (val) != TYPE_DECL)))
5246     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5247   /* Don't return non-types if we really prefer types. */
5248   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5249            && (TREE_CODE (val) != TEMPLATE_DECL
5250                || !DECL_CLASS_TEMPLATE_P (val)))
5251     val = NULL_TREE;
5252
5253   return val;
5254 }
5255
5256 /* Unscoped lookup of a global, iterate over namespaces, considering
5257    using namespace statements. */
5258
5259 static tree
5260 unqualified_namespace_lookup (name, flags)
5261      tree name;
5262      int flags;
5263 {
5264   struct tree_binding _binding;
5265   tree b = binding_init (&_binding);
5266   tree initial = current_decl_namespace();
5267   tree scope = initial;
5268   tree siter;
5269   struct binding_level *level;
5270   tree val = NULL_TREE;
5271
5272   while (!val)
5273     {
5274       val = binding_for_name (name, scope);
5275
5276       /* Initialize binding for this context. */
5277       BINDING_VALUE (b) = BINDING_VALUE (val);
5278       BINDING_TYPE (b) = BINDING_TYPE (val);
5279
5280       /* Add all _DECLs seen through local using-directives. */
5281       for (level = current_binding_level; 
5282            !level->namespace_p;
5283            level = level->level_chain)
5284         if (!lookup_using_namespace (name, b, level->using_directives,
5285                                      scope, flags))
5286           /* Give up because of error. */
5287           return NULL_TREE;
5288
5289       /* Add all _DECLs seen through global using-directives. */
5290       /* XXX local and global using lists should work equally. */
5291       siter = initial;
5292       while (1)
5293         {
5294           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5295                                        scope, flags))
5296             /* Give up because of error. */
5297             return NULL_TREE;
5298           if (siter == scope) break;
5299           siter = CP_DECL_CONTEXT (siter);
5300         }
5301
5302       val = select_decl (b, flags);
5303       if (scope == global_namespace)
5304         break;
5305       scope = CP_DECL_CONTEXT (scope);
5306     }
5307   return val;
5308 }
5309
5310 /* Combine prefer_type and namespaces_only into flags.  */
5311
5312 static int
5313 lookup_flags (prefer_type, namespaces_only)
5314   int prefer_type, namespaces_only;
5315 {
5316   if (namespaces_only)
5317     return LOOKUP_PREFER_NAMESPACES;
5318   if (prefer_type > 1)
5319     return LOOKUP_PREFER_TYPES;
5320   if (prefer_type > 0)
5321     return LOOKUP_PREFER_BOTH;
5322   return 0;
5323 }
5324
5325 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5326    ignore it or not.  Subroutine of lookup_name_real.  */
5327
5328 static tree
5329 qualify_lookup (val, flags)
5330      tree val;
5331      int flags;
5332 {
5333   if (val == NULL_TREE)
5334     return val;
5335   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5336     return val;
5337   if ((flags & LOOKUP_PREFER_TYPES)
5338       && (TREE_CODE (val) == TYPE_DECL
5339           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5340               && DECL_CLASS_TEMPLATE_P (val))))
5341     return val;
5342   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5343     return NULL_TREE;
5344   return val;
5345 }
5346
5347 /* Look up NAME in the current binding level and its superiors in the
5348    namespace of variables, functions and typedefs.  Return a ..._DECL
5349    node of some kind representing its definition if there is only one
5350    such declaration, or return a TREE_LIST with all the overloaded
5351    definitions if there are many, or return 0 if it is undefined.
5352
5353    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5354    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5355    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5356    Otherwise we prefer non-TYPE_DECLs.  
5357
5358    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5359    using IDENTIFIER_CLASS_VALUE.  */
5360
5361 static tree
5362 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5363      tree name;
5364      int prefer_type, nonclass, namespaces_only;
5365 {
5366   register tree val;
5367   int yylex = 0;
5368   tree from_obj = NULL_TREE;
5369   int flags;
5370
5371   /* Hack: copy flag set by parser, if set. */
5372   if (only_namespace_names)
5373     namespaces_only = 1;
5374
5375   if (prefer_type == -2)
5376     {
5377       extern int looking_for_typename;
5378       tree type = NULL_TREE;
5379
5380       yylex = 1;
5381       prefer_type = looking_for_typename;
5382
5383       flags = lookup_flags (prefer_type, namespaces_only);
5384       /* During parsing, we need to complain. */
5385       flags |= LOOKUP_COMPLAIN;
5386       /* If the next thing is '<', class templates are types. */
5387       if (looking_for_template)
5388         flags |= LOOKUP_TEMPLATES_EXPECTED;
5389
5390       /* std:: becomes :: for now.  */
5391       if (got_scope == std_node)
5392         got_scope = void_type_node;
5393
5394       if (got_scope)
5395         type = got_scope;
5396       else if (got_object != error_mark_node)
5397         type = got_object;
5398       
5399       if (type)
5400         {
5401           if (type == error_mark_node)
5402             return error_mark_node;
5403           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5404             type = TREE_TYPE (type);
5405
5406           if (TYPE_P (type))
5407             type = complete_type (type);
5408
5409           if (TREE_CODE (type) == VOID_TYPE)
5410             type = global_namespace;
5411           if (TREE_CODE (type) == NAMESPACE_DECL)
5412             {
5413               struct tree_binding b;
5414               val = binding_init (&b);
5415               if (!qualified_lookup_using_namespace (name, type, val, flags))
5416                 return NULL_TREE;
5417               val = select_decl (val, flags);
5418             }
5419           else if (! IS_AGGR_TYPE (type)
5420                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5421                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5422                    || TREE_CODE (type) == TYPENAME_TYPE)
5423             /* Someone else will give an error about this if needed.  */
5424             val = NULL_TREE;
5425           else if (TYPE_BEING_DEFINED (type))
5426             {
5427               val = IDENTIFIER_CLASS_VALUE (name);
5428               if (val && DECL_CONTEXT (val) != type)
5429                 {
5430                   struct binding_level *b = class_binding_level;
5431                   for (val = NULL_TREE; b; b = b->level_chain)
5432                     {
5433                       tree t = purpose_member (name, b->class_shadowed);
5434                       if (t && TREE_VALUE (t)
5435                           && DECL_CONTEXT (TREE_VALUE (t)) == type)
5436                         {
5437                           val = TREE_VALUE (t);
5438                           break;
5439                         }
5440                     }
5441                 }
5442               if (val == NULL_TREE)
5443                 val = lookup_field (type, name, 0, 1);
5444             }
5445           else if (type == current_class_type)
5446             val = IDENTIFIER_CLASS_VALUE (name);
5447           else
5448             val = lookup_member (type, name, 0, prefer_type);
5449         }
5450       else
5451         val = NULL_TREE;
5452
5453       if (got_scope)
5454         goto done;
5455       else if (got_object && val)
5456         from_obj = val;
5457     }
5458   else
5459     flags = lookup_flags (prefer_type, namespaces_only);
5460
5461   /* First, look in non-namespace scopes.  */
5462   for (val = IDENTIFIER_BINDING (name); val; val = TREE_CHAIN (val))
5463     {
5464       if (!LOCAL_BINDING_P (val) && nonclass)
5465         /* We're not looking for class-scoped bindings, so keep going.  */
5466         continue;
5467       
5468       /* If this is the kind of thing we're looking for, we're done.  */
5469       if (qualify_lookup (BINDING_VALUE (val), flags))
5470         {
5471           val = BINDING_VALUE (val);
5472           break;
5473         }
5474       else if ((flags & LOOKUP_PREFER_TYPES) 
5475                && qualify_lookup (BINDING_TYPE (val), flags))
5476         {
5477           val = BINDING_TYPE (val);
5478           break;
5479         }
5480     }
5481
5482   /* If VAL is a type from a dependent base, we're not really supposed
5483      to be able to see it; the fact that we can is the "implicit
5484      typename" extension.  We call lookup_field here to turn VAL into
5485      a TYPE_DECL for a TYPENAME_TYPE.  */
5486   if (processing_template_decl && val
5487       && val == IDENTIFIER_CLASS_VALUE (name)
5488       && TREE_CODE (val) == TYPE_DECL
5489       && !currently_open_class (DECL_CONTEXT (val))
5490       && uses_template_parms (current_class_type))
5491     val = lookup_field (current_class_type, name, 0, 1);
5492
5493   /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
5494      list when we're defining a type.  It would probably be simpler to
5495      do this, but we don't.  So, we must lookup names from base
5496      classes explicitly.  */
5497   if (!val && !nonclass 
5498       && current_class_type && TYPE_BEING_DEFINED (current_class_type))
5499     {
5500       val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
5501                             flags);
5502       if (!val)
5503         val = qualify_lookup (lookup_nested_field (name, !yylex),
5504                               flags);
5505     }
5506   
5507   /* If we found a type from a dependent base class (using the
5508      implicit typename extension) make sure that there's not some
5509      global name which should be chosen instead.  */
5510   if (val && TREE_CODE (val) == TYPE_DECL
5511       && IMPLICIT_TYPENAME_P (TREE_TYPE (val)))
5512     {
5513       tree global_val;
5514
5515       /* Any other name takes precedence over an implicit typename.  Warn the
5516          user about this potentially confusing lookup.  */
5517       global_val = unqualified_namespace_lookup (name, flags);
5518
5519       if (global_val)
5520         {
5521           tree subtype;
5522
5523           /* Only warn when not lexing; we don't want to warn if they
5524              use this name as a declarator.  */
5525           subtype = TREE_TYPE (TREE_TYPE (val));
5526           if (! yylex
5527               && ! (TREE_CODE (global_val) == TEMPLATE_DECL
5528                     && CLASSTYPE_TEMPLATE_INFO (subtype)
5529                     && CLASSTYPE_TI_TEMPLATE (subtype) == global_val)
5530               && ! (TREE_CODE (global_val) == TYPE_DECL
5531                     && same_type_p (TREE_TYPE (global_val), subtype)))
5532             {
5533               cp_warning ("lookup of `%D' finds `%#D'", name, global_val);
5534               cp_warning ("  instead of `%D' from dependent base class",
5535                           val);
5536               cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5537                           constructor_name (current_class_type), name);
5538             }
5539
5540           /* Use the global value instead of the implicit typename.  */
5541           val = global_val;
5542         }
5543     }
5544   else if (!val)
5545     /* No local, or class-scoped binding.  Look for a namespace-scope
5546        declaration.  */
5547     val = unqualified_namespace_lookup (name, flags);
5548
5549  done:
5550   if (val)
5551     {
5552       /* This should only warn about types used in qualified-ids.  */
5553       if (from_obj && from_obj != val)
5554         {
5555           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5556               && TREE_CODE (val) == TYPE_DECL
5557               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5558             {
5559               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5560                           name, got_object, TREE_TYPE (from_obj));
5561               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5562                           TREE_TYPE (val));
5563             }
5564
5565           /* We don't change val to from_obj if got_object depends on
5566              template parms because that breaks implicit typename for
5567              destructor calls.  */
5568           if (! uses_template_parms (got_object))
5569             val = from_obj;
5570         }
5571
5572       /* If we have a single function from a using decl, pull it out.  */
5573       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5574         val = OVL_FUNCTION (val);
5575     }
5576   else if (from_obj)
5577     val = from_obj;
5578
5579   return val;
5580 }
5581
5582 tree
5583 lookup_name_nonclass (name)
5584      tree name;
5585 {
5586   return lookup_name_real (name, 0, 1, 0);
5587 }
5588
5589 tree
5590 lookup_function_nonclass (name, args)
5591      tree name;
5592      tree args;
5593 {
5594   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5595 }
5596
5597 tree
5598 lookup_name_namespace_only (name)
5599      tree name;
5600 {
5601   /* type-or-namespace, nonclass, namespace_only */
5602   return lookup_name_real (name, 1, 1, 1);
5603 }
5604
5605 tree
5606 lookup_name (name, prefer_type)
5607      tree name;
5608      int prefer_type;
5609 {
5610   return lookup_name_real (name, prefer_type, 0, 0);
5611 }
5612
5613 /* Similar to `lookup_name' but look only at current binding level.  */
5614
5615 tree
5616 lookup_name_current_level (name)
5617      tree name;
5618 {
5619   register tree t = NULL_TREE;
5620
5621   if (current_binding_level->namespace_p)
5622     {
5623       t =  IDENTIFIER_NAMESPACE_VALUE (name);
5624
5625       /* extern "C" function() */
5626       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5627         t = TREE_VALUE (t);
5628     }
5629   else if (IDENTIFIER_BINDING (name) 
5630            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5631     {
5632       struct binding_level *b = current_binding_level;
5633
5634       while (1)
5635         {
5636           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5637             return IDENTIFIER_VALUE (name);
5638           
5639           if (b->keep == 2)
5640             b = b->level_chain;
5641           else
5642             break;
5643         }
5644     }
5645
5646   return t;
5647 }
5648
5649 /* Like lookup_name_current_level, but for types.  */
5650
5651 tree
5652 lookup_type_current_level (name)
5653      tree name;
5654 {
5655   register tree t = NULL_TREE;
5656
5657   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5658
5659   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5660       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5661     {
5662       struct binding_level *b = current_binding_level;
5663       while (1)
5664         {
5665           if (purpose_member (name, b->type_shadowed))
5666             return REAL_IDENTIFIER_TYPE_VALUE (name);
5667           if (b->keep == 2)
5668             b = b->level_chain;
5669           else
5670             break;
5671         }
5672     }
5673
5674   return t;
5675 }
5676
5677 void
5678 begin_only_namespace_names ()
5679 {
5680   only_namespace_names = 1;
5681 }
5682
5683 void
5684 end_only_namespace_names ()
5685 {
5686   only_namespace_names = 0;
5687 }
5688 \f
5689 /* Arrange for the user to get a source line number, even when the
5690    compiler is going down in flames, so that she at least has a
5691    chance of working around problems in the compiler.  We used to
5692    call error(), but that let the segmentation fault continue
5693    through; now, it's much more passive by asking them to send the
5694    maintainers mail about the problem.  */
5695
5696 static void
5697 signal_catch (sig)
5698      int sig ATTRIBUTE_UNUSED;
5699 {
5700   signal (SIGSEGV, SIG_DFL);
5701 #ifdef SIGIOT
5702   signal (SIGIOT, SIG_DFL);
5703 #endif
5704 #ifdef SIGILL
5705   signal (SIGILL, SIG_DFL);
5706 #endif
5707 #ifdef SIGABRT
5708   signal (SIGABRT, SIG_DFL);
5709 #endif
5710 #ifdef SIGBUS
5711   signal (SIGBUS, SIG_DFL);
5712 #endif
5713   my_friendly_abort (0);
5714 }
5715
5716 #if 0
5717 /* Unused -- brendan 970107 */
5718 /* Array for holding types considered "built-in".  These types
5719    are output in the module in which `main' is defined.  */
5720 static tree *builtin_type_tdescs_arr;
5721 static int builtin_type_tdescs_len, builtin_type_tdescs_max;
5722 #endif
5723
5724 /* Push the declarations of builtin types into the namespace.
5725    RID_INDEX, if < RID_MAX is the index of the builtin type
5726    in the array RID_POINTERS.  NAME is the name used when looking
5727    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5728
5729 static void
5730 record_builtin_type (rid_index, name, type)
5731      enum rid rid_index;
5732      char *name;
5733      tree type;
5734 {
5735   tree rname = NULL_TREE, tname = NULL_TREE;
5736   tree tdecl = NULL_TREE;
5737
5738   if ((int) rid_index < (int) RID_MAX)
5739     rname = ridpointers[(int) rid_index];
5740   if (name)
5741     tname = get_identifier (name);
5742
5743   TYPE_BUILT_IN (type) = 1;
5744   
5745   if (tname)
5746     {
5747       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5748       set_identifier_type_value (tname, NULL_TREE);
5749       if ((int) rid_index < (int) RID_MAX)
5750         /* Built-in types live in the global namespace. */
5751         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5752     }
5753   if (rname != NULL_TREE)
5754     {
5755       if (tname != NULL_TREE)
5756         {
5757           set_identifier_type_value (rname, NULL_TREE);
5758           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5759         }
5760       else
5761         {
5762           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5763           set_identifier_type_value (rname, NULL_TREE);
5764         }
5765     }
5766 }
5767
5768 /* Record one of the standard Java types.
5769  * Declare it as having the given NAME.
5770  * If SIZE > 0, it is the size of one of the integral types;
5771  * otherwise it is the negative of the size of one of the other types.  */
5772
5773 static tree
5774 record_builtin_java_type (name, size)
5775      char *name;
5776      int size;
5777 {
5778   tree type, decl;
5779   if (size > 0)
5780     type = make_signed_type (size);
5781   else if (size > -32)
5782     { /* "__java_char" or ""__java_boolean". */
5783       type = make_unsigned_type (-size);
5784       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5785     }
5786   else
5787     { /* "__java_float" or ""__java_double". */
5788       type = make_node (REAL_TYPE);
5789       TYPE_PRECISION (type) = - size;
5790       layout_type (type);
5791     }
5792   record_builtin_type (RID_MAX, name, type);
5793   decl = TYPE_NAME (type);
5794   DECL_IGNORED_P (decl) = 1;
5795   TYPE_FOR_JAVA (type) = 1;
5796   return type;
5797 }
5798
5799 /* Push a type into the namespace so that the back-ends ignore it. */
5800
5801 static void
5802 record_unknown_type (type, name)
5803      tree type;
5804      char *name;
5805 {
5806   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5807   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5808   DECL_IGNORED_P (decl) = 1;
5809   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5810   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5811   TYPE_ALIGN (type) = 1;
5812   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5813
5814
5815 /* Push overloaded decl, in global scope, with one argument so it
5816    can be used as a callback from define_function.  */
5817
5818 static void
5819 push_overloaded_decl_1 (x)
5820      tree x;
5821 {
5822   push_overloaded_decl (x, PUSH_GLOBAL);
5823 }
5824
5825 #ifdef __GNUC__
5826 __inline
5827 #endif
5828 tree
5829 auto_function (name, type, code)
5830      tree name, type;
5831      enum built_in_function code;
5832 {
5833   return define_function
5834     (IDENTIFIER_POINTER (name), type, code, push_overloaded_decl_1,
5835      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5836                                               0)));
5837 }
5838
5839 /* Create the predefined scalar types of C,
5840    and some nodes representing standard constants (0, 1, (void *)0).
5841    Initialize the global binding level.
5842    Make definitions for built-in primitive functions.  */
5843
5844 void
5845 init_decl_processing ()
5846 {
5847   register tree endlink, int_endlink, double_endlink, unsigned_endlink;
5848   tree fields[20];
5849   /* Data type of memcpy.  */
5850   tree memcpy_ftype, strlen_ftype;
5851   int wchar_type_size;
5852   tree temp;
5853   tree array_domain_type;
5854   tree vb_off_identifier = NULL_TREE;
5855   /* Function type `char *(char *, char *)' and similar ones */
5856   tree string_ftype_ptr_ptr, int_ftype_string_string;
5857   tree sizetype_endlink;
5858   tree ptr_ftype, ptr_ftype_unsigned, ptr_ftype_sizetype;
5859   tree void_ftype, void_ftype_int, void_ftype_ptr;
5860
5861   /* Have to make these distinct before we try using them.  */
5862   lang_name_cplusplus = get_identifier ("C++");
5863   lang_name_c = get_identifier ("C");
5864   lang_name_java = get_identifier ("Java");
5865
5866   /* Enter the global namespace. */
5867   my_friendly_assert (global_namespace == NULL_TREE, 375);
5868   my_friendly_assert (current_lang_name == NULL_TREE, 375);
5869   current_lang_name = lang_name_cplusplus;
5870   push_namespace (get_identifier ("::"));
5871   global_namespace = current_namespace;
5872   current_lang_name = NULL_TREE;
5873
5874   if (flag_strict_prototype == 2)
5875     flag_strict_prototype = pedantic;
5876   if (! flag_permissive && ! pedantic)
5877     flag_pedantic_errors = 1;
5878
5879   strict_prototypes_lang_c = flag_strict_prototype;
5880
5881   /* Initially, C.  */
5882   current_lang_name = lang_name_c;
5883
5884   current_function_decl = NULL_TREE;
5885   named_labels = NULL_TREE;
5886   named_label_uses = NULL;
5887   current_binding_level = NULL_BINDING_LEVEL;
5888   free_binding_level = NULL_BINDING_LEVEL;
5889
5890   /* Because most segmentation signals can be traced back into user
5891      code, catch them and at least give the user a chance of working
5892      around compiler bugs.  */
5893   signal (SIGSEGV, signal_catch);
5894
5895   /* We will also catch aborts in the back-end through signal_catch and
5896      give the user a chance to see where the error might be, and to defeat
5897      aborts in the back-end when there have been errors previously in their
5898      code.  */
5899 #ifdef SIGIOT
5900   signal (SIGIOT, signal_catch);
5901 #endif
5902 #ifdef SIGILL
5903   signal (SIGILL, signal_catch);
5904 #endif
5905 #ifdef SIGABRT
5906   signal (SIGABRT, signal_catch);
5907 #endif
5908 #ifdef SIGBUS
5909   signal (SIGBUS, signal_catch);
5910 #endif
5911
5912   gcc_obstack_init (&decl_obstack);
5913
5914   /* Must lay these out before anything else gets laid out.  */
5915   error_mark_node = make_node (ERROR_MARK);
5916   TREE_PERMANENT (error_mark_node) = 1;
5917   TREE_TYPE (error_mark_node) = error_mark_node;
5918   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
5919   TREE_TYPE (error_mark_list) = error_mark_node;
5920
5921   /* Make the binding_level structure for global names.  */
5922   pushlevel (0);
5923   global_binding_level = current_binding_level;
5924   /* The global level is the namespace level of ::.  */
5925   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
5926   declare_namespace_level ();
5927
5928   this_identifier = get_identifier (THIS_NAME);
5929   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
5930   ctor_identifier = get_identifier (CTOR_NAME);
5931   dtor_identifier = get_identifier (DTOR_NAME);
5932   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
5933   index_identifier = get_identifier (VTABLE_INDEX_NAME);
5934   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
5935   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
5936   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
5937   if (flag_handle_signatures)
5938     {
5939       tag_identifier = get_identifier (SIGTABLE_TAG_NAME);
5940       vb_off_identifier = get_identifier (SIGTABLE_VB_OFF_NAME);
5941       vt_off_identifier = get_identifier (SIGTABLE_VT_OFF_NAME);
5942     }
5943
5944   /* Define `int' and `char' first so that dbx will output them first.  */
5945
5946   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5947   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
5948
5949   /* Define `char', which is like either `signed char' or `unsigned char'
5950      but not the same as either.  */
5951
5952   char_type_node
5953     = (flag_signed_char
5954        ? make_signed_type (CHAR_TYPE_SIZE)
5955        : make_unsigned_type (CHAR_TYPE_SIZE));
5956   record_builtin_type (RID_CHAR, "char", char_type_node);
5957
5958   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5959   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
5960
5961   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5962   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
5963
5964   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5965   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
5966   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
5967
5968   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5969   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
5970
5971   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5972   record_builtin_type (RID_MAX, "long long unsigned int",
5973                        long_long_unsigned_type_node);
5974   record_builtin_type (RID_MAX, "long long unsigned",
5975                        long_long_unsigned_type_node);
5976
5977   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5978   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
5979   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5980   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
5981   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
5982
5983   /* `unsigned long' is the standard type for sizeof.
5984      Note that stddef.h uses `unsigned long',
5985      and this must agree, even if long and int are the same size.  */
5986   set_sizetype
5987     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
5988
5989   ptrdiff_type_node
5990     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
5991
5992   /* Define both `signed char' and `unsigned char'.  */
5993   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5994   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
5995   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5996   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
5997
5998   /* These are types that type_for_size and type_for_mode use.  */
5999   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
6000   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6001   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
6002   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6003   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
6004   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6005   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
6006   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6007 #if HOST_BITS_PER_WIDE_INT >= 64
6008   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
6009   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6010 #endif
6011   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
6012   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6013   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
6014   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6015   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
6016   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6017   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
6018   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6019 #if HOST_BITS_PER_WIDE_INT >= 64
6020   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
6021   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6022 #endif
6023
6024   float_type_node = make_node (REAL_TYPE);
6025   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
6026   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6027   layout_type (float_type_node);
6028
6029   double_type_node = make_node (REAL_TYPE);
6030   if (flag_short_double)
6031     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
6032   else
6033     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
6034   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6035   layout_type (double_type_node);
6036
6037   long_double_type_node = make_node (REAL_TYPE);
6038   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
6039   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6040   layout_type (long_double_type_node);
6041
6042   complex_integer_type_node = make_node (COMPLEX_TYPE);
6043   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6044                         complex_integer_type_node));
6045   TREE_TYPE (complex_integer_type_node) = integer_type_node;
6046   layout_type (complex_integer_type_node);
6047
6048   complex_float_type_node = make_node (COMPLEX_TYPE);
6049   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6050                         complex_float_type_node));
6051   TREE_TYPE (complex_float_type_node) = float_type_node;
6052   layout_type (complex_float_type_node);
6053
6054   complex_double_type_node = make_node (COMPLEX_TYPE);
6055   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6056                         complex_double_type_node));
6057   TREE_TYPE (complex_double_type_node) = double_type_node;
6058   layout_type (complex_double_type_node);
6059
6060   complex_long_double_type_node = make_node (COMPLEX_TYPE);
6061   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6062                         complex_long_double_type_node));
6063   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
6064   layout_type (complex_long_double_type_node);
6065
6066   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6067   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6068   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6069   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6070   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6071   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6072   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6073   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6074
6075   integer_zero_node = build_int_2 (0, 0);
6076   TREE_TYPE (integer_zero_node) = integer_type_node;
6077   integer_one_node = build_int_2 (1, 0);
6078   TREE_TYPE (integer_one_node) = integer_type_node;
6079   integer_two_node = build_int_2 (2, 0);
6080   TREE_TYPE (integer_two_node) = integer_type_node;
6081   integer_three_node = build_int_2 (3, 0);
6082   TREE_TYPE (integer_three_node) = integer_type_node;
6083
6084   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6085   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6086   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6087   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6088   TYPE_PRECISION (boolean_type_node) = 1;
6089   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6090   boolean_false_node = build_int_2 (0, 0);
6091   TREE_TYPE (boolean_false_node) = boolean_type_node;
6092   boolean_true_node = build_int_2 (1, 0);
6093   TREE_TYPE (boolean_true_node) = boolean_type_node;
6094
6095   /* These are needed by stor-layout.c.  */
6096   size_zero_node = size_int (0);
6097   size_one_node = size_int (1);
6098
6099   signed_size_zero_node = build_int_2 (0, 0);
6100   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6101
6102   void_type_node = make_node (VOID_TYPE);
6103   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6104   layout_type (void_type_node); /* Uses integer_zero_node.  */
6105   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6106   TREE_PARMLIST (void_list_node) = 1;
6107
6108   null_pointer_node = build_int_2 (0, 0);
6109   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
6110   layout_type (TREE_TYPE (null_pointer_node));
6111      
6112   /* Used for expressions that do nothing, but are not errors.  */
6113   void_zero_node = build_int_2 (0, 0);
6114   TREE_TYPE (void_zero_node) = void_type_node;
6115
6116   string_type_node = build_pointer_type (char_type_node);
6117   const_string_type_node
6118     = build_pointer_type (build_qualified_type (char_type_node, 
6119                                                 TYPE_QUAL_CONST));
6120 #if 0
6121   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6122 #endif
6123
6124   /* Make a type to be the domain of a few array types
6125      whose domains don't really matter.
6126      200 is small enough that it always fits in size_t
6127      and large enough that it can hold most function names for the
6128      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6129   array_domain_type = build_index_type (build_int_2 (200, 0));
6130
6131   /* Make a type for arrays of characters.
6132      With luck nothing will ever really depend on the length of this
6133      array type.  */
6134   char_array_type_node
6135     = build_array_type (char_type_node, array_domain_type);
6136   /* Likewise for arrays of ints.  */
6137   int_array_type_node
6138     = build_array_type (integer_type_node, array_domain_type);
6139
6140   /* This is just some anonymous class type.  Nobody should ever
6141      need to look inside this envelope.  */
6142   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6143
6144   default_function_type
6145     = build_function_type (integer_type_node, NULL_TREE);
6146
6147   ptr_type_node = build_pointer_type (void_type_node);
6148   const_ptr_type_node
6149     = build_pointer_type (build_qualified_type (void_type_node,
6150                                                 TYPE_QUAL_CONST)); 
6151 #if 0
6152   record_builtin_type (RID_MAX, NULL_PTR, ptr_type_node);
6153 #endif
6154   endlink = void_list_node;
6155   int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
6156   double_endlink = tree_cons (NULL_TREE, double_type_node, endlink);
6157   unsigned_endlink = tree_cons (NULL_TREE, unsigned_type_node, endlink);
6158
6159   ptr_ftype = build_function_type (ptr_type_node, NULL_TREE);
6160   ptr_ftype_unsigned = build_function_type (ptr_type_node, unsigned_endlink);
6161   sizetype_endlink = tree_cons (NULL_TREE, sizetype, endlink);
6162   /* We realloc here because sizetype could be int or unsigned.  S'ok.  */
6163   ptr_ftype_sizetype = build_function_type (ptr_type_node, sizetype_endlink);
6164
6165   void_ftype = build_function_type (void_type_node, endlink);
6166   void_ftype_int = build_function_type (void_type_node, int_endlink);
6167   void_ftype_ptr
6168     = build_function_type (void_type_node,
6169                            tree_cons (NULL_TREE, ptr_type_node, endlink));
6170   void_ftype_ptr
6171     = build_exception_variant (void_ftype_ptr,
6172                                tree_cons (NULL_TREE, NULL_TREE, NULL_TREE));
6173
6174   float_ftype_float
6175     = build_function_type (float_type_node,
6176                            tree_cons (NULL_TREE, float_type_node, endlink));
6177
6178   double_ftype_double
6179     = build_function_type (double_type_node, double_endlink);
6180
6181   ldouble_ftype_ldouble
6182     = build_function_type (long_double_type_node,
6183                            tree_cons (NULL_TREE, long_double_type_node,
6184                                       endlink));
6185
6186   double_ftype_double_double
6187     = build_function_type (double_type_node,
6188                            tree_cons (NULL_TREE, double_type_node,
6189                                       double_endlink));
6190
6191   int_ftype_int
6192     = build_function_type (integer_type_node, int_endlink);
6193
6194   long_ftype_long
6195     = build_function_type (long_integer_type_node,
6196                            tree_cons (NULL_TREE, long_integer_type_node,
6197                                       endlink));
6198
6199   int_ftype_cptr_cptr_sizet
6200     = build_function_type (integer_type_node,
6201                            tree_cons (NULL_TREE, const_ptr_type_node,
6202                                       tree_cons (NULL_TREE, const_ptr_type_node,
6203                                                  tree_cons (NULL_TREE,
6204                                                             sizetype,
6205                                                             endlink))));
6206
6207   string_ftype_ptr_ptr          /* strcpy prototype */
6208     = build_function_type (string_type_node,
6209                            tree_cons (NULL_TREE, string_type_node,
6210                                       tree_cons (NULL_TREE,
6211                                                  const_string_type_node,
6212                                                  endlink)));
6213
6214   int_ftype_string_string       /* strcmp prototype */
6215     = build_function_type (integer_type_node,
6216                            tree_cons (NULL_TREE, const_string_type_node,
6217                                       tree_cons (NULL_TREE,
6218                                                  const_string_type_node,
6219                                                  endlink)));
6220
6221   strlen_ftype          /* strlen prototype */
6222     = build_function_type (sizetype,
6223                            tree_cons (NULL_TREE, const_string_type_node,
6224                                       endlink));
6225
6226   memcpy_ftype  /* memcpy prototype */
6227     = build_function_type (ptr_type_node,
6228                            tree_cons (NULL_TREE, ptr_type_node,
6229                                       tree_cons (NULL_TREE, const_ptr_type_node,
6230                                                  sizetype_endlink)));
6231
6232   if (flag_huge_objects)
6233     delta_type_node = long_integer_type_node;
6234   else
6235     delta_type_node = short_integer_type_node;
6236
6237   builtin_function ("__builtin_constant_p", default_function_type,
6238                     BUILT_IN_CONSTANT_P, NULL_PTR);
6239
6240   builtin_return_address_fndecl
6241     = builtin_function ("__builtin_return_address", ptr_ftype_unsigned,
6242                         BUILT_IN_RETURN_ADDRESS, NULL_PTR);
6243
6244   builtin_function ("__builtin_frame_address", ptr_ftype_unsigned,
6245                     BUILT_IN_FRAME_ADDRESS, NULL_PTR);
6246
6247   builtin_function ("__builtin_alloca", ptr_ftype_sizetype,
6248                     BUILT_IN_ALLOCA, "alloca");
6249   builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6250   /* Define alloca, ffs as builtins.
6251      Declare _exit just to mark it as volatile.  */
6252   if (! flag_no_builtin && !flag_no_nonansi_builtin)
6253     {
6254       temp = builtin_function ("alloca", ptr_ftype_sizetype,
6255                                BUILT_IN_ALLOCA, NULL_PTR);
6256       /* Suppress error if redefined as a non-function.  */
6257       DECL_BUILT_IN_NONANSI (temp) = 1;
6258       temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
6259       /* Suppress error if redefined as a non-function.  */
6260       DECL_BUILT_IN_NONANSI (temp) = 1;
6261       temp = builtin_function ("_exit", void_ftype_int,
6262                                NOT_BUILT_IN, NULL_PTR);
6263       TREE_THIS_VOLATILE (temp) = 1;
6264       TREE_SIDE_EFFECTS (temp) = 1;
6265       /* Suppress error if redefined as a non-function.  */
6266       DECL_BUILT_IN_NONANSI (temp) = 1;
6267     }
6268
6269   builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6270   builtin_function ("__builtin_fabsf", float_ftype_float, BUILT_IN_FABS,
6271                     NULL_PTR);
6272   builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
6273                     NULL_PTR);
6274   builtin_function ("__builtin_fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6275                     NULL_PTR);
6276   builtin_function ("__builtin_labs", long_ftype_long,
6277                     BUILT_IN_LABS, NULL_PTR);
6278   builtin_function ("__builtin_saveregs", ptr_ftype,
6279                     BUILT_IN_SAVEREGS, NULL_PTR);
6280   builtin_function ("__builtin_classify_type", default_function_type,
6281                     BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
6282   builtin_function ("__builtin_next_arg", ptr_ftype,
6283                     BUILT_IN_NEXT_ARG, NULL_PTR);
6284   builtin_function ("__builtin_args_info", int_ftype_int,
6285                     BUILT_IN_ARGS_INFO, NULL_PTR);
6286   builtin_function ("__builtin_setjmp",
6287                     build_function_type (integer_type_node,
6288                                          tree_cons (NULL_TREE, ptr_type_node,
6289                                                     endlink)),
6290                     BUILT_IN_SETJMP, NULL_PTR);
6291   builtin_function ("__builtin_longjmp",
6292                     build_function_type (integer_type_node,
6293                                          tree_cons (NULL_TREE, ptr_type_node,
6294                                                     tree_cons (NULL_TREE,
6295                                                                integer_type_node,
6296                                                                endlink))),
6297                     BUILT_IN_LONGJMP, NULL_PTR);
6298
6299   /* Untyped call and return.  */
6300   builtin_function ("__builtin_apply_args", ptr_ftype,
6301                     BUILT_IN_APPLY_ARGS, NULL_PTR);
6302
6303   temp = tree_cons (NULL_TREE,
6304                     build_pointer_type (build_function_type (void_type_node,
6305                                                              NULL_TREE)),
6306                     tree_cons (NULL_TREE, ptr_ftype_sizetype, NULL_TREE));
6307   builtin_function ("__builtin_apply",
6308                     build_function_type (ptr_type_node, temp),
6309                     BUILT_IN_APPLY, NULL_PTR);
6310   builtin_function ("__builtin_return", void_ftype_ptr,
6311                     BUILT_IN_RETURN, NULL_PTR);
6312
6313   /* Currently under experimentation.  */
6314   builtin_function ("__builtin_memcpy", memcpy_ftype,
6315                     BUILT_IN_MEMCPY, "memcpy");
6316   builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
6317                     BUILT_IN_MEMCMP, "memcmp");
6318   builtin_function ("__builtin_strcmp", int_ftype_string_string,
6319                     BUILT_IN_STRCMP, "strcmp");
6320   builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
6321                     BUILT_IN_STRCPY, "strcpy");
6322   builtin_function ("__builtin_strlen", strlen_ftype,
6323                     BUILT_IN_STRLEN, "strlen");
6324   builtin_function ("__builtin_sqrtf", float_ftype_float, 
6325                     BUILT_IN_FSQRT, "sqrtf");
6326   builtin_function ("__builtin_fsqrt", double_ftype_double,
6327                     BUILT_IN_FSQRT, NULL_PTR);
6328   builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, 
6329                     BUILT_IN_FSQRT, "sqrtl");
6330   builtin_function ("__builtin_sinf", float_ftype_float, 
6331                     BUILT_IN_SIN, "sinf");
6332   builtin_function ("__builtin_sin", double_ftype_double, 
6333                     BUILT_IN_SIN, "sin");
6334   builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, 
6335                     BUILT_IN_SIN, "sinl");
6336   builtin_function ("__builtin_cosf", float_ftype_float, 
6337                     BUILT_IN_COS, "cosf");
6338   builtin_function ("__builtin_cos", double_ftype_double, 
6339                     BUILT_IN_COS, "cos");
6340   builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
6341                     BUILT_IN_COS, "cosl");
6342
6343   if (!flag_no_builtin)
6344     {
6345       builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
6346       builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
6347       builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
6348       builtin_function ("fabsf", float_ftype_float, BUILT_IN_FABS, NULL_PTR);
6349       builtin_function ("fabsl", ldouble_ftype_ldouble, BUILT_IN_FABS,
6350                         NULL_PTR);
6351       builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
6352       builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
6353                         NULL_PTR);
6354       builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
6355                         NULL_PTR);
6356       builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
6357                         NULL_PTR);
6358       builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
6359       builtin_function ("sqrtf", float_ftype_float, BUILT_IN_FSQRT, NULL_PTR);
6360       builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
6361       builtin_function ("sqrtl", ldouble_ftype_ldouble, BUILT_IN_FSQRT,
6362                         NULL_PTR);
6363       builtin_function ("sinf", float_ftype_float, BUILT_IN_SIN, NULL_PTR);
6364       builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
6365       builtin_function ("sinl", ldouble_ftype_ldouble, BUILT_IN_SIN, NULL_PTR);
6366       builtin_function ("cosf", float_ftype_float, BUILT_IN_COS, NULL_PTR);
6367       builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
6368       builtin_function ("cosl", ldouble_ftype_ldouble, BUILT_IN_COS, NULL_PTR);
6369
6370       /* Declare these functions volatile
6371          to avoid spurious "control drops through" warnings.  */
6372       temp = builtin_function ("abort", void_ftype,
6373                                NOT_BUILT_IN, NULL_PTR);
6374       TREE_THIS_VOLATILE (temp) = 1;
6375       TREE_SIDE_EFFECTS (temp) = 1;
6376       /* Well, these are actually ANSI, but we can't set DECL_BUILT_IN on
6377          them...  */
6378       DECL_BUILT_IN_NONANSI (temp) = 1;
6379       temp = builtin_function ("exit", void_ftype_int,
6380                                NOT_BUILT_IN, NULL_PTR);
6381       TREE_THIS_VOLATILE (temp) = 1;
6382       TREE_SIDE_EFFECTS (temp) = 1;
6383       DECL_BUILT_IN_NONANSI (temp) = 1;
6384     }
6385
6386 #if 0
6387   /* Support for these has not been written in either expand_builtin
6388      or build_function_call.  */
6389   builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
6390   builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
6391   builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
6392                     NULL_PTR);
6393   builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
6394                     NULL_PTR);
6395   builtin_function ("__builtin_fmod", double_ftype_double_double,
6396                     BUILT_IN_FMOD, NULL_PTR);
6397   builtin_function ("__builtin_frem", double_ftype_double_double,
6398                     BUILT_IN_FREM, NULL_PTR);
6399   builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
6400                     BUILT_IN_MEMSET, NULL_PTR);
6401   builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
6402                     NULL_PTR);
6403   builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
6404                     NULL_PTR);
6405 #endif
6406
6407   /* C++ extensions */
6408
6409   unknown_type_node = make_node (UNKNOWN_TYPE);
6410   record_unknown_type (unknown_type_node, "unknown type");
6411
6412   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6413   TREE_TYPE (unknown_type_node) = unknown_type_node;
6414
6415   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6416
6417   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6418      result.  */
6419   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6420   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6421
6422   /* This is for handling opaque types in signatures.  */
6423   opaque_type_node = copy_node (ptr_type_node);
6424   TYPE_MAIN_VARIANT (opaque_type_node) = opaque_type_node;
6425   record_builtin_type (RID_MAX, 0, opaque_type_node);
6426
6427   /* This is special for C++ so functions can be overloaded.  */
6428   wchar_type_node
6429     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6430   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6431   signed_wchar_type_node = make_signed_type (wchar_type_size);
6432   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6433   wchar_type_node
6434     = TREE_UNSIGNED (wchar_type_node)
6435       ? unsigned_wchar_type_node
6436       : signed_wchar_type_node;
6437   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6438
6439   /* Artificial declaration of wchar_t -- can be bashed */
6440   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6441                                 wchar_type_node);
6442   pushdecl (wchar_decl_node);
6443
6444   /* This is for wide string constants.  */
6445   wchar_array_type_node
6446     = build_array_type (wchar_type_node, array_domain_type);
6447
6448   if (flag_vtable_thunks)
6449     {
6450       /* Make sure we get a unique function type, so we can give
6451          its pointer type a name.  (This wins for gdb.) */
6452       tree vfunc_type = make_node (FUNCTION_TYPE);
6453       TREE_TYPE (vfunc_type) = integer_type_node;
6454       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6455       layout_type (vfunc_type);
6456
6457       vtable_entry_type = build_pointer_type (vfunc_type);
6458     }
6459   else
6460     {
6461       vtable_entry_type = make_lang_type (RECORD_TYPE);
6462       fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6463                                          delta_type_node);
6464       fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
6465                                          delta_type_node);
6466       fields[2] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6467                                          ptr_type_node);
6468       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6469                            double_type_node);
6470
6471       /* Make this part of an invisible union.  */
6472       fields[3] = copy_node (fields[2]);
6473       TREE_TYPE (fields[3]) = delta_type_node;
6474       DECL_NAME (fields[3]) = delta2_identifier;
6475       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6476       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6477       TREE_UNSIGNED (fields[3]) = 0;
6478       TREE_CHAIN (fields[2]) = fields[3];
6479       vtable_entry_type = build_qualified_type (vtable_entry_type,
6480                                                 TYPE_QUAL_CONST);
6481     }
6482   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6483
6484   vtbl_type_node
6485     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6486   layout_type (vtbl_type_node);
6487   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6488   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6489   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6490   layout_type (vtbl_ptr_type_node);
6491   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6492
6493   /* Simplify life by making a "sigtable_entry_type".  Give its
6494      fields names so that the debugger can use them.  */
6495
6496   if (flag_handle_signatures)
6497     {
6498       sigtable_entry_type = make_lang_type (RECORD_TYPE);
6499       fields[0] = build_lang_field_decl (FIELD_DECL, tag_identifier,
6500                                          delta_type_node);
6501       fields[1] = build_lang_field_decl (FIELD_DECL, vb_off_identifier,
6502                                          delta_type_node);
6503       fields[2] = build_lang_field_decl (FIELD_DECL, delta_identifier,
6504                                          delta_type_node);
6505       fields[3] = build_lang_field_decl (FIELD_DECL, index_identifier,
6506                                          delta_type_node);
6507       fields[4] = build_lang_field_decl (FIELD_DECL, pfn_identifier,
6508                                          ptr_type_node);
6509
6510       /* Set the alignment to the max of the alignment of ptr_type_node and
6511          delta_type_node.  Double alignment wastes a word on the Sparc.  */
6512       finish_builtin_type (sigtable_entry_type, SIGTABLE_PTR_TYPE, fields, 4,
6513                            (TYPE_ALIGN (ptr_type_node) > TYPE_ALIGN (delta_type_node))
6514                            ? ptr_type_node
6515                            : delta_type_node);
6516
6517       /* Make this part of an invisible union.  */
6518       fields[5] = copy_node (fields[4]);
6519       TREE_TYPE (fields[5]) = delta_type_node;
6520       DECL_NAME (fields[5]) = vt_off_identifier;
6521       DECL_MODE (fields[5]) = TYPE_MODE (delta_type_node);
6522       DECL_SIZE (fields[5]) = TYPE_SIZE (delta_type_node);
6523       TREE_UNSIGNED (fields[5]) = 0;
6524       TREE_CHAIN (fields[4]) = fields[5];
6525
6526       sigtable_entry_type = build_qualified_type (sigtable_entry_type, 
6527                                                   TYPE_QUAL_CONST);
6528       record_builtin_type (RID_MAX, SIGTABLE_PTR_TYPE, sigtable_entry_type);
6529     }
6530
6531   std_node = build_decl (NAMESPACE_DECL, 
6532                          get_identifier (flag_honor_std ? "fake std":"std"),
6533                          void_type_node);
6534   pushdecl (std_node);
6535
6536   global_type_node = make_node (LANG_TYPE);
6537   record_unknown_type (global_type_node, "global type");
6538
6539   /* Now, C++.  */
6540   current_lang_name = lang_name_cplusplus;
6541
6542   {
6543     tree bad_alloc_type_node, newtype, deltype;
6544     if (flag_honor_std)
6545       push_namespace (get_identifier ("std"));
6546     bad_alloc_type_node = xref_tag
6547       (class_type_node, get_identifier ("bad_alloc"), 1);
6548     if (flag_honor_std)
6549       pop_namespace ();
6550     newtype = build_exception_variant
6551       (ptr_ftype_sizetype, build_tree_list (NULL_TREE, bad_alloc_type_node));
6552     deltype = build_exception_variant
6553       (void_ftype_ptr, build_tree_list (NULL_TREE, NULL_TREE));
6554     auto_function (ansi_opname[(int) NEW_EXPR], newtype, NOT_BUILT_IN);
6555     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype, NOT_BUILT_IN);
6556     global_delete_fndecl
6557       = auto_function (ansi_opname[(int) DELETE_EXPR], deltype, NOT_BUILT_IN);
6558     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype, NOT_BUILT_IN);
6559   }
6560
6561   abort_fndecl
6562     = define_function ("__pure_virtual", void_ftype,
6563                        NOT_BUILT_IN, 0, 0);
6564
6565   /* Perform other language dependent initializations.  */
6566   init_class_processing ();
6567   init_init_processing ();
6568   init_search_processing ();
6569   if (flag_rtti)
6570     init_rtti_processing ();
6571
6572   if (flag_exceptions)
6573     init_exception_processing ();
6574   if (flag_no_inline)
6575     {
6576       flag_inline_functions = 0;
6577     }
6578
6579   if (! supports_one_only ())
6580     flag_weak = 0;
6581
6582   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6583   declare_function_name ();
6584
6585   /* Prepare to check format strings against argument lists.  */
6586   init_function_format_info ();
6587
6588   /* Show we use EH for cleanups.  */
6589   using_eh_for_cleanups ();
6590
6591   print_error_function = lang_print_error_function;
6592   lang_get_alias_set = &c_get_alias_set;
6593
6594   /* Maintain consistency.  Perhaps we should just complain if they
6595      say -fwritable-strings?  */
6596   if (flag_writable_strings)
6597     flag_const_strings = 0;
6598 }
6599
6600 /* Function to print any language-specific context for an error message.  */
6601
6602 static void
6603 lang_print_error_function (file)
6604      char *file;
6605 {
6606   default_print_error_function (file);
6607   maybe_print_template_context ();
6608 }
6609
6610 /* Make a definition for a builtin function named NAME and whose data type
6611    is TYPE.  TYPE should be a function type with argument types.
6612    FUNCTION_CODE tells later passes how to compile calls to this function.
6613    See tree.h for its possible values.
6614
6615    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6616    the name to be called if we can't opencode the function.  */
6617
6618 tree
6619 define_function (name, type, function_code, pfn, library_name)
6620      char *name;
6621      tree type;
6622      enum built_in_function function_code;
6623      void (*pfn) PROTO((tree));
6624      char *library_name;
6625 {
6626   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6627   DECL_EXTERNAL (decl) = 1;
6628   TREE_PUBLIC (decl) = 1;
6629   DECL_ARTIFICIAL (decl) = 1;
6630
6631   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6632   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6633
6634   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6635      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6636      function in the namespace.  */
6637   if (pfn) (*pfn) (decl);
6638   if (library_name)
6639     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6640   make_function_rtl (decl);
6641   if (function_code != NOT_BUILT_IN)
6642     {
6643       DECL_BUILT_IN (decl) = 1;
6644       DECL_FUNCTION_CODE (decl) = function_code;
6645     }
6646   return decl;
6647 }
6648 \f
6649 /* When we call finish_struct for an anonymous union, we create
6650    default copy constructors and such.  But, an anonymous union
6651    shouldn't have such things; this function undoes the damage to the
6652    anonymous union type T.
6653
6654    (The reason that we create the synthesized methods is that we don't
6655    distinguish `union { int i; }' from `typedef union { int i; } U'.
6656    The first is an anonymous union; the second is just an ordinary
6657    union type.)  */
6658
6659 void
6660 fixup_anonymous_union (t)
6661      tree t;
6662 {
6663   tree *q;
6664
6665   /* Wipe out memory of synthesized methods */
6666   TYPE_HAS_CONSTRUCTOR (t) = 0;
6667   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6668   TYPE_HAS_INIT_REF (t) = 0;
6669   TYPE_HAS_CONST_INIT_REF (t) = 0;
6670   TYPE_HAS_ASSIGN_REF (t) = 0;
6671   TYPE_HAS_ASSIGNMENT (t) = 0;
6672   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6673
6674   /* Splice the implicitly generated functions out of the TYPE_METHODS
6675      list.  */
6676   q = &TYPE_METHODS (t);
6677   while (*q)
6678     {
6679       if (DECL_ARTIFICIAL (*q))
6680         *q = TREE_CHAIN (*q);
6681       else
6682         q = &TREE_CHAIN (*q);
6683     }
6684
6685   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6686      function members.  */
6687   if (TYPE_METHODS (t))
6688     error ("an anonymous union cannot have function members");
6689 }
6690
6691 /* Make sure that a declaration with no declarator is well-formed, i.e.
6692    just defines a tagged type or anonymous union.
6693
6694    Returns the type defined, if any.  */
6695
6696 tree
6697 check_tag_decl (declspecs)
6698      tree declspecs;
6699 {
6700   int found_type = 0;
6701   tree ob_modifier = NULL_TREE;
6702   register tree link;
6703   register tree t = NULL_TREE;
6704
6705   for (link = declspecs; link; link = TREE_CHAIN (link))
6706     {
6707       register tree value = TREE_VALUE (link);
6708
6709       if (TYPE_P (value))
6710         {
6711           ++found_type;
6712
6713           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6714             {
6715               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6716               t = value;
6717             }
6718         }
6719       else if (value == ridpointers[(int) RID_FRIEND])
6720         {
6721           if (current_class_type == NULL_TREE
6722               || current_scope () != current_class_type)
6723             ob_modifier = value;
6724         }
6725       else if (value == ridpointers[(int) RID_STATIC]
6726                || value == ridpointers[(int) RID_EXTERN]
6727                || value == ridpointers[(int) RID_AUTO]
6728                || value == ridpointers[(int) RID_REGISTER]
6729                || value == ridpointers[(int) RID_INLINE]
6730                || value == ridpointers[(int) RID_VIRTUAL]
6731                || value == ridpointers[(int) RID_CONST]
6732                || value == ridpointers[(int) RID_VOLATILE]
6733                || value == ridpointers[(int) RID_EXPLICIT])
6734         ob_modifier = value;
6735     }
6736
6737   if (found_type > 1)
6738     error ("multiple types in one declaration");
6739
6740   /* Inside a class, we might be in a friend or access declaration.
6741      Until we have a good way of detecting the latter, don't warn.  */
6742   if (t == NULL_TREE && ! current_class_type)
6743     pedwarn ("declaration does not declare anything");
6744
6745   /* Check for an anonymous union.  We're careful
6746      accessing TYPE_IDENTIFIER because some built-in types, like
6747      pointer-to-member types, do not have TYPE_NAME.  */
6748   else if (t && TREE_CODE (t) == UNION_TYPE
6749            && TYPE_NAME (t)
6750            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6751     {
6752       /* Anonymous unions are objects, so they can have specifiers.  */;
6753       SET_ANON_UNION_TYPE_P (t);
6754     }
6755
6756   else if (ob_modifier)
6757     {
6758       if (ob_modifier == ridpointers[(int) RID_INLINE]
6759           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6760         cp_error ("`%D' can only be specified for functions", ob_modifier);
6761       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6762         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6763       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6764         cp_error ("`%D' can only be specified for constructors",
6765                   ob_modifier);
6766       else
6767         cp_error ("`%D' can only be specified for objects and functions",
6768                   ob_modifier);
6769     }
6770
6771   return t;
6772 }
6773
6774 /* Called when a declaration is seen that contains no names to declare.
6775    If its type is a reference to a structure, union or enum inherited
6776    from a containing scope, shadow that tag name for the current scope
6777    with a forward reference.
6778    If its type defines a new named structure or union
6779    or defines an enum, it is valid but we need not do anything here.
6780    Otherwise, it is an error.
6781
6782    C++: may have to grok the declspecs to learn about static,
6783    complain for anonymous unions.  */
6784
6785 void
6786 shadow_tag (declspecs)
6787      tree declspecs;
6788 {
6789   tree t = check_tag_decl (declspecs);
6790
6791   if (t)
6792     maybe_process_partial_specialization (t);
6793
6794   /* This is where the variables in an anonymous union are
6795      declared.  An anonymous union declaration looks like:
6796      union { ... } ;
6797      because there is no declarator after the union, the parser
6798      sends that declaration here.  */
6799   if (t && ANON_UNION_TYPE_P (t))
6800     {
6801       fixup_anonymous_union (t);
6802
6803       if (TYPE_FIELDS (t))
6804         {
6805           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6806                                       NULL_TREE);
6807           finish_anon_union (decl);
6808         }
6809     }
6810 }
6811 \f
6812 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6813
6814 tree
6815 groktypename (typename)
6816      tree typename;
6817 {
6818   if (TREE_CODE (typename) != TREE_LIST)
6819     return typename;
6820   return grokdeclarator (TREE_VALUE (typename),
6821                          TREE_PURPOSE (typename),
6822                          TYPENAME, 0, NULL_TREE);
6823 }
6824
6825 /* Decode a declarator in an ordinary declaration or data definition.
6826    This is called as soon as the type information and variable name
6827    have been parsed, before parsing the initializer if any.
6828    Here we create the ..._DECL node, fill in its type,
6829    and put it on the list of decls for the current context.
6830    The ..._DECL node is returned as the value.
6831
6832    Exception: for arrays where the length is not specified,
6833    the type is left null, to be filled in by `cp_finish_decl'.
6834
6835    Function definitions do not come here; they go to start_function
6836    instead.  However, external and forward declarations of functions
6837    do go through here.  Structure field declarations are done by
6838    grokfield and not through here.  */
6839
6840 /* Set this to zero to debug not using the temporary obstack
6841    to parse initializers.  */
6842 int debug_temp_inits = 1;
6843
6844 tree
6845 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6846      tree declarator, declspecs;
6847      int initialized;
6848      tree attributes, prefix_attributes;
6849 {
6850   register tree decl;
6851   register tree type, tem;
6852   tree context;
6853   extern int have_extern_spec;
6854   extern int used_extern_spec;
6855
6856 #if 0
6857   /* See code below that used this.  */
6858   int init_written = initialized;
6859 #endif
6860
6861   /* This should only be done once on the top most decl.  */
6862   if (have_extern_spec && !used_extern_spec)
6863     {
6864       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6865                                   declspecs);
6866       used_extern_spec = 1;
6867     }
6868
6869   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6870                          NULL_TREE);
6871   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6872     return NULL_TREE;
6873
6874   type = TREE_TYPE (decl);
6875
6876   /* Don't lose if destructors must be executed at file-level.  */
6877   if (! processing_template_decl && TREE_STATIC (decl)
6878       && TYPE_NEEDS_DESTRUCTOR (complete_type (type))
6879       && !TREE_PERMANENT (decl))
6880     {
6881       push_obstacks (&permanent_obstack, &permanent_obstack);
6882       decl = copy_node (decl);
6883       if (TREE_CODE (type) == ARRAY_TYPE)
6884         {
6885           tree itype = TYPE_DOMAIN (type);
6886           if (itype && ! TREE_PERMANENT (itype))
6887             {
6888               itype = build_index_type (copy_to_permanent (TYPE_MAX_VALUE (itype)));
6889               type = build_cplus_array_type (TREE_TYPE (type), itype);
6890               TREE_TYPE (decl) = type;
6891             }
6892         }
6893       pop_obstacks ();
6894     }
6895
6896   context
6897     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6898       ? DECL_CLASS_CONTEXT (decl)
6899       : DECL_CONTEXT (decl);
6900
6901   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6902       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6903     {
6904       /* When parsing the initializer, lookup should use the object's
6905          namespace. */
6906       push_decl_namespace (context);
6907     }
6908
6909   /* We are only interested in class contexts, later. */
6910   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6911     context = NULL_TREE;
6912
6913   if (initialized)
6914     /* Is it valid for this decl to have an initializer at all?
6915        If not, set INITIALIZED to zero, which will indirectly
6916        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6917     switch (TREE_CODE (decl))
6918       {
6919       case TYPE_DECL:
6920         /* typedef foo = bar  means give foo the same type as bar.
6921            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6922            Any other case of an initialization in a TYPE_DECL is an error.  */
6923         if (pedantic || list_length (declspecs) > 1)
6924           {
6925             cp_error ("typedef `%D' is initialized", decl);
6926             initialized = 0;
6927           }
6928         break;
6929
6930       case FUNCTION_DECL:
6931         cp_error ("function `%#D' is initialized like a variable", decl);
6932         initialized = 0;
6933         break;
6934
6935       default:
6936         if (! processing_template_decl)
6937           {
6938             if (type != error_mark_node)
6939               {
6940                 if (TYPE_SIZE (type) != NULL_TREE
6941                     && ! TREE_CONSTANT (TYPE_SIZE (type)))
6942                   {
6943                     cp_error
6944                       ("variable-sized object `%D' may not be initialized",
6945                        decl);
6946                     initialized = 0;
6947                   }
6948
6949                 if (TREE_CODE (type) == ARRAY_TYPE
6950                     && TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6951                   {
6952                     cp_error
6953                       ("elements of array `%#D' have incomplete type", decl);
6954                     initialized = 0;
6955                   }
6956               }
6957           }
6958       }
6959
6960   if (initialized)
6961     {
6962       if (! toplevel_bindings_p ()
6963           && DECL_EXTERNAL (decl))
6964         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6965                     decl);
6966       DECL_EXTERNAL (decl) = 0;
6967       if (toplevel_bindings_p ())
6968         TREE_STATIC (decl) = 1;
6969
6970       /* Tell `pushdecl' this is an initialized decl
6971          even though we don't yet have the initializer expression.
6972          Also tell `cp_finish_decl' it may store the real initializer.  */
6973       DECL_INITIAL (decl) = error_mark_node;
6974     }
6975
6976   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6977     {
6978       pushclass (context, 2);
6979
6980       if (TREE_CODE (decl) == VAR_DECL)
6981         {
6982           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6983           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6984             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6985           else
6986             {
6987               if (DECL_CONTEXT (field) != context)
6988                 {
6989                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6990                               DECL_CONTEXT (field), DECL_NAME (decl),
6991                               context, DECL_NAME (decl));
6992                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6993                 }
6994               /* Static data member are tricky; an in-class initialization
6995                  still doesn't provide a definition, so the in-class
6996                  declaration will have DECL_EXTERNAL set, but will have an
6997                  initialization.  Thus, duplicate_decls won't warn
6998                  about this situation, and so we check here.  */
6999               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7000                 cp_error ("duplicate initialization of %D", decl);
7001               if (duplicate_decls (decl, field))
7002                 decl = field;
7003             }
7004         }
7005       else
7006         {
7007           tree field = check_classfn (context, decl);
7008           if (field && duplicate_decls (decl, field))
7009             decl = field;
7010         }
7011
7012       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7013       DECL_IN_AGGR_P (decl) = 0;
7014       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
7015           || CLASSTYPE_USE_TEMPLATE (context))
7016         {
7017           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7018           /* [temp.expl.spec] An explicit specialization of a static data
7019              member of a template is a definition if the declaration
7020              includes an initializer; otherwise, it is a declaration.
7021
7022              We check for processing_specialization so this only applies
7023              to the new specialization syntax.  */
7024           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7025             DECL_EXTERNAL (decl) = 1;
7026         }
7027
7028       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7029         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7030                     decl);
7031     }
7032
7033 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7034   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7035 #endif
7036   
7037   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7038   cplus_decl_attributes (decl, attributes, prefix_attributes);
7039
7040   /* Add this decl to the current binding level, but not if it
7041      comes from another scope, e.g. a static member variable.
7042      TEM may equal DECL or it may be a previous decl of the same name.  */
7043   
7044   if ((TREE_CODE (decl) != PARM_DECL && DECL_CONTEXT (decl) != NULL_TREE 
7045        /* Definitions of namespace members outside their namespace are
7046           possible. */
7047        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
7048       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
7049       || TREE_CODE (type) == LANG_TYPE
7050       /* The declaration of template specializations does not affect
7051          the functions available for overload resolution, so we do not
7052          call pushdecl.  */
7053       || (TREE_CODE (decl) == FUNCTION_DECL
7054           && DECL_TEMPLATE_SPECIALIZATION (decl)))
7055     tem = decl;
7056   else
7057     tem = pushdecl (decl);
7058
7059   if (processing_template_decl)
7060     {
7061       if (! current_function_decl)
7062         tem = push_template_decl (tem);
7063       else if (minimal_parse_mode)
7064         DECL_VINDEX (tem)
7065             = build_min_nt (DECL_STMT, copy_to_permanent (declarator),
7066                             copy_to_permanent (declspecs),
7067                             NULL_TREE);
7068     }
7069
7070
7071 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7072   /* Tell the back-end to use or not use .common as appropriate.  If we say
7073      -fconserve-space, we want this to save .data space, at the expense of
7074      wrong semantics.  If we say -fno-conserve-space, we want this to
7075      produce errors about redefs; to do this we force variables into the
7076      data segment.  */
7077   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7078 #endif
7079   
7080   if (! processing_template_decl)
7081     start_decl_1 (tem);
7082
7083   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
7084   push_obstacks_nochange ();
7085
7086 #if 0
7087   /* We have no way of knowing whether the initializer will need to be
7088      evaluated at run-time or not until we've parsed it, so let's just put
7089      it in the permanent obstack.  (jason) */
7090   if (init_written
7091       && ! (TREE_CODE (tem) == PARM_DECL
7092             || (TREE_READONLY (tem)
7093                 && (TREE_CODE (tem) == VAR_DECL
7094                     || TREE_CODE (tem) == FIELD_DECL))))
7095     {
7096       /* When parsing and digesting the initializer,
7097          use temporary storage.  Do this even if we will ignore the value.  */
7098       if (toplevel_bindings_p () && debug_temp_inits)
7099         {
7100           if (processing_template_decl
7101               || TYPE_NEEDS_CONSTRUCTING (type)
7102               || TREE_CODE (type) == REFERENCE_TYPE)
7103             /* In this case, the initializer must lay down in permanent
7104                storage, since it will be saved until `finish_file' is run.   */
7105             ;
7106           else
7107             temporary_allocation ();
7108         }
7109     }
7110 #endif
7111
7112   return tem;
7113 }
7114
7115 void
7116 start_decl_1 (decl)
7117      tree decl;
7118 {
7119   tree type = TREE_TYPE (decl);
7120   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7121
7122   /* If this type of object needs a cleanup, and control may
7123      jump past it, make a new binding level so that it is cleaned
7124      up only when it is initialized first.  */
7125   if (TYPE_NEEDS_DESTRUCTOR (type)
7126       && current_binding_level->more_cleanups_ok == 0)
7127     pushlevel_temporary (1);
7128
7129   if (initialized)
7130     /* Is it valid for this decl to have an initializer at all?
7131        If not, set INITIALIZED to zero, which will indirectly
7132        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7133     {
7134       /* Don't allow initializations for incomplete types except for
7135          arrays which might be completed by the initialization.  */
7136       if (type == error_mark_node)
7137         ;                       /* Don't complain again.  */
7138       else if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
7139         ;                       /* A complete type is ok.  */
7140       else if (TREE_CODE (type) != ARRAY_TYPE)
7141         {
7142           cp_error ("variable `%#D' has initializer but incomplete type",
7143                     decl);
7144           initialized = 0;
7145           type = TREE_TYPE (decl) = error_mark_node;
7146         }
7147       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
7148         {
7149           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7150             cp_error ("elements of array `%#D' have incomplete type", decl);
7151           /* else we already gave an error in start_decl.  */
7152           initialized = 0;
7153         }
7154     }
7155
7156   if (!initialized
7157       && TREE_CODE (decl) != TYPE_DECL
7158       && TREE_CODE (decl) != TEMPLATE_DECL
7159       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
7160     {
7161       if ((! processing_template_decl || ! uses_template_parms (type))
7162           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
7163         {
7164           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7165                  decl);
7166           /* Change the type so that assemble_variable will give
7167              DECL an rtl we can live with: (mem (const_int 0)).  */
7168           type = TREE_TYPE (decl) = error_mark_node;
7169         }
7170       else
7171         {
7172           /* If any base type in the hierarchy of TYPE needs a constructor,
7173              then we set initialized to 1.  This way any nodes which are
7174              created for the purposes of initializing this aggregate
7175              will live as long as it does.  This is necessary for global
7176              aggregates which do not have their initializers processed until
7177              the end of the file.  */
7178           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7179         }
7180     }
7181
7182 #if 0
7183   /* We don't do this yet for GNU C++.  */
7184   /* For a local variable, define the RTL now.  */
7185   if (! toplevel_bindings_p ()
7186       /* But not if this is a duplicate decl
7187          and we preserved the rtl from the previous one
7188          (which may or may not happen).  */
7189       && DECL_RTL (tem) == NULL_RTX)
7190     {
7191       if (TYPE_SIZE (TREE_TYPE (tem)) != NULL_TREE)
7192         expand_decl (tem);
7193       else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
7194                && DECL_INITIAL (tem) != NULL_TREE)
7195         expand_decl (tem);
7196     }
7197 #endif
7198
7199   if (! initialized)
7200     DECL_INITIAL (decl) = NULL_TREE;
7201 }
7202
7203 /* Handle initialization of references.
7204    These three arguments are from `cp_finish_decl', and have the
7205    same meaning here that they do there.
7206
7207    Quotes on semantics can be found in ARM 8.4.3.  */
7208
7209 static void
7210 grok_reference_init (decl, type, init)
7211      tree decl, type, init;
7212 {
7213   tree tmp;
7214
7215   if (init == NULL_TREE)
7216     {
7217       if ((DECL_LANG_SPECIFIC (decl) == 0
7218            || DECL_IN_AGGR_P (decl) == 0)
7219           && ! DECL_THIS_EXTERN (decl))
7220         {
7221           cp_error ("`%D' declared as reference but not initialized", decl);
7222           if (TREE_CODE (decl) == VAR_DECL)
7223             SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7224         }
7225       return;
7226     }
7227
7228   if (init == error_mark_node)
7229     return;
7230
7231   if (TREE_CODE (type) == REFERENCE_TYPE
7232       && TREE_CODE (init) == CONSTRUCTOR)
7233     {
7234       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
7235       return;
7236     }
7237
7238   if (TREE_CODE (init) == TREE_LIST)
7239     init = build_compound_expr (init);
7240
7241   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7242     init = convert_from_reference (init);
7243
7244   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7245       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7246     {
7247       /* Note: default conversion is only called in very special cases.  */
7248       init = default_conversion (init);
7249     }
7250
7251   tmp = convert_to_reference
7252     (type, init, CONV_IMPLICIT,
7253      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7254
7255   if (tmp == error_mark_node)
7256     goto fail;
7257   else if (tmp != NULL_TREE)
7258     {
7259       init = tmp;
7260       DECL_INITIAL (decl) = save_expr (init);
7261     }
7262   else
7263     {
7264       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7265       goto fail;
7266     }
7267
7268   /* ?? Can this be optimized in some cases to
7269      hand back the DECL_INITIAL slot??  */
7270   if (TYPE_SIZE (TREE_TYPE (type)))
7271     {
7272       init = convert_from_reference (decl);
7273       if (TREE_PERMANENT (decl))
7274         init = copy_to_permanent (init);
7275       SET_DECL_REFERENCE_SLOT (decl, init);
7276     }
7277
7278   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7279     {
7280       expand_static_init (decl, DECL_INITIAL (decl));
7281       DECL_INITIAL (decl) = NULL_TREE;
7282     }
7283   return;
7284
7285  fail:
7286   if (TREE_CODE (decl) == VAR_DECL)
7287     SET_DECL_REFERENCE_SLOT (decl, error_mark_node);
7288   return;
7289 }
7290
7291 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7292    mucking with forces it does not comprehend (i.e. initialization with a
7293    constructor).  If we are at global scope and won't go into COMMON, fill
7294    it in with a dummy CONSTRUCTOR to force the variable into .data;
7295    otherwise we can use error_mark_node.  */
7296
7297 static tree
7298 obscure_complex_init (decl, init)
7299      tree decl, init;
7300 {
7301   if (! flag_no_inline && TREE_STATIC (decl))
7302     {
7303       if (extract_init (decl, init))
7304         return NULL_TREE;
7305     }
7306
7307 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7308   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7309     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7310                                  NULL_TREE);
7311   else
7312 #endif
7313     DECL_INITIAL (decl) = error_mark_node;
7314
7315   return init;
7316 }
7317
7318 /* Issue an error message if DECL is an uninitialized const variable.  */
7319
7320 static void
7321 check_for_uninitialized_const_var (decl)
7322      tree decl;
7323 {
7324   tree type = TREE_TYPE (decl);
7325
7326   /* ``Unless explicitly declared extern, a const object does not have
7327      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7328      7.1.6 */
7329   if (TREE_CODE (decl) == VAR_DECL
7330       && TREE_CODE (type) != REFERENCE_TYPE
7331       && CP_TYPE_CONST_P (type)
7332       && !TYPE_NEEDS_CONSTRUCTING (type)
7333       && !DECL_INITIAL (decl))
7334     cp_error ("uninitialized const `%D'", decl);
7335 }
7336
7337 /* Finish processing of a declaration;
7338    install its line number and initial value.
7339    If the length of an array type is not known before,
7340    it must be determined now, from the initial value, or it is an error.
7341
7342    Call `pop_obstacks' iff NEED_POP is nonzero.
7343
7344    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7345    for aggregates that have constructors alive on the permanent obstack,
7346    so that the global initializing functions can be written at the end.
7347
7348    INIT0 holds the value of an initializer that should be allowed to escape
7349    the normal rules.
7350
7351    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7352    if the (init) syntax was used.
7353
7354    For functions that take default parameters, DECL points to its
7355    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7356    subsequently lower and lower forms of instantiation, checking for
7357    ambiguity as it goes.  This can be sped up later.  */
7358
7359 void
7360 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7361      tree decl, init;
7362      tree asmspec_tree;
7363      int need_pop;
7364      int flags;
7365 {
7366   register tree type;
7367   tree cleanup = NULL_TREE, ttype = NULL_TREE;
7368   int was_incomplete;
7369   int temporary = allocation_temporary_p ();
7370   char *asmspec = NULL;
7371   int was_readonly = 0;
7372   int already_used = 0;
7373
7374   /* If this is 0, then we did not change obstacks.  */
7375   if (! decl)
7376     {
7377       if (init)
7378         error ("assignment (not initialization) in declaration");
7379       return;
7380     }
7381
7382   /* If a name was specified, get the string.  */
7383   if (asmspec_tree)
7384       asmspec = TREE_STRING_POINTER (asmspec_tree);
7385
7386   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7387     {
7388       cp_error ("Cannot initialize `%D' to namespace `%D'",
7389                 decl, init);
7390       init = NULL_TREE;
7391     }
7392
7393   if (current_class_type
7394       && DECL_REAL_CONTEXT (decl) == current_class_type
7395       && TYPE_BEING_DEFINED (current_class_type)
7396       && (DECL_INITIAL (decl) || init))
7397     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7398
7399   if (TREE_CODE (decl) == VAR_DECL 
7400       && DECL_CONTEXT (decl)
7401       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7402       && DECL_CONTEXT (decl) != current_namespace
7403       && init)
7404     {
7405       /* Leave the namespace of the object. */
7406       pop_decl_namespace ();
7407     }
7408
7409   /* If the type of the thing we are declaring either has
7410      a constructor, or has a virtual function table pointer,
7411      AND its initialization was accepted by `start_decl',
7412      then we stayed on the permanent obstack through the
7413      declaration, otherwise, changed obstacks as GCC would.  */
7414
7415   type = TREE_TYPE (decl);
7416
7417   if (type == error_mark_node)
7418     {
7419       if (toplevel_bindings_p () && temporary)
7420         end_temporary_allocation ();
7421
7422       return;
7423     }
7424
7425   if (TYPE_HAS_MUTABLE_P (type))
7426     TREE_READONLY (decl) = 0;
7427   
7428   if (processing_template_decl)
7429     {
7430       if (init && DECL_INITIAL (decl))
7431         DECL_INITIAL (decl) = init;
7432       if (minimal_parse_mode && ! DECL_ARTIFICIAL (decl))
7433         {
7434           tree stmt = DECL_VINDEX (decl);
7435           /* If the decl is declaring a member of a local class (in a
7436              template function), the DECL_VINDEX will either be NULL,
7437              or it will be an actual virtual function index, not a
7438              DECL_STMT.  */
7439           if (stmt != NULL_TREE && TREE_CODE (stmt) == DECL_STMT)
7440             {
7441               DECL_VINDEX (decl) = NULL_TREE;
7442               TREE_OPERAND (stmt, 2) = copy_to_permanent (init);
7443               add_tree (stmt);
7444             }
7445         }
7446
7447       goto finish_end0;
7448     }
7449   /* Take care of TYPE_DECLs up front.  */
7450   if (TREE_CODE (decl) == TYPE_DECL)
7451     {
7452       if (init && DECL_INITIAL (decl))
7453         {
7454           /* typedef foo = bar; store the type of bar as the type of foo.  */
7455           TREE_TYPE (decl) = type = TREE_TYPE (init);
7456           DECL_INITIAL (decl) = init = NULL_TREE;
7457         }
7458       if (type != error_mark_node
7459           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7460         {
7461           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7462             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7463           set_identifier_type_value (DECL_NAME (decl), type);
7464           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7465         }
7466       GNU_xref_decl (current_function_decl, decl);
7467
7468       /* If we have installed this as the canonical typedef for this
7469          type, and that type has not been defined yet, delay emitting
7470          the debug information for it, as we will emit it later.  */
7471       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7472           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7473         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7474
7475       rest_of_decl_compilation (decl, NULL_PTR,
7476                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7477       goto finish_end;
7478     }
7479   if (TREE_CODE (decl) != FUNCTION_DECL)
7480     {
7481       ttype = target_type (type);
7482     }
7483
7484   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7485       && TYPE_NEEDS_CONSTRUCTING (type))
7486     {
7487
7488       /* Currently, GNU C++ puts constants in text space, making them
7489          impossible to initialize.  In the future, one would hope for
7490          an operating system which understood the difference between
7491          initialization and the running of a program.  */
7492       was_readonly = 1;
7493       TREE_READONLY (decl) = 0;
7494     }
7495
7496   if (TREE_CODE (decl) == FIELD_DECL)
7497     {
7498       if (init && init != error_mark_node)
7499         my_friendly_assert (TREE_PERMANENT (init), 147);
7500
7501       if (asmspec)
7502         {
7503           /* This must override the asm specifier which was placed
7504              by grokclassfn.  Lay this out fresh.  */
7505           DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7506           DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7507           make_decl_rtl (decl, asmspec, 0);
7508         }
7509     }
7510   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7511   else if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7512     init = NULL_TREE;
7513   else if (DECL_EXTERNAL (decl))
7514     ;
7515   else if (TREE_CODE (type) == REFERENCE_TYPE
7516            || (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE_REFERENCE (type)))
7517     {
7518       if (TREE_STATIC (decl))
7519         make_decl_rtl (decl, NULL_PTR,
7520                        toplevel_bindings_p ()
7521                        || pseudo_global_level_p ());
7522       grok_reference_init (decl, type, init);
7523       init = NULL_TREE;
7524     }
7525
7526   GNU_xref_decl (current_function_decl, decl);
7527
7528   if (TREE_CODE (decl) == FIELD_DECL)
7529     ;
7530   else if (TREE_CODE (decl) == CONST_DECL)
7531     {
7532       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7533
7534       DECL_INITIAL (decl) = init;
7535
7536       /* This will keep us from needing to worry about our obstacks.  */
7537       my_friendly_assert (init != NULL_TREE, 149);
7538       init = NULL_TREE;
7539     }
7540   else if (init)
7541     {
7542       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7543         {
7544           if (TREE_CODE (type) == ARRAY_TYPE)
7545             init = digest_init (type, init, (tree *) 0);
7546           else if (TREE_CODE (init) == CONSTRUCTOR
7547                    && TREE_HAS_CONSTRUCTOR (init))
7548             {
7549               if (TYPE_NON_AGGREGATE_CLASS (type))
7550                 {
7551                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7552                             decl);
7553                   init = error_mark_node;
7554                 }
7555               else
7556                 goto dont_use_constructor;
7557             }
7558         }
7559       else
7560         {
7561         dont_use_constructor:
7562           if (TREE_CODE (init) != TREE_VEC)
7563             init = store_init_value (decl, init);
7564         }
7565
7566       if (init)
7567         /* We must hide the initializer so that expand_decl
7568            won't try to do something it does not understand.  */
7569         init = obscure_complex_init (decl, init);
7570     }
7571   else if (DECL_EXTERNAL (decl))
7572     ;
7573   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7574            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7575     {
7576       tree ctype = type;
7577       while (TREE_CODE (ctype) == ARRAY_TYPE)
7578         ctype = TREE_TYPE (ctype);
7579       if (! TYPE_NEEDS_CONSTRUCTING (ctype))
7580         {
7581           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (ctype))
7582             cp_error ("structure `%D' with uninitialized const members", decl);
7583           if (CLASSTYPE_REF_FIELDS_NEED_INIT (ctype))
7584             cp_error ("structure `%D' with uninitialized reference members",
7585                       decl);
7586         }
7587
7588       check_for_uninitialized_const_var (decl);
7589
7590       if (TYPE_SIZE (type) != NULL_TREE
7591           && TYPE_NEEDS_CONSTRUCTING (type))
7592         init = obscure_complex_init (decl, NULL_TREE);
7593
7594     }
7595   else
7596     check_for_uninitialized_const_var (decl);
7597   
7598   /* For top-level declaration, the initial value was read in
7599      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7600      must go in the permanent obstack; but don't discard the
7601      temporary data yet.  */
7602
7603   if (toplevel_bindings_p () && temporary)
7604     end_temporary_allocation ();
7605
7606   /* Deduce size of array from initialization, if not already known.  */
7607
7608   if (TREE_CODE (type) == ARRAY_TYPE
7609       && TYPE_DOMAIN (type) == NULL_TREE
7610       && TREE_CODE (decl) != TYPE_DECL)
7611     {
7612       int do_default
7613         = (TREE_STATIC (decl)
7614            /* Even if pedantic, an external linkage array
7615               may have incomplete type at first.  */
7616            ? pedantic && ! DECL_EXTERNAL (decl)
7617            : !DECL_EXTERNAL (decl));
7618       tree initializer = init ? init : DECL_INITIAL (decl);
7619       int failure = complete_array_type (type, initializer, do_default);
7620
7621       if (failure == 1)
7622         cp_error ("initializer fails to determine size of `%D'", decl);
7623
7624       if (failure == 2)
7625         {
7626           if (do_default)
7627             cp_error ("array size missing in `%D'", decl);
7628           /* If a `static' var's size isn't known, make it extern as
7629              well as static, so it does not get allocated.  If it's not
7630              `static', then don't mark it extern; finish_incomplete_decl
7631              will give it a default size and it will get allocated.  */
7632           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7633             DECL_EXTERNAL (decl) = 1;
7634         }
7635
7636       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7637           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7638                               integer_zero_node))
7639         cp_error ("zero-size array `%D'", decl);
7640
7641       layout_decl (decl, 0);
7642     }
7643
7644   if (TREE_CODE (decl) == VAR_DECL)
7645     {
7646       if (DECL_SIZE (decl) == NULL_TREE
7647           && TYPE_SIZE (complete_type (TREE_TYPE (decl))) != NULL_TREE)
7648         layout_decl (decl, 0);
7649
7650       if (TREE_STATIC (decl) && DECL_SIZE (decl) == NULL_TREE)
7651         {
7652           /* A static variable with an incomplete type:
7653              that is an error if it is initialized.
7654              Otherwise, let it through, but if it is not `extern'
7655              then it may cause an error message later.  */
7656           if (DECL_INITIAL (decl) != NULL_TREE)
7657             cp_error ("storage size of `%D' isn't known", decl);
7658           init = NULL_TREE;
7659         }
7660       else if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7661         {
7662           /* An automatic variable with an incomplete type: that is an error.
7663              Don't talk about array types here, since we took care of that
7664              message in grokdeclarator.  */
7665           cp_error ("storage size of `%D' isn't known", decl);
7666           TREE_TYPE (decl) = error_mark_node;
7667         }
7668       else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7669         /* Let debugger know it should output info for this type.  */
7670         note_debug_info_needed (ttype);
7671
7672       if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7673         note_debug_info_needed (DECL_CONTEXT (decl));
7674
7675       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7676           && DECL_SIZE (decl) != NULL_TREE
7677           && ! TREE_CONSTANT (DECL_SIZE (decl)))
7678         {
7679           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7680             constant_expression_warning (DECL_SIZE (decl));
7681           else
7682             cp_error ("storage size of `%D' isn't constant", decl);
7683         }
7684
7685       if (! DECL_EXTERNAL (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7686           /* Cleanups for static variables are handled by `finish_file'.  */
7687           && ! TREE_STATIC (decl))
7688         {
7689           int yes = suspend_momentary ();
7690           cleanup = maybe_build_cleanup (decl);
7691           resume_momentary (yes);
7692         }
7693     }
7694   /* PARM_DECLs get cleanups, too.  */
7695   else if (TREE_CODE (decl) == PARM_DECL && TYPE_NEEDS_DESTRUCTOR (type))
7696     {
7697       if (temporary)
7698         end_temporary_allocation ();
7699       cleanup = maybe_build_cleanup (decl);
7700       if (temporary)
7701         resume_temporary_allocation ();
7702     }
7703
7704   /* Output the assembler code and/or RTL code for variables and functions,
7705      unless the type is an undefined structure or union.
7706      If not, it will get done when the type is completed.  */
7707
7708   was_incomplete = (DECL_SIZE (decl) == NULL_TREE);
7709
7710   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7711       || TREE_CODE (decl) == RESULT_DECL)
7712     {
7713       /* ??? FIXME: What about nested classes?  */
7714       int toplev = toplevel_bindings_p () || pseudo_global_level_p ();
7715       int was_temp
7716         = (TREE_STATIC (decl) && TYPE_NEEDS_DESTRUCTOR (type)
7717            && allocation_temporary_p ());
7718
7719       if (was_temp)
7720         end_temporary_allocation ();
7721
7722       /* Static data in a function with comdat linkage also has comdat
7723          linkage.  */
7724       if (TREE_CODE (decl) == VAR_DECL
7725           && TREE_STATIC (decl)
7726           /* Don't mess with __FUNCTION__.  */
7727           && ! TREE_ASM_WRITTEN (decl)
7728           && current_function_decl
7729           && DECL_CONTEXT (decl) == current_function_decl
7730           && (DECL_THIS_INLINE (current_function_decl)
7731               || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7732           && TREE_PUBLIC (current_function_decl))
7733         {
7734           /* Rather than try to get this right with inlining, we suppress
7735              inlining of such functions.  */
7736           current_function_cannot_inline
7737             = "function with static variable cannot be inline";
7738
7739           /* If flag_weak, we don't need to mess with this, as we can just
7740              make the function weak, and let it refer to its unique local
7741              copy.  This works because we don't allow the function to be
7742              inlined.  */
7743           if (! flag_weak)
7744             {
7745               if (DECL_INTERFACE_KNOWN (current_function_decl))
7746                 {
7747                   TREE_PUBLIC (decl) = 1;
7748                   DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7749                 }
7750               else if (DECL_INITIAL (decl) == NULL_TREE
7751                        || DECL_INITIAL (decl) == error_mark_node)
7752                 {
7753                   TREE_PUBLIC (decl) = 1;
7754                   DECL_COMMON (decl) = 1;
7755                 }
7756               /* else we lose. We can only do this if we can use common,
7757                  which we can't if it has been initialized.  */
7758
7759               if (TREE_PUBLIC (decl))
7760                 DECL_ASSEMBLER_NAME (decl)
7761                   = build_static_name (current_function_decl, DECL_NAME (decl));
7762               else if (! DECL_ARTIFICIAL (decl))
7763                 {
7764                   cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7765                   cp_warning_at ("  you can work around this by removing the initializer"), decl;
7766                 }
7767             }
7768         }
7769
7770       else if (TREE_CODE (decl) == VAR_DECL
7771                && DECL_LANG_SPECIFIC (decl)
7772                && DECL_COMDAT (decl))
7773         {
7774           /* Dynamically initialized vars go into common.  */
7775           if (DECL_INITIAL (decl) == NULL_TREE
7776               || DECL_INITIAL (decl) == error_mark_node)
7777             DECL_COMMON (decl) = 1;
7778           else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7779             {
7780               DECL_COMMON (decl) = 1;
7781               DECL_INITIAL (decl) = error_mark_node;
7782             }
7783           else
7784             {
7785               /* Statically initialized vars are weak or comdat, if
7786                  supported.  */
7787               if (flag_weak)
7788                 make_decl_one_only (decl);
7789               else
7790                 {
7791                   /* We can't do anything useful; leave vars for explicit
7792                      instantiation.  */
7793                   DECL_EXTERNAL (decl) = 1;
7794                   DECL_NOT_REALLY_EXTERN (decl) = 0;
7795                 }
7796             }
7797         }
7798
7799       if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7800         make_decl_rtl (decl, NULL_PTR, toplev);
7801       else if (TREE_CODE (decl) == VAR_DECL
7802                && TREE_READONLY (decl)
7803                && DECL_INITIAL (decl) != NULL_TREE
7804                && DECL_INITIAL (decl) != error_mark_node
7805                && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7806         {
7807           DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7808
7809           if (asmspec)
7810             DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7811
7812           if (! toplev
7813               && TREE_STATIC (decl)
7814               && ! TREE_SIDE_EFFECTS (decl)
7815               && ! TREE_PUBLIC (decl)
7816               && ! DECL_EXTERNAL (decl)
7817               && ! TYPE_NEEDS_DESTRUCTOR (type)
7818               && DECL_MODE (decl) != BLKmode)
7819             {
7820               /* If this variable is really a constant, then fill its DECL_RTL
7821                  slot with something which won't take up storage.
7822                  If something later should take its address, we can always give
7823                  it legitimate RTL at that time.  */
7824               DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7825               store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7826               TREE_ASM_WRITTEN (decl) = 1;
7827             }
7828           else if (toplev && ! TREE_PUBLIC (decl))
7829             {
7830               /* If this is a static const, change its apparent linkage
7831                  if it belongs to a #pragma interface.  */
7832               if (!interface_unknown)
7833                 {
7834                   TREE_PUBLIC (decl) = 1;
7835                   DECL_EXTERNAL (decl) = interface_only;
7836                 }
7837               make_decl_rtl (decl, asmspec, toplev);
7838             }
7839           else
7840             rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7841         }
7842       else if (TREE_CODE (decl) == VAR_DECL
7843                && DECL_LANG_SPECIFIC (decl)
7844                && DECL_IN_AGGR_P (decl))
7845         {
7846           if (TREE_STATIC (decl))
7847             {
7848               if (init == NULL_TREE
7849 #ifdef DEFAULT_STATIC_DEFS
7850                   /* If this code is dead, then users must
7851                      explicitly declare static member variables
7852                      outside the class def'n as well.  */
7853                   && TYPE_NEEDS_CONSTRUCTING (type)
7854 #endif
7855                   )
7856                 {
7857                   DECL_EXTERNAL (decl) = 1;
7858                   make_decl_rtl (decl, asmspec, 1);
7859                 }
7860               else
7861                 rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7862             }
7863           else
7864             /* Just a constant field.  Should not need any rtl.  */
7865             goto finish_end0;
7866         }
7867       else
7868         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7869
7870       if (was_temp)
7871         resume_temporary_allocation ();
7872
7873       if (type != error_mark_node
7874           && TYPE_LANG_SPECIFIC (type)
7875           && CLASSTYPE_ABSTRACT_VIRTUALS (type))
7876         abstract_virtuals_error (decl, type);
7877       else if ((TREE_CODE (type) == FUNCTION_TYPE
7878                 || TREE_CODE (type) == METHOD_TYPE)
7879                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7880                && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (type)))
7881         abstract_virtuals_error (decl, TREE_TYPE (type));
7882
7883       if (TYPE_LANG_SPECIFIC (type) && IS_SIGNATURE (type))
7884         signature_error (decl, type);
7885       else if ((TREE_CODE (type) == FUNCTION_TYPE
7886                 || TREE_CODE (type) == METHOD_TYPE)
7887                && TYPE_LANG_SPECIFIC (TREE_TYPE (type))
7888                && IS_SIGNATURE (TREE_TYPE (type)))
7889         signature_error (decl, TREE_TYPE (type));
7890
7891       if (TREE_CODE (decl) == FUNCTION_DECL)
7892         ;
7893       else if (DECL_EXTERNAL (decl)
7894                && ! (DECL_LANG_SPECIFIC (decl)
7895                      && DECL_NOT_REALLY_EXTERN (decl)))
7896         {
7897           if (init)
7898             DECL_INITIAL (decl) = init;
7899         }
7900       else if (TREE_STATIC (decl) && type != error_mark_node)
7901         {
7902           /* Cleanups for static variables are handled by `finish_file'.  */
7903           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7904               || TYPE_NEEDS_DESTRUCTOR (type))
7905             expand_static_init (decl, init);
7906         }
7907       else if (! toplev)
7908         {
7909           /* This is a declared decl which must live until the
7910              end of the binding contour.  It may need a cleanup.  */
7911
7912           /* Recompute the RTL of a local array now
7913              if it used to be an incomplete type.  */
7914           if (was_incomplete && ! TREE_STATIC (decl))
7915             {
7916               /* If we used it already as memory, it must stay in memory.  */
7917               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7918               /* If it's still incomplete now, no init will save it.  */
7919               if (DECL_SIZE (decl) == NULL_TREE)
7920                 DECL_INITIAL (decl) = NULL_TREE;
7921               expand_decl (decl);
7922             }
7923           else if (! TREE_ASM_WRITTEN (decl)
7924                    && (TYPE_SIZE (type) != NULL_TREE
7925                        || TREE_CODE (type) == ARRAY_TYPE))
7926             {
7927               /* Do this here, because we did not expand this decl's
7928                  rtl in start_decl.  */
7929               if (DECL_RTL (decl) == NULL_RTX)
7930                 expand_decl (decl);
7931               else if (cleanup)
7932                 {
7933                   /* XXX: Why don't we use decl here?  */
7934                   /* Ans: Because it was already expanded? */
7935                   if (! expand_decl_cleanup (NULL_TREE, cleanup))
7936                     cp_error ("parser lost in parsing declaration of `%D'",
7937                               decl);
7938                   /* Cleanup used up here.  */
7939                   cleanup = NULL_TREE;
7940                 }
7941             }
7942
7943           if (current_binding_level->is_for_scope)
7944             {
7945               struct binding_level *outer 
7946                 = current_binding_level->level_chain;
7947
7948               /* Check to see if the same name is already bound at
7949                  the outer level, either because it was directly declared,
7950                  or because a dead for-decl got preserved.  In either case,
7951                  the code would not have been valid under the ARM
7952                  scope rules, so clear is_for_scope for the
7953                  current_binding_level.
7954
7955                  Otherwise, we need to preserve the temp slot for decl
7956                  to last into the outer binding level.  */
7957
7958               tree outer_binding 
7959                 = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7960               
7961               if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7962                   && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7963                       == VAR_DECL)
7964                   && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7965                 {
7966                   BINDING_VALUE (outer_binding)
7967                     = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7968                   current_binding_level->is_for_scope = 0;
7969                 }
7970               else if (DECL_IN_MEMORY_P (decl))
7971                 preserve_temp_slots (DECL_RTL (decl));
7972             }
7973
7974           expand_start_target_temps ();
7975
7976           if (DECL_SIZE (decl) && type != error_mark_node)
7977             {
7978               /* Compute and store the initial value.  */
7979               expand_decl_init (decl);
7980               already_used = TREE_USED (decl) || TREE_USED (type);
7981
7982               if (init || TYPE_NEEDS_CONSTRUCTING (type))
7983                 {
7984                   emit_line_note (DECL_SOURCE_FILE (decl),
7985                                   DECL_SOURCE_LINE (decl));
7986                   expand_aggr_init (decl, init, flags);
7987                 }
7988
7989               /* Set this to 0 so we can tell whether an aggregate which
7990                  was initialized was ever used.  Don't do this if it has a
7991                  destructor, so we don't complain about the 'resource
7992                  allocation is initialization' idiom.  */
7993               /* Now set attribute((unused)) on types so decls of
7994                  that type will be marked used. (see TREE_USED, above.) 
7995                  This avoids the warning problems this particular code
7996                  tried to work around. */
7997
7998               if (TYPE_NEEDS_CONSTRUCTING (type)
7999                   && ! already_used
8000                   && cleanup == NULL_TREE
8001                   && DECL_NAME (decl))
8002                 TREE_USED (decl) = 0;
8003
8004               if (already_used)
8005                 TREE_USED (decl) = 1;
8006             }
8007
8008           /* Cleanup any temporaries needed for the initial value.  */
8009           expand_end_target_temps ();
8010
8011           if (DECL_SIZE (decl) && type != error_mark_node)
8012             {
8013               /* Store the cleanup, if there was one.  */
8014               if (cleanup)
8015                 {
8016                   if (! expand_decl_cleanup (decl, cleanup))
8017                     cp_error ("parser lost in parsing declaration of `%D'",
8018                               decl);
8019                 }
8020             }
8021         }
8022     finish_end0:
8023
8024       /* Undo call to `pushclass' that was done in `start_decl'
8025          due to initialization of qualified member variable.
8026          I.e., Foo::x = 10;  */
8027       {
8028         tree context = DECL_REAL_CONTEXT (decl);
8029         if (context
8030             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
8031             && (TREE_CODE (decl) == VAR_DECL
8032                 /* We also have a pushclass done that we need to undo here
8033                    if we're at top level and declare a method.  */
8034                 || TREE_CODE (decl) == FUNCTION_DECL)
8035             /* If size hasn't been set, we're still defining it,
8036                and therefore inside the class body; don't pop
8037                the binding level..  */
8038             && TYPE_SIZE (context) != NULL_TREE
8039             && context == current_class_type)
8040           popclass (1);
8041       }
8042     }
8043
8044  finish_end:
8045
8046   /* If requested, warn about definitions of large data objects.  */
8047
8048   if (warn_larger_than
8049       && ! processing_template_decl
8050       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
8051       && !DECL_EXTERNAL (decl))
8052     {
8053       register tree decl_size = DECL_SIZE (decl);
8054
8055       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
8056         {
8057           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
8058
8059           if (units > larger_than_size)
8060             warning_with_decl (decl, "size of `%s' is %u bytes", units);
8061         }
8062     }
8063
8064   if (need_pop)
8065     {
8066       /* Resume permanent allocation, if not within a function.  */
8067       /* The corresponding push_obstacks_nochange is in start_decl,
8068          start_method, groktypename, and in grokfield.  */
8069       pop_obstacks ();
8070     }
8071
8072   if (was_readonly)
8073     TREE_READONLY (decl) = 1;
8074 }
8075
8076 /* This is here for a midend callback from c-common.c */
8077
8078 void
8079 finish_decl (decl, init, asmspec_tree)
8080      tree decl, init;
8081      tree asmspec_tree;
8082 {
8083   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
8084 }
8085
8086 void
8087 expand_static_init (decl, init)
8088      tree decl;
8089      tree init;
8090 {
8091   tree oldstatic = value_member (decl, static_aggregates);
8092
8093   if (oldstatic)
8094     {
8095       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8096         cp_error ("multiple initializations given for `%D'", decl);
8097     }
8098   else if (! toplevel_bindings_p () && ! pseudo_global_level_p ())
8099     {
8100       /* Emit code to perform this initialization but once.  */
8101       tree temp;
8102
8103       /* Remember this information until end of file.  */
8104       push_obstacks (&permanent_obstack, &permanent_obstack);
8105
8106       /* Emit code to perform this initialization but once.  This code
8107          looks like:
8108
8109            static int temp = 0;
8110            if (!temp) {
8111              // Do initialization.
8112              temp = 1;
8113              // Register variable for destruction at end of program.
8114            }
8115
8116          Note that the `temp' variable is only set to 1 *after* the
8117          initialization is complete.  This ensures that an exception,
8118          thrown during the construction, will cause the variable to
8119          reinitialized when we pass through this code again, as per:
8120          
8121            [stmt.dcl]
8122
8123            If the initialization exits by throwing an exception, the
8124            initialization is not complete, so it will be tried again
8125            the next time control enters the declaration.
8126
8127          In theory, this process should be thread-safe, too; multiple
8128          threads should not be able to initialize the variable more
8129          than once.  We don't yet attempt to ensure thread-safety.  */
8130       temp = get_temp_name (integer_type_node, 1);
8131       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8132
8133       /* Begin the conditional initialization.  */
8134       expand_start_cond (build_binary_op (EQ_EXPR, temp,
8135                                           integer_zero_node, 1), 0);
8136       expand_start_target_temps ();
8137
8138       /* Do the initialization itself.  */
8139       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8140           || (init && TREE_CODE (init) == TREE_LIST))
8141         {
8142           expand_aggr_init (decl, init, 0);
8143           do_pending_stack_adjust ();
8144         }
8145       else if (init)
8146         expand_assignment (decl, init, 0, 0);
8147
8148       /* Set TEMP to 1.  */
8149       expand_assignment (temp, integer_one_node, 0, 0);
8150
8151       /* Cleanup any temporaries needed for the initial value.  If
8152          destroying one of the temporaries causes an exception to be
8153          thrown, then the object itself has still been fully
8154          constructed.  */
8155       expand_end_target_temps ();
8156
8157       /* Use atexit to register a function for destroying this static
8158          variable.  */
8159       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8160         {
8161           tree cleanup, fcall;
8162           static tree Atexit = 0;
8163           if (Atexit == 0)
8164             {
8165               tree atexit_fndecl, PFV, pfvlist;
8166               /* Remember this information until end of file.  */
8167               push_obstacks (&permanent_obstack, &permanent_obstack);
8168               PFV = build_pointer_type (build_function_type
8169                                         (void_type_node, void_list_node));
8170
8171               pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
8172
8173               push_lang_context (lang_name_c);
8174               atexit_fndecl
8175                 = builtin_function ("atexit",
8176                                     build_function_type (void_type_node,
8177                                                          pfvlist),
8178                                     NOT_BUILT_IN, NULL_PTR);
8179               mark_used (atexit_fndecl);
8180               Atexit = default_conversion (atexit_fndecl);
8181               pop_lang_context ();
8182               pop_obstacks ();
8183             }
8184               
8185           /* Call build_cleanup before we enter the anonymous function
8186              so that any access checks will be done relative to the
8187              current scope, rather than the scope of the anonymous
8188              function.  */
8189           fcall = build_cleanup (decl);
8190           cleanup = start_anon_func ();
8191           expand_expr_stmt (fcall);
8192           end_anon_func ();
8193           mark_addressable (cleanup);
8194           cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8195           fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE));
8196           expand_expr_stmt (fcall);
8197         }
8198
8199       expand_end_cond ();
8200       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8201         {
8202           static_aggregates = perm_tree_cons (temp, decl, static_aggregates);
8203           TREE_STATIC (static_aggregates) = 1;
8204         }
8205
8206       /* Resume old (possibly temporary) allocation.  */
8207       pop_obstacks ();
8208     }
8209   else
8210     {
8211       /* This code takes into account memory allocation
8212          policy of `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING
8213          does not hold for this object, then we must make permanent
8214          the storage currently in the temporary obstack.  */
8215       if (! TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8216         preserve_initializer ();
8217       static_aggregates = perm_tree_cons (init, decl, static_aggregates);
8218     }
8219 }
8220 \f
8221 /* Make TYPE a complete type based on INITIAL_VALUE.
8222    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8223    2 if there was no information (in which case assume 1 if DO_DEFAULT).  */
8224
8225 int
8226 complete_array_type (type, initial_value, do_default)
8227      tree type, initial_value;
8228      int do_default;
8229 {
8230   register tree maxindex = NULL_TREE;
8231   int value = 0;
8232
8233   if (initial_value)
8234     {
8235       /* Note MAXINDEX  is really the maximum index,
8236          one less than the size.  */
8237       if (TREE_CODE (initial_value) == STRING_CST)
8238         {
8239           int eltsize
8240             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8241           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8242                                    / eltsize) - 1, 0);
8243         }
8244       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8245         {
8246           tree elts = CONSTRUCTOR_ELTS (initial_value);
8247           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8248           for (; elts; elts = TREE_CHAIN (elts))
8249             {
8250               if (TREE_PURPOSE (elts))
8251                 maxindex = TREE_PURPOSE (elts);
8252               else
8253                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8254             }
8255           maxindex = copy_node (maxindex);
8256         }
8257       else
8258         {
8259           /* Make an error message unless that happened already.  */
8260           if (initial_value != error_mark_node)
8261             value = 1;
8262           else
8263             initial_value = NULL_TREE;
8264
8265           /* Prevent further error messages.  */
8266           maxindex = build_int_2 (0, 0);
8267         }
8268     }
8269
8270   if (!maxindex)
8271     {
8272       if (do_default)
8273         maxindex = build_int_2 (0, 0);
8274       value = 2;
8275     }
8276
8277   if (maxindex)
8278     {
8279       tree itype;
8280
8281       TYPE_DOMAIN (type) = build_index_type (maxindex);
8282       if (! TREE_TYPE (maxindex))
8283         TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
8284       if (initial_value)
8285         itype = TREE_TYPE (initial_value);
8286       else
8287         itype = NULL;
8288       if (itype && !TYPE_DOMAIN (itype))
8289         TYPE_DOMAIN (itype) = TYPE_DOMAIN (type);
8290       /* The type of the main variant should never be used for arrays
8291          of different sizes.  It should only ever be completed with the
8292          size of the array.  */
8293       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8294         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = TYPE_DOMAIN (type);
8295     }
8296
8297   /* Lay out the type now that we can get the real answer.  */
8298
8299   layout_type (type);
8300
8301   return value;
8302 }
8303 \f
8304 /* Return zero if something is declared to be a member of type
8305    CTYPE when in the context of CUR_TYPE.  STRING is the error
8306    message to print in that case.  Otherwise, quietly return 1.  */
8307
8308 static int
8309 member_function_or_else (ctype, cur_type, string)
8310      tree ctype, cur_type;
8311      char *string;
8312 {
8313   if (ctype && ctype != cur_type)
8314     {
8315       error (string, TYPE_NAME_STRING (ctype));
8316       return 0;
8317     }
8318   return 1;
8319 }
8320 \f
8321 /* Subroutine of `grokdeclarator'.  */
8322
8323 /* Generate errors possibly applicable for a given set of specifiers.
8324    This is for ARM $7.1.2.  */
8325
8326 static void
8327 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8328      tree object;
8329      char *type;
8330      int virtualp, quals, friendp, raises, inlinep;
8331 {
8332   if (virtualp)
8333     cp_error ("`%D' declared as a `virtual' %s", object, type);
8334   if (inlinep)
8335     cp_error ("`%D' declared as an `inline' %s", object, type);
8336   if (quals)
8337     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8338               object, type);
8339   if (friendp)
8340     cp_error_at ("invalid friend declaration", object);
8341   if (raises)
8342     cp_error_at ("invalid exception specifications", object);
8343 }
8344
8345 /* CTYPE is class type, or null if non-class.
8346    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8347    or METHOD_TYPE.
8348    DECLARATOR is the function's name.
8349    VIRTUALP is truthvalue of whether the function is virtual or not.
8350    FLAGS are to be passed through to `grokclassfn'.
8351    QUALS are qualifiers indicating whether the function is `const'
8352    or `volatile'.
8353    RAISES is a list of exceptions that this function can raise.
8354    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8355    not look, and -1 if we should not call `grokclassfn' at all.  
8356
8357    Returns `NULL_TREE' if something goes wrong, after issuing
8358    applicable error messages.  */
8359
8360 static tree
8361 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8362             raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag,
8363             template_count, in_namespace)
8364      tree ctype, type;
8365      tree declarator;
8366      tree orig_declarator;
8367      int virtualp;
8368      enum overload_flags flags;
8369      tree quals, raises, attrlist;
8370      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8371      tree in_namespace;
8372 {
8373   tree cname, decl;
8374   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8375   tree t;
8376
8377   if (ctype)
8378     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8379       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8380   else
8381     cname = NULL_TREE;
8382
8383   if (raises)
8384     {
8385       type = build_exception_variant (type, raises);
8386     }
8387
8388   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8389   /* Propagate volatile out from type to decl. */
8390   if (TYPE_VOLATILE (type))
8391     TREE_THIS_VOLATILE (decl) = 1;
8392
8393   /* If this decl has namespace scope, set that up.  */
8394   if (in_namespace)
8395     set_decl_namespace (decl, in_namespace, friendp);
8396   else if (publicp && ! ctype)
8397     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8398
8399   /* `main' and builtins have implicit 'C' linkage.  */
8400   if ((MAIN_NAME_P (declarator)
8401        || (IDENTIFIER_LENGTH (declarator) > 10
8402            && IDENTIFIER_POINTER (declarator)[0] == '_'
8403            && IDENTIFIER_POINTER (declarator)[1] == '_'
8404            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8405       && current_lang_name == lang_name_cplusplus
8406       && ctype == NULL_TREE
8407       /* NULL_TREE means global namespace.  */
8408       && DECL_CONTEXT (decl) == NULL_TREE)
8409     DECL_LANGUAGE (decl) = lang_c;
8410
8411   /* Should probably propagate const out from type to decl I bet (mrs).  */
8412   if (staticp)
8413     {
8414       DECL_STATIC_FUNCTION_P (decl) = 1;
8415       DECL_CONTEXT (decl) = ctype;
8416     }
8417
8418   if (ctype)
8419     DECL_CLASS_CONTEXT (decl) = ctype;
8420
8421   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8422     {
8423       if (processing_template_decl)
8424         error ("cannot declare `main' to be a template");
8425       if (inlinep)
8426         error ("cannot declare `main' to be inline");
8427       else if (! publicp)
8428         error ("cannot declare `main' to be static");
8429       inlinep = 0;
8430       publicp = 1;
8431     }
8432
8433   /* Members of anonymous types and local classes have no linkage; make
8434      them internal.  */
8435   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8436                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8437     publicp = 0;
8438
8439   if (publicp)
8440     {
8441       /* [basic.link]: A name with no linkage (notably, the name of a class
8442          or enumeration declared in a local scope) shall not be used to
8443          declare an entity with linkage.
8444
8445          Only check this for public decls for now.  */
8446       t = no_linkage_check (TREE_TYPE (decl));
8447       if (t)
8448         {
8449           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8450             {
8451               if (DECL_LANGUAGE (decl) == lang_c)
8452                 /* Allow this; it's pretty common in C.  */;
8453               else
8454                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8455                             decl);
8456             }
8457           else
8458             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8459                         decl, t);
8460         }
8461     }
8462
8463   TREE_PUBLIC (decl) = publicp;
8464   if (! publicp)
8465     {
8466       DECL_INTERFACE_KNOWN (decl) = 1;
8467       DECL_NOT_REALLY_EXTERN (decl) = 1;
8468     }
8469
8470   if (inlinep)
8471     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8472
8473   DECL_EXTERNAL (decl) = 1;
8474   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8475     {
8476       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8477                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8478       quals = NULL_TREE;
8479     }
8480
8481   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8482     grok_op_properties (decl, virtualp, check < 0);
8483
8484   if (ctype && hack_decl_function_context (decl))
8485     DECL_NO_STATIC_CHAIN (decl) = 1;
8486
8487   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8488     if (TREE_PURPOSE (t)
8489         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8490       {
8491         add_defarg_fn (decl);
8492         break;
8493       }
8494
8495   if (friendp
8496       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8497     {
8498       if (funcdef_flag)
8499         cp_error
8500           ("defining explicit specialization `%D' in friend declaration",
8501            orig_declarator);
8502       else
8503         {
8504           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8505             {
8506               /* Something like `template <class T> friend void f<T>()'.  */
8507               cp_error ("template-id `%D' in declaration of primary template", 
8508                         orig_declarator);
8509               return NULL_TREE;
8510             }
8511
8512           /* A friend declaration of the form friend void f<>().  Record
8513              the information in the TEMPLATE_ID_EXPR.  */
8514           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8515           DECL_TEMPLATE_INFO (decl)
8516             = perm_tree_cons (TREE_OPERAND (orig_declarator, 0),
8517                               TREE_OPERAND (orig_declarator, 1),
8518                               NULL_TREE);
8519         }
8520     }
8521
8522   /* Plain overloading: will not be grok'd by grokclassfn.  */
8523   if (! ctype && ! processing_template_decl
8524       && DECL_LANGUAGE (decl) != lang_c
8525       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8526     set_mangled_name_for_decl (decl);
8527
8528   if (funcdef_flag)
8529     /* Make the init_value nonzero so pushdecl knows this is not
8530        tentative.  error_mark_node is replaced later with the BLOCK.  */
8531     DECL_INITIAL (decl) = error_mark_node;
8532
8533   /* Caller will do the rest of this.  */
8534   if (check < 0)
8535     return decl;
8536
8537   if (check && funcdef_flag)
8538     DECL_INITIAL (decl) = error_mark_node;
8539
8540   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8541     {
8542       tree tmp;
8543       /* Just handle constructors here.  We could do this
8544          inside the following if stmt, but I think
8545          that the code is more legible by breaking this
8546          case out.  See comments below for what each of
8547          the following calls is supposed to do.  */
8548       DECL_CONSTRUCTOR_P (decl) = 1;
8549
8550       grokclassfn (ctype, decl, flags, quals);
8551
8552       decl = check_explicit_specialization (orig_declarator, decl,
8553                                             template_count, 
8554                                             2 * (funcdef_flag != 0) + 
8555                                             4 * (friendp != 0));
8556       if (decl == error_mark_node)
8557         return NULL_TREE;
8558
8559       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8560           && check)
8561         {
8562           tmp = check_classfn (ctype, decl);
8563
8564           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8565             tmp = DECL_TEMPLATE_RESULT(tmp);
8566
8567           if (tmp && DECL_ARTIFICIAL (tmp))
8568             cp_error ("definition of implicitly-declared `%D'", tmp);
8569           if (tmp && duplicate_decls (decl, tmp))
8570             return tmp;
8571         }
8572       if (! grok_ctor_properties (ctype, decl))
8573         return NULL_TREE;
8574     }
8575   else
8576     {
8577       tree tmp;
8578
8579       /* Function gets the ugly name, field gets the nice one.
8580          This call may change the type of the function (because
8581          of default parameters)!  */
8582       if (ctype != NULL_TREE)
8583         grokclassfn (ctype, decl, flags, quals);
8584
8585       decl = check_explicit_specialization (orig_declarator, decl,
8586                                             template_count, 
8587                                             2 * (funcdef_flag != 0) + 
8588                                             4 * (friendp != 0));
8589       if (decl == error_mark_node)
8590         return NULL_TREE;
8591
8592       if (ctype != NULL_TREE
8593           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8594           && check)
8595         {
8596           tmp = check_classfn (ctype, decl);
8597
8598           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8599             tmp = DECL_TEMPLATE_RESULT (tmp);
8600               
8601           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8602               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8603             {
8604               /* Remove the `this' parm added by grokclassfn.
8605                  XXX Isn't this done in start_function, too?  */
8606               revert_static_member_fn (&decl, NULL, NULL);
8607               last_function_parms = TREE_CHAIN (last_function_parms);
8608             }
8609           if (tmp && DECL_ARTIFICIAL (tmp))
8610             cp_error ("definition of implicitly-declared `%D'", tmp);
8611           if (tmp)
8612             {
8613               /* Attempt to merge the declarations.  This can fail, in
8614                  the case of some illegal specialization declarations.  */
8615               if (!duplicate_decls (decl, tmp))
8616                 cp_error ("no `%#D' member function declared in class `%T'",
8617                           decl, ctype);
8618               return tmp;
8619             }
8620         }
8621
8622       if (ctype == NULL_TREE || check)
8623         return decl;
8624
8625       if (attrlist)
8626         cplus_decl_attributes (decl, TREE_PURPOSE (attrlist), 
8627                                TREE_VALUE (attrlist));
8628       make_decl_rtl (decl, NULL_PTR, 1);
8629
8630       if (virtualp)
8631         {
8632           DECL_VIRTUAL_P (decl) = 1;
8633           if (DECL_VINDEX (decl) == NULL_TREE)
8634             DECL_VINDEX (decl) = error_mark_node;
8635           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8636         }
8637     }
8638   return decl;
8639 }
8640
8641 static tree
8642 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8643      tree type;
8644      tree declarator;
8645      RID_BIT_TYPE *specbits_in;
8646      int initialized;
8647      int constp;
8648      tree in_namespace;
8649 {
8650   tree decl;
8651   RID_BIT_TYPE specbits;
8652
8653   specbits = *specbits_in;
8654
8655   if (TREE_CODE (type) == OFFSET_TYPE)
8656     {
8657       /* If you declare a static member so that it
8658          can be initialized, the code will reach here.  */
8659       tree basetype = TYPE_OFFSET_BASETYPE (type);
8660       type = TREE_TYPE (type);
8661       decl = build_lang_field_decl (VAR_DECL, declarator, type);
8662       DECL_CONTEXT (decl) = basetype;
8663       DECL_CLASS_CONTEXT (decl) = basetype;
8664       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8665     }
8666   else
8667     {
8668       tree context;
8669
8670       if (in_namespace)
8671         context = in_namespace;
8672       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8673         context = current_namespace;
8674       else
8675         context = NULL_TREE;
8676
8677       decl = build_decl (VAR_DECL, declarator, complete_type (type));
8678
8679       if (context)
8680         set_decl_namespace (decl, context, 0);
8681
8682       context = DECL_CONTEXT (decl);
8683       if (declarator && context && current_lang_name != lang_name_c)
8684         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8685     }
8686
8687   if (in_namespace)
8688     set_decl_namespace (decl, in_namespace, 0);
8689
8690   if (RIDBIT_SETP (RID_EXTERN, specbits))
8691     {
8692       DECL_THIS_EXTERN (decl) = 1;
8693       DECL_EXTERNAL (decl) = !initialized;
8694     }
8695
8696   /* In class context, static means one per class,
8697      public access, and static storage.  */
8698   if (DECL_CLASS_SCOPE_P (decl))
8699     {
8700       TREE_PUBLIC (decl) = 1;
8701       TREE_STATIC (decl) = 1;
8702       DECL_EXTERNAL (decl) = 0;
8703     }
8704   /* At top level, either `static' or no s.c. makes a definition
8705      (perhaps tentative), and absence of `static' makes it public.  */
8706   else if (toplevel_bindings_p ())
8707     {
8708       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8709                             && (DECL_THIS_EXTERN (decl) || ! constp));
8710       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8711     }
8712   /* Not at top level, only `static' makes a static definition.  */
8713   else
8714     {
8715       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8716       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8717     }
8718
8719   if (TREE_PUBLIC (decl))
8720     {
8721       /* [basic.link]: A name with no linkage (notably, the name of a class
8722          or enumeration declared in a local scope) shall not be used to
8723          declare an entity with linkage.
8724
8725          Only check this for public decls for now.  */
8726       tree t = no_linkage_check (TREE_TYPE (decl));
8727       if (t)
8728         {
8729           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8730             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8731           else
8732             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8733                         decl, t);
8734         }
8735     }
8736
8737   return decl;
8738 }
8739
8740 /* Create and return a canonical pointer to member function type, for
8741    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8742
8743 tree
8744 build_ptrmemfunc_type (type)
8745      tree type;
8746 {
8747   tree fields[4];
8748   tree t;
8749   tree u;
8750
8751   /* If a canonical type already exists for this type, use it.  We use
8752      this method instead of type_hash_canon, because it only does a
8753      simple equality check on the list of field members.  */
8754
8755   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8756     return t;
8757
8758   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8759
8760   u = make_lang_type (UNION_TYPE);
8761   SET_IS_AGGR_TYPE (u, 0);
8762   fields[0] = build_lang_field_decl (FIELD_DECL, pfn_identifier, type);
8763   fields[1] = build_lang_field_decl (FIELD_DECL, delta2_identifier,
8764                                      delta_type_node);
8765   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8766   TYPE_NAME (u) = NULL_TREE;
8767
8768   t = make_lang_type (RECORD_TYPE);
8769
8770   /* Let the front-end know this is a pointer to member function...  */
8771   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8772   /* ... and not really an aggregate.  */
8773   SET_IS_AGGR_TYPE (t, 0);
8774
8775   fields[0] = build_lang_field_decl (FIELD_DECL, delta_identifier,
8776                                      delta_type_node);
8777   fields[1] = build_lang_field_decl (FIELD_DECL, index_identifier,
8778                                      delta_type_node);
8779   fields[2] = build_lang_field_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8780   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8781
8782   pop_obstacks ();
8783
8784   /* Zap out the name so that the back-end will give us the debugging
8785      information for this anonymous RECORD_TYPE.  */
8786   TYPE_NAME (t) = NULL_TREE;
8787
8788   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8789
8790   /* Seems to be wanted.  */
8791   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8792   return t;
8793 }
8794
8795 /* Given declspecs and a declarator,
8796    determine the name and type of the object declared
8797    and construct a ..._DECL node for it.
8798    (In one case we can return a ..._TYPE node instead.
8799     For invalid input we sometimes return 0.)
8800
8801    DECLSPECS is a chain of tree_list nodes whose value fields
8802     are the storage classes and type specifiers.
8803
8804    DECL_CONTEXT says which syntactic context this declaration is in:
8805      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8806      FUNCDEF for a function definition.  Like NORMAL but a few different
8807       error messages in each case.  Return value may be zero meaning
8808       this definition is too screwy to try to parse.
8809      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8810       handle member functions (which have FIELD context).
8811       Return value may be zero meaning this definition is too screwy to
8812       try to parse.
8813      PARM for a parameter declaration (either within a function prototype
8814       or before a function body).  Make a PARM_DECL, or return void_type_node.
8815      CATCHPARM for a parameter declaration before a catch clause.
8816      TYPENAME if for a typename (in a cast or sizeof).
8817       Don't make a DECL node; just return the ..._TYPE node.
8818      FIELD for a struct or union field; make a FIELD_DECL.
8819      BITFIELD for a field with specified width.
8820    INITIALIZED is 1 if the decl has an initializer.
8821
8822    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8823    It may also be so in the PARM case, for a prototype where the
8824    argument type is specified but not the name.
8825
8826    This function is where the complicated C meanings of `static'
8827    and `extern' are interpreted.
8828
8829    For C++, if there is any monkey business to do, the function which
8830    calls this one must do it, i.e., prepending instance variables,
8831    renaming overloaded function names, etc.
8832
8833    Note that for this C++, it is an error to define a method within a class
8834    which does not belong to that class.
8835
8836    Except in the case where SCOPE_REFs are implicitly known (such as
8837    methods within a class being redundantly qualified),
8838    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8839    (class_name::decl_name).  The caller must also deal with this.
8840
8841    If a constructor or destructor is seen, and the context is FIELD,
8842    then the type gains the attribute TREE_HAS_x.  If such a declaration
8843    is erroneous, NULL_TREE is returned.
8844
8845    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8846    function, these are the qualifiers to give to the `this' pointer.
8847
8848    May return void_type_node if the declarator turned out to be a friend.
8849    See grokfield for details.  */
8850
8851 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8852
8853 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8854    Check to see that the definition is valid.  Issue appropriate error
8855    messages.  Return 1 if the definition is particularly bad, or 0
8856    otherwise.  */
8857
8858 int
8859 check_static_variable_definition (decl, type)
8860      tree decl;
8861      tree type;
8862 {
8863   /* Motion 10 at San Diego: If a static const integral data member is
8864      initialized with an integral constant expression, the initializer
8865      may appear either in the declaration (within the class), or in
8866      the definition, but not both.  If it appears in the class, the
8867      member is a member constant.  The file-scope definition is always
8868      required.  */
8869   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8870     {
8871       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8872                 type);
8873       /* If we just return the declaration, crashes will sometimes
8874          occur.  We therefore return void_type_node, as if this was a
8875          friend declaration, to cause callers to completely ignore
8876          this declaration.  */
8877       return 1;
8878     }
8879   else if (!CP_TYPE_CONST_P (type))
8880     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8881               decl);
8882   else if (pedantic && !INTEGRAL_TYPE_P (type))
8883     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8884
8885   return 0;
8886 }
8887
8888 tree
8889 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8890      tree declspecs;
8891      tree declarator;
8892      enum decl_context decl_context;
8893      int initialized;
8894      tree attrlist;
8895 {
8896   RID_BIT_TYPE specbits;
8897   int nclasses = 0;
8898   tree spec;
8899   tree type = NULL_TREE;
8900   int longlong = 0;
8901   int constp;
8902   int restrictp;
8903   int volatilep;
8904   int type_quals;
8905   int virtualp, explicitp, friendp, inlinep, staticp;
8906   int explicit_int = 0;
8907   int explicit_char = 0;
8908   int defaulted_int = 0;
8909   int opaque_typedef = 0;
8910   tree typedef_decl = NULL_TREE;
8911   char *name;
8912   tree typedef_type = NULL_TREE;
8913   int funcdef_flag = 0;
8914   enum tree_code innermost_code = ERROR_MARK;
8915   int bitfield = 0;
8916 #if 0
8917   /* See the code below that used this.  */
8918   tree decl_machine_attr = NULL_TREE;
8919 #endif
8920   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8921      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8922   tree init = NULL_TREE;
8923
8924   /* Keep track of what sort of function is being processed
8925      so that we can warn about default return values, or explicit
8926      return values which do not match prescribed defaults.  */
8927   enum return_types return_type = return_normal;
8928
8929   tree dname = NULL_TREE;
8930   tree ctype = current_class_type;
8931   tree ctor_return_type = NULL_TREE;
8932   enum overload_flags flags = NO_SPECIAL;
8933   tree quals = NULL_TREE;
8934   tree raises = NULL_TREE;
8935   int template_count = 0;
8936   tree in_namespace = NULL_TREE;
8937   tree inner_attrs;
8938   int ignore_attrs;
8939
8940   RIDBIT_RESET_ALL (specbits);
8941   if (decl_context == FUNCDEF)
8942     funcdef_flag = 1, decl_context = NORMAL;
8943   else if (decl_context == MEMFUNCDEF)
8944     funcdef_flag = -1, decl_context = FIELD;
8945   else if (decl_context == BITFIELD)
8946     bitfield = 1, decl_context = FIELD;
8947
8948   /* Look inside a declarator for the name being declared
8949      and get it as a string, for an error message.  */
8950   {
8951     tree *next = &declarator;
8952     register tree decl;
8953     name = NULL;
8954
8955     while (next && *next)
8956       {
8957         decl = *next;
8958         switch (TREE_CODE (decl))
8959           {
8960           case TREE_LIST:
8961             /* For attributes.  */
8962             next = &TREE_VALUE (decl);
8963             break;
8964
8965           case COND_EXPR:
8966             ctype = NULL_TREE;
8967             next = &TREE_OPERAND (decl, 0);
8968             break;
8969
8970           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8971             {
8972               tree name = TREE_OPERAND (decl, 0);
8973               tree rename = NULL_TREE;
8974
8975               my_friendly_assert (flags == NO_SPECIAL, 152);
8976               flags = DTOR_FLAG;
8977               return_type = return_dtor;
8978               if (TREE_CODE (name) == TYPE_DECL)
8979                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8980               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8981               if (ctype == NULL_TREE)
8982                 {
8983                   if (current_class_type == NULL_TREE)
8984                     {
8985                       error ("destructors must be member functions");
8986                       flags = NO_SPECIAL;
8987                     }
8988                   else
8989                     {
8990                       tree t = constructor_name (current_class_name);
8991                       if (t != name)
8992                         rename = t;
8993                     }
8994                 }
8995               else
8996                 {
8997                   tree t = constructor_name (ctype);
8998                   if (t != name)
8999                     rename = t;
9000                 }
9001
9002               if (rename)
9003                 {
9004                   cp_error ("destructor `%T' must match class name `%T'",
9005                             name, rename);
9006                   TREE_OPERAND (decl, 0) = rename;
9007                 }
9008               next = &name;
9009             }
9010             break;
9011
9012           case ADDR_EXPR:       /* C++ reference declaration */
9013             /* Fall through. */
9014           case ARRAY_REF:
9015           case INDIRECT_REF:
9016             ctype = NULL_TREE;
9017             innermost_code = TREE_CODE (decl);
9018             next = &TREE_OPERAND (decl, 0);
9019             break;
9020
9021           case CALL_EXPR:
9022             if (parmlist_is_exprlist (TREE_OPERAND (decl, 1)))
9023               {
9024                 /* This is actually a variable declaration using constructor
9025                    syntax.  We need to call start_decl and cp_finish_decl so we
9026                    can get the variable initialized...  */
9027
9028                 *next = TREE_OPERAND (decl, 0);
9029                 init = TREE_OPERAND (decl, 1);
9030
9031                 decl = start_decl (declarator, declspecs, 1, NULL_TREE, NULL_TREE);
9032                 if (decl)
9033                   {
9034                     /* Look for __unused__ attribute */
9035                     if (TREE_USED (TREE_TYPE (decl)))
9036                       TREE_USED (decl) = 1;
9037                     finish_decl (decl, init, NULL_TREE);
9038                   }
9039                 else
9040                   cp_error ("invalid declarator");
9041                 return 0;
9042               }
9043             innermost_code = TREE_CODE (decl);
9044             if (decl_context == FIELD && ctype == NULL_TREE)
9045               ctype = current_class_type;
9046             if (ctype
9047                 && TREE_OPERAND (decl, 0)
9048                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9049                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9050                          == constructor_name_full (ctype))
9051                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9052                             == constructor_name (ctype)))))
9053               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9054             next = &TREE_OPERAND (decl, 0);
9055             decl = *next;
9056             if (ctype != NULL_TREE
9057                 && decl != NULL_TREE && flags != DTOR_FLAG
9058                 && decl == constructor_name (ctype))
9059               {
9060                 return_type = return_ctor;
9061                 ctor_return_type = ctype;
9062               }
9063             ctype = NULL_TREE;
9064             break;
9065             
9066           case TEMPLATE_ID_EXPR:
9067               {
9068                 tree fns = TREE_OPERAND (decl, 0);
9069
9070                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9071                   fns = TREE_OPERAND (fns, 0);
9072
9073                 if (TREE_CODE (fns) == IDENTIFIER_NODE)
9074                   dname = fns;
9075                 else if (is_overloaded_fn (fns))
9076                   dname = DECL_NAME (get_first_fn (fns));
9077                 else
9078                   my_friendly_abort (0);
9079               }
9080           /* Fall through. */
9081
9082           case IDENTIFIER_NODE:
9083             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9084               dname = decl;
9085
9086             next = 0;
9087
9088             if (is_rid (dname))
9089               {
9090                 cp_error ("declarator-id missing; using reserved word `%D'",
9091                           dname);
9092                 name = IDENTIFIER_POINTER (dname);
9093               }
9094             if (! IDENTIFIER_OPNAME_P (dname)
9095                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9096                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9097               name = IDENTIFIER_POINTER (dname);
9098             else
9099               {
9100                 if (IDENTIFIER_TYPENAME_P (dname))
9101                   {
9102                     my_friendly_assert (flags == NO_SPECIAL, 154);
9103                     flags = TYPENAME_FLAG;
9104                     ctor_return_type = TREE_TYPE (dname);
9105                     return_type = return_conversion;
9106                   }
9107                 name = operator_name_string (dname);
9108               }
9109             break;
9110
9111             /* C++ extension */
9112           case SCOPE_REF:
9113             {
9114               /* Perform error checking, and decide on a ctype.  */
9115               tree cname = TREE_OPERAND (decl, 0);
9116               if (cname == NULL_TREE)
9117                 ctype = NULL_TREE;
9118               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9119                 {
9120                   ctype = NULL_TREE;
9121                   in_namespace = TREE_OPERAND (decl, 0);
9122                   TREE_OPERAND (decl, 0) = NULL_TREE;
9123                 }
9124               else if (! is_aggr_type (cname, 1))
9125                 TREE_OPERAND (decl, 0) = NULL_TREE;
9126               /* Must test TREE_OPERAND (decl, 1), in case user gives
9127                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9128               else if (TREE_OPERAND (decl, 1)
9129                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9130                 ctype = cname;
9131               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9132                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9133                 {
9134                   cp_error ("`%T::%D' is not a valid declarator", cname,
9135                             TREE_OPERAND (decl, 1));
9136                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9137                             cname, TREE_OPERAND (decl, 1));
9138                   return void_type_node;
9139                 }
9140               else if (ctype == NULL_TREE)
9141                 ctype = cname;
9142               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9143                 TREE_OPERAND (decl, 0) = ctype;
9144               else
9145                 {
9146                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9147                     {
9148                       cp_error ("type `%T' is not derived from type `%T'",
9149                                 cname, ctype);
9150                       TREE_OPERAND (decl, 0) = NULL_TREE;
9151                     }
9152                   else
9153                     ctype = cname;
9154                 }
9155
9156               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9157                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9158                        == constructor_name_full (ctype))
9159                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9160                           == constructor_name (ctype))))
9161                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9162               next = &TREE_OPERAND (decl, 1);
9163               decl = *next;
9164               if (ctype)
9165                 {
9166                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9167                       && constructor_name (ctype) == decl)
9168                     {
9169                       return_type = return_ctor;
9170                       ctor_return_type = ctype;
9171                     }
9172                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9173                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9174                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9175                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9176                     {
9177                       return_type = return_dtor;
9178                       ctor_return_type = ctype;
9179                       flags = DTOR_FLAG;
9180                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9181                       next = &TREE_OPERAND (decl, 0);
9182                     }
9183                 }
9184             }
9185             break;
9186
9187           case ERROR_MARK:
9188             next = 0;
9189             break;
9190
9191           case TYPE_DECL:
9192             /* Parse error puts this typespec where
9193                a declarator should go.  */
9194             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9195             if (TREE_TYPE (decl) == current_class_type)
9196               cp_error ("  perhaps you want `%T' for a constructor",
9197                         current_class_name);
9198             dname = DECL_NAME (decl);
9199             name = IDENTIFIER_POINTER (dname);
9200
9201             /* Avoid giving two errors for this.  */
9202             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9203
9204             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9205                                         declspecs);
9206             *next = dname;
9207             next = 0;
9208             break;
9209
9210           default:
9211             cp_compiler_error ("`%D' as declarator", decl);
9212             return 0; /* We used to do a 155 abort here.  */
9213           }
9214       }
9215     if (name == NULL)
9216       name = "type name";
9217   }
9218
9219   /* A function definition's declarator must have the form of
9220      a function declarator.  */
9221
9222   if (funcdef_flag && innermost_code != CALL_EXPR)
9223     return 0;
9224
9225   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9226       && innermost_code != CALL_EXPR
9227       && ! (ctype && declspecs == NULL_TREE))
9228     {
9229       cp_error ("declaration of `%D' as non-function", dname);
9230       return void_type_node;
9231     }
9232
9233   /* Anything declared one level down from the top level
9234      must be one of the parameters of a function
9235      (because the body is at least two levels down).  */
9236
9237   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9238      by not allowing C++ class definitions to specify their parameters
9239      with xdecls (must be spec.d in the parmlist).
9240
9241      Since we now wait to push a class scope until we are sure that
9242      we are in a legitimate method context, we must set oldcname
9243      explicitly (since current_class_name is not yet alive).
9244
9245      We also want to avoid calling this a PARM if it is in a namespace.  */
9246
9247   if (decl_context == NORMAL && ! namespace_bindings_p ()
9248       && ! pseudo_global_level_p ())
9249     {
9250       struct binding_level *b = current_binding_level;
9251       current_binding_level = b->level_chain;
9252       if (current_binding_level != 0 && toplevel_bindings_p ())
9253         decl_context = PARM;
9254       current_binding_level = b;
9255     }
9256
9257   /* Look through the decl specs and record which ones appear.
9258      Some typespecs are defined as built-in typenames.
9259      Others, the ones that are modifiers of other types,
9260      are represented by bits in SPECBITS: set the bits for
9261      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9262
9263      If there is a typedef name or a type, store the type in TYPE.
9264      This includes builtin typedefs such as `int'.
9265
9266      Set EXPLICIT_INT if the type is `int' or `char' and did not
9267      come from a user typedef.
9268
9269      Set LONGLONG if `long' is mentioned twice.
9270
9271      For C++, constructors and destructors have their own fast treatment.  */
9272
9273   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9274     {
9275       register int i;
9276       register tree id;
9277
9278       /* Certain parse errors slip through.  For example,
9279          `int class;' is not caught by the parser. Try
9280          weakly to recover here.  */
9281       if (TREE_CODE (spec) != TREE_LIST)
9282         return 0;
9283
9284       id = TREE_VALUE (spec);
9285
9286       if (TREE_CODE (id) == IDENTIFIER_NODE)
9287         {
9288           if (id == ridpointers[(int) RID_INT]
9289               || id == ridpointers[(int) RID_CHAR]
9290               || id == ridpointers[(int) RID_BOOL]
9291               || id == ridpointers[(int) RID_WCHAR])
9292             {
9293               if (type)
9294                 {
9295                   if (id == ridpointers[(int) RID_BOOL])
9296                     error ("`bool' is now a keyword");
9297                   else
9298                     cp_error ("extraneous `%T' ignored", id);
9299                 }
9300               else
9301                 {
9302                   if (id == ridpointers[(int) RID_INT])
9303                     explicit_int = 1;
9304                   else if (id == ridpointers[(int) RID_CHAR])
9305                     explicit_char = 1;
9306                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9307                 }
9308               goto found;
9309             }
9310           /* C++ aggregate types.  */
9311           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9312             {
9313               if (type)
9314                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9315               else
9316                 type = IDENTIFIER_TYPE_VALUE (id);
9317               goto found;
9318             }
9319
9320           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9321             {
9322               if (ridpointers[i] == id)
9323                 {
9324                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9325                     {
9326                       if (pedantic && ! in_system_header && warn_long_long)
9327                         pedwarn ("ANSI C++ does not support `long long'");
9328                       if (longlong)
9329                         error ("`long long long' is too long for GCC");
9330                       else
9331                         longlong = 1;
9332                     }
9333                   else if (RIDBIT_SETP (i, specbits))
9334                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9335                   RIDBIT_SET (i, specbits);
9336                   goto found;
9337                 }
9338             }
9339         }
9340       /* C++ aggregate types.  */
9341       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9342         {
9343           if (type)
9344             cp_error ("multiple declarations `%T' and `%T'", type,
9345                       TREE_TYPE (id));
9346           else
9347             {
9348               type = TREE_TYPE (id);
9349               TREE_VALUE (spec) = type;
9350             }
9351           goto found;
9352         }
9353       if (type)
9354         error ("two or more data types in declaration of `%s'", name);
9355       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9356         {
9357           register tree t = lookup_name (id, 1);
9358           if (!t || TREE_CODE (t) != TYPE_DECL)
9359             error ("`%s' fails to be a typedef or built in type",
9360                    IDENTIFIER_POINTER (id));
9361           else
9362             {
9363               type = TREE_TYPE (t);
9364 #if 0
9365               /* See the code below that used this.  */
9366               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9367 #endif
9368               typedef_decl = t;
9369             }
9370         }
9371       else if (id != error_mark_node)
9372         /* Can't change CLASS nodes into RECORD nodes here!  */
9373         type = id;
9374
9375     found: ;
9376     }
9377
9378   typedef_type = type;
9379
9380   /* No type at all: default to `int', and set DEFAULTED_INT
9381      because it was not a user-defined typedef.
9382      Except when we have a `typedef' inside a signature, in
9383      which case the type defaults to `unknown type' and is
9384      instantiated when assigning to a signature pointer or ref.  */
9385
9386   if (type == NULL_TREE
9387       && (RIDBIT_SETP (RID_SIGNED, specbits)
9388           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9389           || RIDBIT_SETP (RID_LONG, specbits)
9390           || RIDBIT_SETP (RID_SHORT, specbits)))
9391     {
9392       /* These imply 'int'.  */
9393       type = integer_type_node;
9394       defaulted_int = 1;
9395     }
9396
9397   if (type == NULL_TREE)
9398     {
9399       explicit_int = -1;
9400       if (return_type == return_dtor)
9401         type = void_type_node;
9402       else if (return_type == return_ctor)
9403         type = build_pointer_type (ctor_return_type);
9404       else if (return_type == return_conversion)
9405         type = ctor_return_type;
9406       else if (current_class_type
9407                && IS_SIGNATURE (current_class_type)
9408                && RIDBIT_SETP (RID_TYPEDEF, specbits)
9409                && (decl_context == FIELD || decl_context == NORMAL))
9410         {
9411           explicit_int = 0;
9412           opaque_typedef = 1;
9413           type = copy_node (opaque_type_node);
9414         }
9415       else
9416         {
9417           /* We handle `main' specially here, because 'main () { }' is so
9418              common.  With no options, it is allowed.  With -Wreturn-type,
9419              it is a warning.  It is only an error with -pedantic-errors.  */
9420           int is_main = (funcdef_flag
9421                          && MAIN_NAME_P (dname)
9422                          && ctype == NULL_TREE
9423                          && in_namespace == NULL_TREE
9424                          && current_namespace == global_namespace);
9425
9426           if (in_system_header)
9427             /* Allow it, sigh.  */;
9428           else if (pedantic || ! is_main)
9429             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9430                         dname);
9431           else if (warn_return_type)
9432             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9433                         dname);
9434
9435           type = integer_type_node;
9436         }
9437     }
9438   else if (return_type == return_dtor)
9439     {
9440       error ("return type specification for destructor invalid");
9441       type = void_type_node;
9442     }
9443   else if (return_type == return_ctor)
9444     {
9445       error ("return type specification for constructor invalid");
9446       type = build_pointer_type (ctor_return_type);
9447     }
9448   else if (return_type == return_conversion)
9449     {
9450       if (!same_type_p (type, ctor_return_type))
9451         cp_error ("operator `%T' declared to return `%T'",
9452                   ctor_return_type, type);
9453       else
9454         cp_pedwarn ("return type specified for `operator %T'",
9455                     ctor_return_type);
9456
9457       type = ctor_return_type;
9458     }
9459
9460   ctype = NULL_TREE;
9461
9462   /* Now process the modifiers that were specified
9463      and check for invalid combinations.  */
9464
9465   /* Long double is a special combination.  */
9466
9467   if (RIDBIT_SETP (RID_LONG, specbits)
9468       && TYPE_MAIN_VARIANT (type) == double_type_node)
9469     {
9470       RIDBIT_RESET (RID_LONG, specbits);
9471       type = build_qualified_type (long_double_type_node, 
9472                                    CP_TYPE_QUALS (type));
9473     }
9474
9475   /* Check all other uses of type modifiers.  */
9476
9477   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9478       || RIDBIT_SETP (RID_SIGNED, specbits)
9479       || RIDBIT_SETP (RID_LONG, specbits)
9480       || RIDBIT_SETP (RID_SHORT, specbits))
9481     {
9482       int ok = 0;
9483
9484       if (TREE_CODE (type) == REAL_TYPE)
9485         error ("short, signed or unsigned invalid for `%s'", name);
9486       else if (TREE_CODE (type) != INTEGER_TYPE)
9487         error ("long, short, signed or unsigned invalid for `%s'", name);
9488       else if (RIDBIT_SETP (RID_LONG, specbits)
9489                && RIDBIT_SETP (RID_SHORT, specbits))
9490         error ("long and short specified together for `%s'", name);
9491       else if ((RIDBIT_SETP (RID_LONG, specbits)
9492                 || RIDBIT_SETP (RID_SHORT, specbits))
9493                && explicit_char)
9494         error ("long or short specified with char for `%s'", name);
9495       else if ((RIDBIT_SETP (RID_LONG, specbits)
9496                 || RIDBIT_SETP (RID_SHORT, specbits))
9497                && TREE_CODE (type) == REAL_TYPE)
9498         error ("long or short specified with floating type for `%s'", name);
9499       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9500                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9501         error ("signed and unsigned given together for `%s'", name);
9502       else
9503         {
9504           ok = 1;
9505           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9506             {
9507               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9508                        name);
9509               if (flag_pedantic_errors)
9510                 ok = 0;
9511             }
9512         }
9513
9514       /* Discard the type modifiers if they are invalid.  */
9515       if (! ok)
9516         {
9517           RIDBIT_RESET (RID_UNSIGNED, specbits);
9518           RIDBIT_RESET (RID_SIGNED, specbits);
9519           RIDBIT_RESET (RID_LONG, specbits);
9520           RIDBIT_RESET (RID_SHORT, specbits);
9521           longlong = 0;
9522         }
9523     }
9524
9525   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9526       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9527     {
9528       error ("complex invalid for `%s'", name);
9529       RIDBIT_RESET (RID_COMPLEX, specbits);
9530     }
9531
9532   /* Decide whether an integer type is signed or not.
9533      Optionally treat bitfields as signed by default.  */
9534   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9535       || (bitfield && ! flag_signed_bitfields
9536           && (explicit_int || defaulted_int || explicit_char
9537               /* A typedef for plain `int' without `signed'
9538                  can be controlled just like plain `int'.  */
9539               || ! (typedef_decl != NULL_TREE
9540                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9541           && TREE_CODE (type) != ENUMERAL_TYPE
9542           && RIDBIT_NOTSETP (RID_SIGNED, specbits)))
9543     {
9544       if (longlong)
9545         type = long_long_unsigned_type_node;
9546       else if (RIDBIT_SETP (RID_LONG, specbits))
9547         type = long_unsigned_type_node;
9548       else if (RIDBIT_SETP (RID_SHORT, specbits))
9549         type = short_unsigned_type_node;
9550       else if (type == char_type_node)
9551         type = unsigned_char_type_node;
9552       else if (typedef_decl)
9553         type = unsigned_type (type);
9554       else
9555         type = unsigned_type_node;
9556     }
9557   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9558            && type == char_type_node)
9559     type = signed_char_type_node;
9560   else if (longlong)
9561     type = long_long_integer_type_node;
9562   else if (RIDBIT_SETP (RID_LONG, specbits))
9563     type = long_integer_type_node;
9564   else if (RIDBIT_SETP (RID_SHORT, specbits))
9565     type = short_integer_type_node;
9566
9567   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9568     {
9569       /* If we just have "complex", it is equivalent to
9570          "complex double", but if any modifiers at all are specified it is
9571          the complex form of TYPE.  E.g, "complex short" is
9572          "complex short int".  */
9573
9574       if (defaulted_int && ! longlong
9575           && ! (RIDBIT_SETP (RID_LONG, specbits)
9576                 || RIDBIT_SETP (RID_SHORT, specbits)
9577                 || RIDBIT_SETP (RID_SIGNED, specbits)
9578                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9579         type = complex_double_type_node;
9580       else if (type == integer_type_node)
9581         type = complex_integer_type_node;
9582       else if (type == float_type_node)
9583         type = complex_float_type_node;
9584       else if (type == double_type_node)
9585         type = complex_double_type_node;
9586       else if (type == long_double_type_node)
9587         type = complex_long_double_type_node;
9588       else
9589         type = build_complex_type (type);
9590     }
9591
9592   if (return_type == return_conversion 
9593       && (RIDBIT_SETP (RID_CONST, specbits)
9594           || RIDBIT_SETP (RID_VOLATILE, specbits)
9595           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9596     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9597               ctor_return_type);
9598
9599   /* Set CONSTP if this declaration is `const', whether by
9600      explicit specification or via a typedef.
9601      Likewise for VOLATILEP.  */
9602
9603   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9604   restrictp = 
9605     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9606   volatilep = 
9607     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9608   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9609                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9610                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9611   type = cp_build_qualified_type (type, type_quals);
9612   staticp = 0;
9613   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9614   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9615   RIDBIT_RESET (RID_VIRTUAL, specbits);
9616   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9617   RIDBIT_RESET (RID_EXPLICIT, specbits);
9618
9619   if (RIDBIT_SETP (RID_STATIC, specbits))
9620     staticp = 1 + (decl_context == FIELD);
9621
9622   if (virtualp && staticp == 2)
9623     {
9624       cp_error ("member `%D' cannot be declared both virtual and static",
9625                 dname);
9626       staticp = 0;
9627     }
9628   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9629   RIDBIT_RESET (RID_FRIEND, specbits);
9630
9631   /* $7.1.2, Function specifiers */
9632   if (friendp && explicitp)
9633     error ("only declarations of constructors can be `explicit'");
9634
9635   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9636     {
9637       if (decl_context == PARM)
9638         {
9639           error ("non-member `%s' cannot be declared `mutable'", name);
9640           RIDBIT_RESET (RID_MUTABLE, specbits);
9641         }
9642       else if (friendp || decl_context == TYPENAME)
9643         {
9644           error ("non-object member `%s' cannot be declared `mutable'", name);
9645           RIDBIT_RESET (RID_MUTABLE, specbits);
9646         }
9647     }
9648
9649   /* Warn if two storage classes are given. Default to `auto'.  */
9650
9651   if (RIDBIT_ANY_SET (specbits))
9652     {
9653       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9654       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9655       if (decl_context == PARM && nclasses > 0)
9656         error ("storage class specifiers invalid in parameter declarations");
9657       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9658         {
9659           if (decl_context == PARM)
9660             error ("typedef declaration invalid in parameter declaration");
9661           nclasses++;
9662         }
9663       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9664       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9665     }
9666
9667   /* Give error if `virtual' is used outside of class declaration.  */
9668   if (virtualp
9669       && (current_class_name == NULL_TREE || decl_context != FIELD))
9670     {
9671       error ("virtual outside class declaration");
9672       virtualp = 0;
9673     }
9674   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9675     {
9676       error ("only members can be declared mutable");
9677       RIDBIT_RESET (RID_MUTABLE, specbits);
9678     }
9679
9680   /* Static anonymous unions are dealt with here.  */
9681   if (staticp && decl_context == TYPENAME
9682       && TREE_CODE (declspecs) == TREE_LIST
9683       && ANON_UNION_TYPE_P (TREE_VALUE (declspecs)))
9684     decl_context = FIELD;
9685
9686   /* Give error if `const,' `volatile,' `inline,' `friend,' or `virtual'
9687      is used in a signature member function declaration.  */
9688   if (decl_context == FIELD
9689       && IS_SIGNATURE (current_class_type)
9690       && RIDBIT_NOTSETP (RID_TYPEDEF, specbits))
9691     {
9692       if (type_quals != TYPE_UNQUALIFIED)
9693         {
9694           error ("type qualifiers specified for signature member function `%s'", name);
9695           type_quals = TYPE_UNQUALIFIED;
9696         }
9697       if (inlinep)
9698         {
9699           error ("`inline' specified for signature member function `%s'", name);
9700           /* Later, we'll make signature member functions inline.  */
9701           inlinep = 0;
9702         }
9703       if (friendp)
9704         {
9705           error ("`friend' declaration in signature definition");
9706           friendp = 0;
9707         }
9708       if (virtualp)
9709         {
9710           error ("`virtual' specified for signature member function `%s'",
9711                  name);
9712           /* Later, we'll make signature member functions virtual.  */
9713           virtualp = 0;
9714         }
9715     }
9716
9717   /* Warn about storage classes that are invalid for certain
9718      kinds of declarations (parameters, typenames, etc.).  */
9719
9720   if (nclasses > 1)
9721     error ("multiple storage classes in declaration of `%s'", name);
9722   else if (decl_context != NORMAL && nclasses > 0)
9723     {
9724       if ((decl_context == PARM || decl_context == CATCHPARM)
9725           && (RIDBIT_SETP (RID_REGISTER, specbits)
9726               || RIDBIT_SETP (RID_AUTO, specbits)))
9727         ;
9728       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9729         ;
9730       else if (decl_context == FIELD
9731                && ! IS_SIGNATURE (current_class_type)
9732                /* C++ allows static class elements  */
9733                && RIDBIT_SETP (RID_STATIC, specbits))
9734         /* C++ also allows inlines and signed and unsigned elements,
9735            but in those cases we don't come in here.  */
9736         ;
9737       else
9738         {
9739           if (decl_context == FIELD)
9740             {
9741               tree tmp = NULL_TREE;
9742               register int op = 0;
9743
9744               if (declarator)
9745                 {
9746                   /* Avoid trying to get an operand off an identifier node.  */ 
9747                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9748                     tmp = declarator;
9749                   else
9750                     tmp = TREE_OPERAND (declarator, 0);
9751                   op = IDENTIFIER_OPNAME_P (tmp);
9752                 }
9753               error ("storage class specified for %s `%s'",
9754                      IS_SIGNATURE (current_class_type)
9755                      ? (op
9756                         ? "signature member operator"
9757                         : "signature member function")
9758                      : (op ? "member operator" : "field"),
9759                      op ? operator_name_string (tmp) : name);
9760             }
9761           else
9762             error (((decl_context == PARM || decl_context == CATCHPARM)
9763                     ? "storage class specified for parameter `%s'"
9764                     : "storage class specified for typename"), name);
9765           RIDBIT_RESET (RID_REGISTER, specbits);
9766           RIDBIT_RESET (RID_AUTO, specbits);
9767           RIDBIT_RESET (RID_EXTERN, specbits);
9768
9769           if (decl_context == FIELD && IS_SIGNATURE (current_class_type))
9770             {
9771               RIDBIT_RESET (RID_STATIC, specbits);
9772               staticp = 0;
9773             }
9774         }
9775     }
9776   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9777     {
9778       if (toplevel_bindings_p ())
9779         {
9780           /* It's common practice (and completely valid) to have a const
9781              be initialized and declared extern.  */
9782           if (!(type_quals & TYPE_QUAL_CONST))
9783             warning ("`%s' initialized and declared `extern'", name);
9784         }
9785       else
9786         error ("`%s' has both `extern' and initializer", name);
9787     }
9788   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9789            && ! toplevel_bindings_p ())
9790     error ("nested function `%s' declared `extern'", name);
9791   else if (toplevel_bindings_p ())
9792     {
9793       if (RIDBIT_SETP (RID_AUTO, specbits))
9794         error ("top-level declaration of `%s' specifies `auto'", name);
9795     }
9796
9797   if (nclasses > 0 && friendp)
9798     error ("storage class specifiers invalid in friend function declarations");
9799
9800   /* Now figure out the structure of the declarator proper.
9801      Descend through it, creating more complex types, until we reach
9802      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9803
9804   inner_attrs = NULL_TREE;
9805   ignore_attrs = 0;  
9806
9807   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9808          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9809     {
9810       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9811          an INDIRECT_REF (for *...),
9812          a CALL_EXPR (for ...(...)),
9813          an identifier (for the name being declared)
9814          or a null pointer (for the place in an absolute declarator
9815          where the name was omitted).
9816          For the last two cases, we have just exited the loop.
9817
9818          For C++ it could also be
9819          a SCOPE_REF (for class :: ...).  In this case, we have converted
9820          sensible names to types, and those are the values we use to
9821          qualify the member name.
9822          an ADDR_EXPR (for &...),
9823          a BIT_NOT_EXPR (for destructors)
9824
9825          At this point, TYPE is the type of elements of an array,
9826          or for a function to return, or for a pointer to point to.
9827          After this sequence of ifs, TYPE is the type of the
9828          array or function or pointer, and DECLARATOR has had its
9829          outermost layer removed.  */
9830
9831       if (type == error_mark_node)
9832         {
9833           if (TREE_CODE (declarator) == SCOPE_REF)
9834             declarator = TREE_OPERAND (declarator, 1);
9835           else
9836             declarator = TREE_OPERAND (declarator, 0);
9837           continue;
9838         }
9839       if (quals != NULL_TREE
9840           && (declarator == NULL_TREE
9841               || TREE_CODE (declarator) != SCOPE_REF))
9842         {
9843           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9844             ctype = TYPE_METHOD_BASETYPE (type);
9845           if (ctype != NULL_TREE)
9846             {
9847               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9848               ctype = grok_method_quals (ctype, dummy, quals);
9849               type = TREE_TYPE (dummy);
9850               quals = NULL_TREE;
9851             }
9852         }
9853
9854       /* See the comment for the TREE_LIST case, below.  */
9855       if (ignore_attrs)
9856         ignore_attrs = 0;
9857       else if (inner_attrs)
9858         {
9859           decl_attributes (type, inner_attrs, NULL_TREE);
9860           inner_attrs = NULL_TREE;
9861         }
9862
9863       switch (TREE_CODE (declarator))
9864         {
9865         case TREE_LIST:
9866           {
9867             /* We encode a declarator with embedded attributes using
9868                a TREE_LIST.  The attributes apply to the declarator
9869                directly inside them, so we have to skip an iteration
9870                before applying them to the type.  If the declarator just
9871                inside is the declarator-id, we apply the attrs to the
9872                decl itself.  */
9873             inner_attrs = TREE_PURPOSE (declarator);
9874             ignore_attrs = 1;
9875             declarator = TREE_VALUE (declarator);
9876           }
9877           break;
9878
9879         case ARRAY_REF:
9880           {
9881             register tree itype = NULL_TREE;
9882             register tree size = TREE_OPERAND (declarator, 1);
9883             /* The index is a signed object `sizetype' bits wide.  */
9884             tree index_type = signed_type (sizetype);
9885
9886             declarator = TREE_OPERAND (declarator, 0);
9887
9888             /* Check for some types that there cannot be arrays of.  */
9889
9890             if (TREE_CODE (type) == VOID_TYPE)
9891               {
9892                 cp_error ("declaration of `%D' as array of voids", dname);
9893                 type = error_mark_node;
9894               }
9895
9896             if (TREE_CODE (type) == FUNCTION_TYPE)
9897               {
9898                 cp_error ("declaration of `%D' as array of functions", dname);
9899                 type = error_mark_node;
9900               }
9901
9902             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9903                you can't have arrays of references.  If we allowed them,
9904                then we'd be saying x[i] is valid for an array x, but
9905                then you'd have to ask: what does `*(x + i)' mean?  */
9906             if (TREE_CODE (type) == REFERENCE_TYPE)
9907               {
9908                 if (decl_context == TYPENAME)
9909                   cp_error ("cannot make arrays of references");
9910                 else
9911                   cp_error ("declaration of `%D' as array of references",
9912                             dname);
9913                 type = error_mark_node;
9914               }
9915
9916             if (TREE_CODE (type) == OFFSET_TYPE)
9917               {
9918                   cp_error ("declaration of `%D' as array of data members",
9919                             dname);
9920                 type = error_mark_node;
9921               }
9922
9923             if (TREE_CODE (type) == METHOD_TYPE)
9924               {
9925                 cp_error ("declaration of `%D' as array of function members",
9926                           dname);
9927                 type = error_mark_node;
9928               }
9929
9930             if (size == error_mark_node)
9931               type = error_mark_node;
9932             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9933               {
9934                 /* [dcl.array]
9935
9936                    the constant expressions that specify the bounds of
9937                    the arrays can be omitted only for the first member
9938                    of the sequence.  */
9939                 cp_error ("declaration of `%D' as multidimensional array",
9940                           dname);
9941                 cp_error ("must have bounds for all dimensions except the first");
9942                 type = error_mark_node;
9943               }
9944
9945             if (type == error_mark_node)
9946               continue;
9947
9948             if (size)
9949               {
9950                 /* Must suspend_momentary here because the index
9951                    type may need to live until the end of the function.
9952                    For example, it is used in the declaration of a
9953                    variable which requires destructing at the end of
9954                    the function; then build_vec_delete will need this
9955                    value.  */
9956                 int yes = suspend_momentary ();
9957                 /* Might be a cast. */
9958                 if (TREE_CODE (size) == NOP_EXPR
9959                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9960                   size = TREE_OPERAND (size, 0);
9961
9962                 /* If this involves a template parameter, it will be a
9963                    constant at instantiation time, but we don't know
9964                    what the value is yet.  Even if no template
9965                    parameters are involved, we may an expression that
9966                    is not a constant; we don't even simplify `1 + 2'
9967                    when processing a template.  */
9968                 if (processing_template_decl)
9969                   {
9970                     /* Resolve a qualified reference to an enumerator or
9971                        static const data member of ours.  */
9972                     if (TREE_CODE (size) == SCOPE_REF
9973                         && TREE_OPERAND (size, 0) == current_class_type)
9974                       {
9975                         tree t = lookup_field (current_class_type,
9976                                                TREE_OPERAND (size, 1), 0, 0);
9977                         if (t)
9978                           size = t;
9979                       }
9980
9981                     itype = make_node (INTEGER_TYPE);
9982                     TYPE_MIN_VALUE (itype) = size_zero_node;
9983                     TYPE_MAX_VALUE (itype) = build_min
9984                       (MINUS_EXPR, sizetype, size, integer_one_node);
9985                     goto dont_grok_size;
9986                   }
9987
9988                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9989                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9990                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9991                   {
9992                     cp_error ("size of array `%D' has non-integer type",
9993                               dname);
9994                     size = integer_one_node;
9995                   }
9996                 if (TREE_READONLY_DECL_P (size))
9997                   size = decl_constant_value (size);
9998                 if (pedantic && integer_zerop (size))
9999                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
10000                 if (TREE_CONSTANT (size))
10001                   {
10002                     int old_flag_pedantic_errors = flag_pedantic_errors;
10003                     int old_pedantic = pedantic;
10004                     pedantic = flag_pedantic_errors = 1;
10005                     /* Always give overflow errors on array subscripts.  */
10006                     constant_expression_warning (size);
10007                     pedantic = old_pedantic;
10008                     flag_pedantic_errors = old_flag_pedantic_errors;
10009                     if (INT_CST_LT (size, integer_zero_node))
10010                       {
10011                         cp_error ("size of array `%D' is negative", dname);
10012                         size = integer_one_node;
10013                       }
10014                   }
10015                 else
10016                   {
10017                     if (pedantic)
10018                       {
10019                         if (dname)
10020                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
10021                                       dname);
10022                         else
10023                           cp_pedwarn ("ANSI C++ forbids variable-size array");
10024                       }
10025                   }
10026
10027                 itype
10028                   = fold (build_binary_op (MINUS_EXPR,
10029                                            cp_convert (index_type, size),
10030                                            cp_convert (index_type,
10031                                                        integer_one_node), 1));
10032                 if (! TREE_CONSTANT (itype))
10033                   itype = variable_size (itype);
10034                 else if (TREE_OVERFLOW (itype))
10035                   {
10036                     error ("overflow in array dimension");
10037                     TREE_OVERFLOW (itype) = 0;
10038                   }
10039
10040                 /* If we're a parm, we need to have a permanent type so
10041                    mangling checks for re-use will work right.  If both the
10042                    element and index types are permanent, the array type
10043                    will be, too.  */
10044                 if (decl_context == PARM
10045                     && allocation_temporary_p () && TREE_PERMANENT (type))
10046                   {
10047                     push_obstacks (&permanent_obstack, &permanent_obstack);
10048                     itype = build_index_type (itype);
10049                     pop_obstacks ();
10050                   }
10051                 else
10052                   itype = build_index_type (itype);
10053
10054               dont_grok_size:
10055                 resume_momentary (yes);
10056               }
10057
10058             type = build_cplus_array_type (type, itype);
10059             ctype = NULL_TREE;
10060           }
10061           break;
10062
10063         case CALL_EXPR:
10064           {
10065             tree arg_types;
10066             int funcdecl_p;
10067             tree inner_parms = TREE_OPERAND (declarator, 1);
10068             tree inner_decl = TREE_OPERAND (declarator, 0);
10069
10070             /* Declaring a function type.
10071                Make sure we have a valid type for the function to return.  */
10072
10073             /* We now know that the TYPE_QUALS don't apply to the
10074                decl, but to its return type.  */
10075             type_quals = TYPE_UNQUALIFIED;
10076
10077             /* Warn about some types functions can't return.  */
10078
10079             if (TREE_CODE (type) == FUNCTION_TYPE)
10080               {
10081                 error ("`%s' declared as function returning a function", name);
10082                 type = integer_type_node;
10083               }
10084             if (TREE_CODE (type) == ARRAY_TYPE)
10085               {
10086                 error ("`%s' declared as function returning an array", name);
10087                 type = integer_type_node;
10088               }
10089
10090             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10091               inner_decl = TREE_OPERAND (inner_decl, 1);
10092
10093             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
10094               inner_decl = dname;
10095
10096             /* Pick up type qualifiers which should be applied to `this'.  */
10097             quals = TREE_OPERAND (declarator, 2);
10098
10099             /* Pick up the exception specifications.  */
10100             raises = TREE_TYPE (declarator);
10101
10102             /* Say it's a definition only for the CALL_EXPR
10103                closest to the identifier.  */
10104             funcdecl_p
10105               = inner_decl 
10106               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10107                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
10108                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10109             
10110             if (ctype == NULL_TREE
10111                 && decl_context == FIELD
10112                 && funcdecl_p
10113                 && (friendp == 0 || dname == current_class_name))
10114               ctype = current_class_type;
10115
10116             if (ctype && return_type == return_conversion)
10117               TYPE_HAS_CONVERSION (ctype) = 1;
10118             if (ctype && constructor_name (ctype) == dname)
10119               {
10120                 /* We are within a class's scope. If our declarator name
10121                    is the same as the class name, and we are defining
10122                    a function, then it is a constructor/destructor, and
10123                    therefore returns a void type.  */
10124
10125                 if (flags == DTOR_FLAG)
10126                   {
10127                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10128                        not be declared const or volatile.  A destructor
10129                        may not be static.  */
10130                     if (staticp == 2)
10131                       error ("destructor cannot be static member function");
10132                     if (quals)
10133                       {
10134                         cp_error ("destructors may not be `%s'",
10135                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10136                         quals = NULL_TREE;
10137                       }
10138                     if (decl_context == FIELD)
10139                       {
10140                         if (! member_function_or_else (ctype, current_class_type,
10141                                                        "destructor for alien class `%s' cannot be a member"))
10142                           return void_type_node;
10143                       }
10144                   }
10145                 else            /* It's a constructor.  */
10146                   {
10147                     if (explicitp == 1)
10148                       explicitp = 2;
10149                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10150                        not be declared const or volatile.  A constructor may
10151                        not be virtual.  A constructor may not be static.  */
10152                     if (staticp == 2)
10153                       error ("constructor cannot be static member function");
10154                     if (virtualp)
10155                       {
10156                         pedwarn ("constructors cannot be declared virtual");
10157                         virtualp = 0;
10158                       }
10159                     if (quals)
10160                       {
10161                         cp_error ("constructors may not be `%s'",
10162                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10163                         quals = NULL_TREE;
10164                       }
10165                     {
10166                       RID_BIT_TYPE tmp_bits;
10167                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10168                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10169                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10170                       if (RIDBIT_ANY_SET (tmp_bits))
10171                         error ("return value type specifier for constructor ignored");
10172                     }
10173                     type = build_pointer_type (ctype);
10174                     if (decl_context == FIELD
10175                         && IS_SIGNATURE (current_class_type))
10176                       {
10177                         error ("constructor not allowed in signature");
10178                         return void_type_node;
10179                       }                   
10180                     else if (decl_context == FIELD)
10181                       {
10182                         if (! member_function_or_else (ctype, current_class_type,
10183                                                        "constructor for alien class `%s' cannot be member"))
10184                           return void_type_node;
10185                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10186                         if (return_type != return_ctor)
10187                           return NULL_TREE;
10188                       }
10189                   }
10190                 if (decl_context == FIELD)
10191                   staticp = 0;
10192               }
10193             else if (friendp)
10194               {
10195                 if (initialized)
10196                   error ("can't initialize friend function `%s'", name);
10197                 if (virtualp)
10198                   {
10199                     /* Cannot be both friend and virtual.  */
10200                     error ("virtual functions cannot be friends");
10201                     RIDBIT_RESET (RID_FRIEND, specbits);
10202                     friendp = 0;
10203                   }
10204                 if (decl_context == NORMAL)
10205                   error ("friend declaration not in class definition");
10206                 if (current_function_decl && funcdef_flag)
10207                   cp_error ("can't define friend function `%s' in a local class definition",
10208                             name);
10209               }
10210
10211             /* Construct the function type and go to the next
10212                inner layer of declarator.  */
10213
10214             declarator = TREE_OPERAND (declarator, 0);
10215
10216             /* FIXME: This is where default args should be fully
10217                processed.  */
10218
10219             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10220
10221             if (declarator && flags == DTOR_FLAG)
10222               {
10223                 /* A destructor declared in the body of a class will
10224                    be represented as a BIT_NOT_EXPR.  But, we just
10225                    want the underlying IDENTIFIER.  */
10226                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10227                   declarator = TREE_OPERAND (declarator, 0);
10228                 
10229                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10230                   arg_types = void_list_node;
10231                 else if (arg_types == NULL_TREE
10232                          || arg_types != void_list_node)
10233                   {
10234                     cp_error ("destructors may not have parameters");
10235                     arg_types = void_list_node;
10236                     last_function_parms = NULL_TREE;
10237                   }
10238               }
10239
10240             /* ANSI says that `const int foo ();'
10241                does not make the function foo const.  */
10242             type = build_function_type (type, arg_types);
10243
10244             {
10245               tree t;
10246               for (t = arg_types; t; t = TREE_CHAIN (t))
10247                 if (TREE_PURPOSE (t)
10248                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10249                   {
10250                     add_defarg_fn (type);
10251                     break;
10252                   }
10253             }
10254           }
10255           break;
10256
10257         case ADDR_EXPR:
10258         case INDIRECT_REF:
10259           /* Filter out pointers-to-references and references-to-references.
10260              We can get these if a TYPE_DECL is used.  */
10261
10262           if (TREE_CODE (type) == REFERENCE_TYPE)
10263             {
10264               error ("cannot declare %s to references",
10265                      TREE_CODE (declarator) == ADDR_EXPR
10266                      ? "references" : "pointers");
10267               declarator = TREE_OPERAND (declarator, 0);
10268               continue;
10269             }
10270
10271           if (TREE_CODE (type) == OFFSET_TYPE
10272               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10273                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10274             {
10275               cp_error ("cannot declare pointer to `%#T' member",
10276                         TREE_TYPE (type));
10277               type = TREE_TYPE (type);
10278             }
10279
10280           /* Merge any constancy or volatility into the target type
10281              for the pointer.  */
10282
10283           /* We now know that the TYPE_QUALS don't apply to the decl,
10284              but to the target of the pointer.  */
10285           type_quals = TYPE_UNQUALIFIED;
10286
10287           if (IS_SIGNATURE (type))
10288             {
10289               if (TREE_CODE (declarator) == ADDR_EXPR)
10290                 {
10291                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10292                       && TYPE_SIZE (type))
10293                     cp_warning ("empty signature `%T' used in signature reference declaration",
10294                                 type);
10295 #if 0
10296                   type = build_signature_reference_type (type);
10297 #else
10298                   sorry ("signature reference");
10299                   return NULL_TREE;
10300 #endif
10301                 }
10302               else
10303                 {
10304                   if (CLASSTYPE_METHOD_VEC (type) == NULL_TREE
10305                       && TYPE_SIZE (type))
10306                     cp_warning ("empty signature `%T' used in signature pointer declaration",
10307                                 type);
10308                   type = build_signature_pointer_type (type);
10309                 }
10310             }
10311           else if (TREE_CODE (declarator) == ADDR_EXPR)
10312             {
10313               if (TREE_CODE (type) == VOID_TYPE)
10314                 error ("invalid type: `void &'");
10315               else
10316                 type = build_reference_type (type);
10317             }
10318           else if (TREE_CODE (type) == METHOD_TYPE)
10319             type = build_ptrmemfunc_type (build_pointer_type (type));
10320           else
10321             type = build_pointer_type (type);
10322
10323           /* Process a list of type modifier keywords (such as
10324              const or volatile) that were given inside the `*' or `&'.  */
10325
10326           if (TREE_TYPE (declarator))
10327             {
10328               register tree typemodlist;
10329               int erred = 0;
10330
10331               constp = 0;
10332               volatilep = 0;
10333               restrictp = 0;
10334               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10335                    typemodlist = TREE_CHAIN (typemodlist))
10336                 {
10337                   tree qualifier = TREE_VALUE (typemodlist);
10338
10339                   if (qualifier == ridpointers[(int) RID_CONST])
10340                     constp++;
10341                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10342                     volatilep++;
10343                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10344                     restrictp++;
10345                   else if (!erred)
10346                     {
10347                       erred = 1;
10348                       error ("invalid type modifier within pointer declarator");
10349                     }
10350                 }
10351               if (constp > 1)
10352                 pedwarn ("duplicate `const'");
10353               if (volatilep > 1)
10354                 pedwarn ("duplicate `volatile'");
10355               if (restrictp > 1)
10356                 pedwarn ("duplicate `restrict'");
10357
10358               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10359                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10360                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10361               if (TREE_CODE (declarator) == ADDR_EXPR
10362                   && (constp || volatilep))
10363                 {
10364                   if (constp)
10365                     pedwarn ("discarding `const' applied to a reference");
10366                   if (volatilep)
10367                     pedwarn ("discarding `volatile' applied to a reference");
10368                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10369                 }
10370               type = cp_build_qualified_type (type, type_quals);
10371             }
10372           declarator = TREE_OPERAND (declarator, 0);
10373           ctype = NULL_TREE;
10374           break;
10375
10376         case SCOPE_REF:
10377           {
10378             /* We have converted type names to NULL_TREE if the
10379                name was bogus, or to a _TYPE node, if not.
10380
10381                The variable CTYPE holds the type we will ultimately
10382                resolve to.  The code here just needs to build
10383                up appropriate member types.  */
10384             tree sname = TREE_OPERAND (declarator, 1);
10385             tree t;
10386
10387             /* Destructors can have their visibilities changed as well.  */
10388             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10389               sname = TREE_OPERAND (sname, 0);
10390
10391             if (TREE_COMPLEXITY (declarator) == 0)
10392               /* This needs to be here, in case we are called
10393                  multiple times.  */ ;
10394             else if (TREE_COMPLEXITY (declarator) == -1)
10395               /* Namespace member. */
10396               pop_decl_namespace ();
10397             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10398               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10399             else if (! IS_AGGR_TYPE_CODE
10400                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10401               ;
10402             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10403               {
10404                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10405                    that refer to ctype.  They couldn't be resolved earlier
10406                    because we hadn't pushed into the class yet.
10407                    Example: resolve 'B<T>::type' in
10408                    'B<typename B<T>::type> B<T>::f () { }'.  */
10409                 if (current_template_parms
10410                     && uses_template_parms (type)
10411                     && uses_template_parms (current_class_type))
10412                   {
10413                     tree args = current_template_args ();
10414                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10415                   }
10416
10417                 /* This pop_nested_class corresponds to the
10418                    push_nested_class used to push into class scope for
10419                    parsing the argument list of a function decl, in
10420                    qualified_id.  */
10421                 pop_nested_class (1);
10422                 TREE_COMPLEXITY (declarator) = current_class_depth;
10423               }
10424             else
10425               my_friendly_abort (16);
10426
10427             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10428               {
10429                 /* We had a reference to a global decl, or
10430                    perhaps we were given a non-aggregate typedef,
10431                    in which case we cleared this out, and should just
10432                    keep going as though it wasn't there.  */
10433                 declarator = sname;
10434                 continue;
10435               }
10436             ctype = TREE_OPERAND (declarator, 0);
10437
10438             t = ctype;
10439             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10440               {
10441                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10442                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10443                   template_count += 1;
10444                 t = TYPE_MAIN_DECL (t);
10445                 if (DECL_LANG_SPECIFIC (t))
10446                   t = DECL_CLASS_CONTEXT (t);
10447                 else
10448                   t = NULL_TREE;
10449               }
10450
10451             if (sname == NULL_TREE)
10452               goto done_scoping;
10453
10454             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10455               {
10456                 /* This is the `standard' use of the scoping operator:
10457                    basetype :: member .  */
10458
10459                 if (ctype == current_class_type)
10460                   {
10461                     /* class A {
10462                          void A::f ();
10463                        };
10464
10465                        Is this ill-formed?  */
10466
10467                     if (pedantic)
10468                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10469                                   ctype, name);
10470                   }
10471                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10472                   {
10473                     if (current_class_type == NULL_TREE
10474                         || friendp)
10475                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10476                                                       TYPE_ARG_TYPES (type));
10477                     else
10478                       {
10479                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10480                                   ctype, name, current_class_type);
10481                         return void_type_node;
10482                       }
10483                   }
10484                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10485                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10486                   {
10487                     /* Have to move this code elsewhere in this function.
10488                        this code is used for i.e., typedef int A::M; M *pm;
10489
10490                        It is?  How? jason 10/2/94 */
10491
10492                     if (current_class_type)
10493                       {
10494                         cp_error ("cannot declare member `%T::%s' within `%T'",
10495                                   ctype, name, current_class_type);
10496                         return void_type_node;
10497                       }
10498                     type = build_offset_type (ctype, type);
10499                   }
10500                 else if (uses_template_parms (ctype))
10501                   {
10502                     if (TREE_CODE (type) == FUNCTION_TYPE)
10503                       type
10504                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10505                                                    TYPE_ARG_TYPES (type));
10506                   }
10507                 else
10508                   {
10509                     cp_error ("structure `%T' not yet defined", ctype);
10510                     return error_mark_node;
10511                   }
10512
10513                 declarator = sname;
10514               }
10515             else if (TREE_CODE (sname) == SCOPE_REF)
10516               my_friendly_abort (17);
10517             else
10518               {
10519               done_scoping:
10520                 declarator = TREE_OPERAND (declarator, 1);
10521                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10522                   /* In this case, we will deal with it later.  */
10523                   ;
10524                 else
10525                   {
10526                     if (TREE_CODE (type) == FUNCTION_TYPE)
10527                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10528                                                       TYPE_ARG_TYPES (type));
10529                     else
10530                       type = build_offset_type (ctype, type);
10531                   }
10532               }
10533           }
10534           break;
10535
10536         case BIT_NOT_EXPR:
10537           declarator = TREE_OPERAND (declarator, 0);
10538           break;
10539
10540         case RECORD_TYPE:
10541         case UNION_TYPE:
10542         case ENUMERAL_TYPE:
10543           declarator = NULL_TREE;
10544           break;
10545
10546         case ERROR_MARK:
10547           declarator = NULL_TREE;
10548           break;
10549
10550         default:
10551           my_friendly_abort (158);
10552         }
10553     }
10554
10555   /* See the comment for the TREE_LIST case, above.  */
10556   if (inner_attrs)
10557     {
10558       if (! ignore_attrs)
10559         decl_attributes (type, inner_attrs, NULL_TREE);
10560       else if (attrlist)
10561         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10562       else
10563         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10564     }
10565
10566   if (explicitp == 1)
10567     {
10568       error ("only constructors can be declared `explicit'");
10569       explicitp = 0;
10570     }
10571
10572   /* Now TYPE has the actual type.  */
10573
10574   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10575
10576   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10577     {
10578       if (type_quals & TYPE_QUAL_CONST)
10579         {
10580           error ("const `%s' cannot be declared `mutable'", name);
10581           RIDBIT_RESET (RID_MUTABLE, specbits);
10582         }
10583       else if (staticp)
10584         {
10585           error ("static `%s' cannot be declared `mutable'", name);
10586           RIDBIT_RESET (RID_MUTABLE, specbits);
10587         }
10588     }
10589
10590   if (declarator == NULL_TREE
10591       || TREE_CODE (declarator) == IDENTIFIER_NODE
10592       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10593           && (TREE_CODE (type) == FUNCTION_TYPE
10594               || TREE_CODE (type) == METHOD_TYPE)))
10595     /* OK */;
10596   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10597     {
10598       cp_error ("template-id `%D' used as a declarator", declarator);
10599       declarator = dname;
10600     }
10601   else
10602     my_friendly_abort (990210);
10603
10604   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10605     {
10606       tree decl;
10607
10608       /* Note that the grammar rejects storage classes
10609          in typenames, fields or parameters.  */
10610       if (current_lang_name == lang_name_java)
10611         TYPE_FOR_JAVA (type) = 1;
10612
10613       if (decl_context == FIELD)
10614         {
10615           if (declarator == constructor_name (current_class_type))
10616             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10617                         declarator);
10618           decl = build_lang_decl (TYPE_DECL, declarator, type);
10619           if (IS_SIGNATURE (current_class_type) && opaque_typedef)
10620             SIGNATURE_HAS_OPAQUE_TYPEDECLS (current_class_type) = 1;
10621         }
10622       else
10623         {
10624           /* Make sure this typedef lives as long as its type,
10625              since it might be used as a template parameter. */
10626           if (type != error_mark_node)
10627             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10628           decl = build_decl (TYPE_DECL, declarator, type);
10629           if (type != error_mark_node)
10630             pop_obstacks ();
10631         }
10632
10633       /* If the user declares "struct {...} foo" then `foo' will have
10634          an anonymous name.  Fill that name in now.  Nothing can
10635          refer to it, so nothing needs know about the name change.
10636          The TYPE_NAME field was filled in by build_struct_xref.  */
10637       if (type != error_mark_node
10638           && TYPE_NAME (type)
10639           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10640           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
10641         {
10642           /* FIXME: This is bogus; we should not be doing this for
10643                     cv-qualified types.  */
10644
10645           /* For anonymous structs that are cv-qualified, need to use
10646              TYPE_MAIN_VARIANT so that name will mangle correctly. As
10647              type not referenced after this block, don't bother
10648              resetting type to original type, ie. TREE_TYPE (decl). */
10649           type = TYPE_MAIN_VARIANT (type);
10650
10651           /* Replace the anonymous name with the real name everywhere.  */
10652           lookup_tag_reverse (type, declarator);
10653           TYPE_NAME (type) = decl;
10654
10655           if (TYPE_LANG_SPECIFIC (type))
10656             TYPE_WAS_ANONYMOUS (type) = 1;
10657
10658           /* If this is a typedef within a template class, the nested
10659              type is a (non-primary) template.  The name for the
10660              template needs updating as well.  */
10661           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10662             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10663               = TYPE_IDENTIFIER (type);
10664
10665           /* XXX Temporarily set the scope. 
10666              When returning, start_decl expects it as NULL_TREE,
10667              and will then then set it using pushdecl. */
10668           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10669           if (current_class_type)
10670             DECL_CONTEXT (decl) = current_class_type;
10671           else
10672             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10673
10674           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10675           DECL_ASSEMBLER_NAME (decl)
10676             = get_identifier (build_overload_name (type, 1, 1));
10677           DECL_CONTEXT (decl) = NULL_TREE;
10678
10679           /* FIXME remangle member functions; member functions of a
10680              type with external linkage have external linkage.  */
10681         }
10682
10683       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10684         {
10685           cp_error_at ("typedef name may not be class-qualified", decl);
10686           return NULL_TREE;
10687         }
10688       else if (quals)
10689         {
10690           if (ctype == NULL_TREE)
10691             {
10692               if (TREE_CODE (type) != METHOD_TYPE)
10693                 cp_error_at ("invalid type qualifier for non-method type", decl);
10694               else
10695                 ctype = TYPE_METHOD_BASETYPE (type);
10696             }
10697           if (ctype != NULL_TREE)
10698             grok_method_quals (ctype, decl, quals);
10699         }
10700
10701       if (RIDBIT_SETP (RID_SIGNED, specbits)
10702           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10703         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10704
10705       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10706         error ("non-object member `%s' cannot be declared mutable", name);
10707
10708       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10709                       inlinep, friendp, raises != NULL_TREE);
10710
10711       if (initialized)
10712         error ("typedef declaration includes an initializer");
10713
10714       return decl;
10715     }
10716
10717   /* Detect the case of an array type of unspecified size
10718      which came, as such, direct from a typedef name.
10719      We must copy the type, so that each identifier gets
10720      a distinct type, so that each identifier's size can be
10721      controlled separately by its own initializer.  */
10722
10723   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10724       && TYPE_DOMAIN (type) == NULL_TREE)
10725     {
10726       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10727     }
10728
10729   /* If this is a type name (such as, in a cast or sizeof),
10730      compute the type and return it now.  */
10731
10732   if (decl_context == TYPENAME)
10733     {
10734       /* Note that the grammar rejects storage classes
10735          in typenames, fields or parameters.  */
10736       if (type_quals != TYPE_UNQUALIFIED)
10737         {
10738           if (IS_SIGNATURE (type))
10739             error ("type qualifiers specified for signature type");
10740           type_quals = TYPE_UNQUALIFIED;
10741         }
10742
10743       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10744       if (friendp)
10745         {
10746           if (type_quals != TYPE_UNQUALIFIED)
10747             {
10748               cp_error ("type qualifiers specified for friend class declaration");
10749               type_quals = TYPE_UNQUALIFIED;
10750             }
10751           if (inlinep)
10752             {
10753               cp_error ("`inline' specified for friend class declaration");
10754               inlinep = 0;
10755             }
10756
10757           /* Only try to do this stuff if we didn't already give up.  */
10758           if (type != integer_type_node)
10759             {
10760               /* A friendly class?  */
10761               if (current_class_type)
10762                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10763               else
10764                 error ("trying to make class `%s' a friend of global scope",
10765                        TYPE_NAME_STRING (type));
10766               type = void_type_node;
10767             }
10768         }
10769       else if (quals)
10770         {
10771           tree dummy = build_decl (TYPE_DECL, declarator, type);
10772           if (ctype == NULL_TREE)
10773             {
10774               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10775               ctype = TYPE_METHOD_BASETYPE (type);
10776             }
10777           grok_method_quals (ctype, dummy, quals);
10778           type = TREE_TYPE (dummy);
10779         }
10780
10781       return type;
10782     }
10783   else if (declarator == NULL_TREE && decl_context != PARM
10784            && decl_context != CATCHPARM
10785            && TREE_CODE (type) != UNION_TYPE
10786            && ! bitfield)
10787     {
10788       cp_error ("abstract declarator `%T' used as declaration", type);
10789       declarator = make_anon_name ();
10790     }
10791
10792   /* `void' at top level (not within pointer)
10793      is allowed only in typedefs or type names.
10794      We don't complain about parms either, but that is because
10795      a better error message can be made later.  */
10796
10797   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10798     {
10799       if (! declarator)
10800         error ("unnamed variable or field declared void");
10801       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10802         {
10803           if (IDENTIFIER_OPNAME_P (declarator))
10804             my_friendly_abort (356);
10805           else
10806             error ("variable or field `%s' declared void", name);
10807         }
10808       else
10809         error ("variable or field declared void");
10810       type = integer_type_node;
10811     }
10812
10813   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10814      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10815
10816   if (decl_context == PARM || decl_context == CATCHPARM)
10817     {
10818       if (ctype || in_namespace)
10819         error ("cannot use `::' in parameter declaration");
10820
10821       /* A parameter declared as an array of T is really a pointer to T.
10822          One declared as a function is really a pointer to a function.
10823          One declared as a member is really a pointer to member.  */
10824
10825       if (TREE_CODE (type) == ARRAY_TYPE)
10826         {
10827           /* Transfer const-ness of array into that of type pointed to.  */
10828           type = build_pointer_type (TREE_TYPE (type));
10829           type_quals = TYPE_UNQUALIFIED;
10830         }
10831       else if (TREE_CODE (type) == FUNCTION_TYPE)
10832         type = build_pointer_type (type);
10833       else if (TREE_CODE (type) == OFFSET_TYPE)
10834         type = build_pointer_type (type);
10835       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10836         {
10837           error ("declaration of `%s' as void", name);
10838           return NULL_TREE;
10839         }
10840     }
10841   
10842   {
10843     register tree decl;
10844
10845     if (decl_context == PARM)
10846       {
10847         decl = build_decl (PARM_DECL, declarator, type);
10848
10849         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10850                         inlinep, friendp, raises != NULL_TREE);
10851         if (current_class_type
10852             && IS_SIGNATURE (current_class_type))
10853           {
10854             if (inlinep)
10855               error ("parameter of signature member function declared `inline'");
10856             if (RIDBIT_SETP (RID_AUTO, specbits))
10857               error ("parameter of signature member function declared `auto'");
10858             if (RIDBIT_SETP (RID_REGISTER, specbits))
10859               error ("parameter of signature member function declared `register'");
10860           }
10861
10862         /* Compute the type actually passed in the parmlist,
10863            for the case where there is no prototype.
10864            (For example, shorts and chars are passed as ints.)
10865            When there is a prototype, this is overridden later.  */
10866
10867         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10868       }
10869     else if (decl_context == FIELD)
10870       {
10871         if (type == error_mark_node)
10872           {
10873             /* Happens when declaring arrays of sizes which
10874                are error_mark_node, for example.  */
10875             decl = NULL_TREE;
10876           }
10877         else if (in_namespace && !friendp)
10878           {
10879             /* Something like struct S { int N::j; };  */
10880             cp_error ("invalid use of `::'");
10881             decl = NULL_TREE;
10882           }
10883         else if (TREE_CODE (type) == FUNCTION_TYPE)
10884           {
10885             int publicp = 0;
10886             tree function_context;
10887
10888             /* We catch the others as conflicts with the builtin
10889                typedefs.  */
10890             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10891               {
10892                 cp_error ("function `%D' cannot be declared friend",
10893                           declarator);
10894                 friendp = 0;
10895               }
10896
10897             if (friendp == 0)
10898               {
10899                 if (ctype == NULL_TREE)
10900                   ctype = current_class_type;
10901
10902                 if (ctype == NULL_TREE)
10903                   {
10904                     cp_error ("can't make `%D' into a method -- not in a class",
10905                               declarator);
10906                     return void_type_node;
10907                   }
10908
10909                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10910                    ARM 9.5 */
10911                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10912                   {
10913                     cp_error ("function `%D' declared virtual inside a union",
10914                               declarator);
10915                     return void_type_node;
10916                   }
10917
10918                 if (declarator == ansi_opname[(int) NEW_EXPR]
10919                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10920                     || declarator == ansi_opname[(int) DELETE_EXPR]
10921                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10922                   {
10923                     if (virtualp)
10924                       {
10925                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10926                                   declarator);
10927                         virtualp = 0;
10928                       }
10929                   }
10930                 else if (staticp < 2)
10931                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10932                                                   TYPE_ARG_TYPES (type));
10933               }
10934
10935             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10936             function_context = (ctype != NULL_TREE) ? 
10937               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10938             publicp = (! friendp || ! staticp)
10939               && function_context == NULL_TREE;
10940             decl = grokfndecl (ctype, type, 
10941                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10942                                ? declarator : dname,
10943                                declarator,
10944                                virtualp, flags, quals, raises, attrlist,
10945                                friendp ? -1 : 0, friendp, publicp, inlinep,
10946                                funcdef_flag, template_count, in_namespace);
10947             if (decl == NULL_TREE)
10948               return decl;
10949 #if 0
10950             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10951             /* The decl and setting of decl_machine_attr is also turned off.  */
10952             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10953 #endif
10954
10955             /* [class.conv.ctor]
10956
10957                A constructor declared without the function-specifier
10958                explicit that can be called with a single parameter
10959                specifies a conversion from the type of its first
10960                parameter to the type of its class.  Such a constructor
10961                is called a converting constructor.  */
10962             if (explicitp == 2)
10963               DECL_NONCONVERTING_P (decl) = 1;
10964             else if (DECL_CONSTRUCTOR_P (decl))
10965               {
10966                 /* The constructor can be called with exactly one
10967                    parameter if there is at least one parameter, and
10968                    any subsequent parameters have default arguments.
10969                    We don't look at the first parameter, which is
10970                    really just the `this' parameter for the new
10971                    object.  */
10972                 tree arg_types = 
10973                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10974
10975                 /* Skip the `in_chrg' argument too, if present.  */
10976                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10977                   arg_types = TREE_CHAIN (arg_types);
10978
10979                 if (arg_types == void_list_node
10980                     || (arg_types 
10981                         && TREE_CHAIN (arg_types) 
10982                         && TREE_CHAIN (arg_types) != void_list_node
10983                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10984                   DECL_NONCONVERTING_P (decl) = 1;
10985               }
10986           }
10987         else if (TREE_CODE (type) == METHOD_TYPE)
10988           {
10989             /* We only get here for friend declarations of
10990                members of other classes.  */
10991             /* All method decls are public, so tell grokfndecl to set
10992                TREE_PUBLIC, also.  */
10993             decl = grokfndecl (ctype, type, declarator, declarator,
10994                                virtualp, flags, quals, raises, attrlist,
10995                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10996                                template_count, in_namespace);
10997             if (decl == NULL_TREE)
10998               return NULL_TREE;
10999           }
11000         else if (!staticp && ! processing_template_decl
11001                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
11002                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11003           {
11004             if (declarator)
11005               cp_error ("field `%D' has incomplete type", declarator);
11006             else
11007               cp_error ("name `%T' has incomplete type", type);
11008
11009             /* If we're instantiating a template, tell them which
11010                instantiation made the field's type be incomplete.  */
11011             if (current_class_type
11012                 && TYPE_NAME (current_class_type)
11013                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11014                 && declspecs && TREE_VALUE (declspecs)
11015                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11016               cp_error ("  in instantiation of template `%T'",
11017                         current_class_type);
11018
11019             type = error_mark_node;
11020             decl = NULL_TREE;
11021           }
11022         else
11023           {
11024             if (friendp)
11025               {
11026                 error ("`%s' is neither function nor method; cannot be declared friend",
11027                        IDENTIFIER_POINTER (declarator));
11028                 friendp = 0;
11029               }
11030             decl = NULL_TREE;
11031           }
11032
11033         if (friendp)
11034           {
11035             /* Friends are treated specially.  */
11036             if (ctype == current_class_type)
11037               warning ("member functions are implicitly friends of their class");
11038             else
11039               {
11040                 tree t = NULL_TREE;
11041                 if (decl && DECL_NAME (decl))
11042                   {
11043                     if (template_class_depth (current_class_type) == 0)
11044                       {
11045                         decl 
11046                           = check_explicit_specialization 
11047                           (declarator, decl,
11048                            template_count, 2 * (funcdef_flag != 0) + 4);
11049                         if (decl == error_mark_node)
11050                           return error_mark_node;
11051                       }
11052
11053                     t = do_friend (ctype, declarator, decl,
11054                                    last_function_parms, flags, quals,
11055                                    funcdef_flag);
11056                   }
11057                 if (t && funcdef_flag)
11058                   return t;
11059                 
11060                 return void_type_node;
11061               }
11062           }
11063
11064         /* Structure field.  It may not be a function, except for C++ */
11065
11066         if (decl == NULL_TREE)
11067           {
11068             if (initialized)
11069               {
11070                 if (!staticp)
11071                   {
11072                     /* An attempt is being made to initialize a non-static
11073                        member.  But, from [class.mem]:
11074                        
11075                        4 A member-declarator can contain a
11076                        constant-initializer only if it declares a static
11077                        member (_class.static_) of integral or enumeration
11078                        type, see _class.static.data_.  
11079
11080                        This used to be relatively common practice, but
11081                        the rest of the compiler does not correctly
11082                        handle the initialization unless the member is
11083                        static so we make it static below.  */
11084                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
11085                                 declarator);
11086                     cp_pedwarn ("making `%D' static", declarator);
11087                     staticp = 1;
11088                   }
11089
11090                 if (uses_template_parms (type))
11091                   /* We'll check at instantiation time.  */
11092                   ;
11093                 else if (check_static_variable_definition (declarator,
11094                                                            type))
11095                   /* If we just return the declaration, crashes
11096                      will sometimes occur.  We therefore return
11097                      void_type_node, as if this was a friend
11098                      declaration, to cause callers to completely
11099                      ignore this declaration.  */
11100                   return void_type_node;
11101               }
11102
11103             /* 9.2p13 [class.mem] */
11104             if (declarator == constructor_name (current_class_type)
11105                 /* Divergence from the standard:  In extern "C", we
11106                    allow non-static data members here, because C does
11107                    and /usr/include/netinet/in.h uses that.  */
11108                 && (staticp || ! in_system_header))
11109               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
11110                           declarator);
11111
11112             if (staticp)
11113               {
11114                 /* C++ allows static class members.
11115                    All other work for this is done by grokfield.
11116                    This VAR_DCL is built by build_lang_field_decl.
11117                    All other VAR_DECLs are built by build_decl.  */
11118                 decl = build_lang_field_decl (VAR_DECL, declarator, type);
11119                 TREE_STATIC (decl) = 1;
11120                 /* In class context, 'static' means public access.  */
11121                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11122               }
11123             else
11124               {
11125                 decl = build_lang_field_decl (FIELD_DECL, declarator, type);
11126                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11127                   {
11128                     DECL_MUTABLE_P (decl) = 1;
11129                     RIDBIT_RESET (RID_MUTABLE, specbits);
11130                   }
11131               }
11132
11133             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11134                             inlinep, friendp, raises != NULL_TREE);
11135           }
11136       }
11137     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11138       {
11139         tree original_name;
11140         int publicp = 0;
11141
11142         if (! declarator)
11143           return NULL_TREE;
11144
11145         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11146           original_name = dname;
11147         else
11148           original_name = declarator;
11149
11150         if (RIDBIT_SETP (RID_AUTO, specbits))
11151           error ("storage class `auto' invalid for function `%s'", name);
11152         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11153           error ("storage class `register' invalid for function `%s'", name);
11154
11155         /* Function declaration not at top level.
11156            Storage classes other than `extern' are not allowed
11157            and `extern' makes no difference.  */
11158         if (! toplevel_bindings_p ()
11159             && (RIDBIT_SETP (RID_STATIC, specbits)
11160                 || RIDBIT_SETP (RID_INLINE, specbits))
11161             && pedantic)
11162           {
11163             if (RIDBIT_SETP (RID_STATIC, specbits))
11164               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11165             else
11166               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11167           }
11168         
11169         if (ctype == NULL_TREE)
11170           {
11171             if (virtualp)
11172               {
11173                 error ("virtual non-class function `%s'", name);
11174                 virtualp = 0;
11175               }
11176           }
11177         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11178           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11179                                           TYPE_ARG_TYPES (type));
11180
11181         /* Record presence of `static'.  */
11182         publicp = (ctype != NULL_TREE
11183                    || RIDBIT_SETP (RID_EXTERN, specbits)
11184                    || !RIDBIT_SETP (RID_STATIC, specbits));
11185
11186         decl = grokfndecl (ctype, type, original_name, declarator,
11187                            virtualp, flags, quals, raises, attrlist,
11188                            1, friendp,
11189                            publicp, inlinep, funcdef_flag, 
11190                            template_count, in_namespace);
11191         if (decl == NULL_TREE)
11192           return NULL_TREE;
11193
11194         if (staticp == 1)
11195           {
11196             int illegal_static = 0;
11197
11198             /* Don't allow a static member function in a class, and forbid
11199                declaring main to be static.  */
11200             if (TREE_CODE (type) == METHOD_TYPE)
11201               {
11202                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11203                 illegal_static = 1;
11204               }
11205             else if (current_function_decl)
11206               {
11207                 /* FIXME need arm citation */
11208                 error ("cannot declare static function inside another function");
11209                 illegal_static = 1;
11210               }
11211
11212             if (illegal_static)
11213               {
11214                 staticp = 0;
11215                 RIDBIT_RESET (RID_STATIC, specbits);
11216               }
11217           }
11218       }
11219     else
11220       {
11221         /* It's a variable.  */
11222
11223         /* An uninitialized decl with `extern' is a reference.  */
11224         decl = grokvardecl (type, declarator, &specbits, 
11225                             initialized, 
11226                             (type_quals & TYPE_QUAL_CONST) != 0, 
11227                             in_namespace);
11228         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11229                         inlinep, friendp, raises != NULL_TREE);
11230
11231         if (ctype)
11232           {
11233             DECL_CONTEXT (decl) = ctype;
11234             if (staticp == 1)
11235               {
11236                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11237                 staticp = 0;
11238                 RIDBIT_RESET (RID_STATIC, specbits);
11239               }
11240             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11241               {
11242                 cp_error ("static member `%D' declared `register'", decl);
11243                 RIDBIT_RESET (RID_REGISTER, specbits);
11244               }
11245             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11246               {
11247                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11248                             decl);
11249                 RIDBIT_RESET (RID_EXTERN, specbits);
11250               }
11251           }
11252       }
11253
11254     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11255       {
11256         error ("`%s' cannot be declared mutable", name);
11257       }
11258
11259     /* Record `register' declaration for warnings on &
11260        and in case doing stupid register allocation.  */
11261
11262     if (RIDBIT_SETP (RID_REGISTER, specbits))
11263       DECL_REGISTER (decl) = 1;
11264
11265     if (RIDBIT_SETP (RID_EXTERN, specbits))
11266       DECL_THIS_EXTERN (decl) = 1;
11267
11268     if (RIDBIT_SETP (RID_STATIC, specbits))
11269       DECL_THIS_STATIC (decl) = 1;
11270
11271     /* Record constancy and volatility.  */
11272     /* FIXME: Disallow `restrict' pointer-to-member declarations.  */
11273     c_apply_type_quals_to_decl (type_quals, decl);
11274
11275     return decl;
11276   }
11277 }
11278 \f
11279 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11280    An empty exprlist is a parmlist.  An exprlist which
11281    contains only identifiers at the global level
11282    is a parmlist.  Otherwise, it is an exprlist.  */
11283
11284 int
11285 parmlist_is_exprlist (exprs)
11286      tree exprs;
11287 {
11288   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11289     return 0;
11290
11291   if (toplevel_bindings_p ())
11292     {
11293       /* At the global level, if these are all identifiers,
11294          then it is a parmlist.  */
11295       while (exprs)
11296         {
11297           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11298             return 1;
11299           exprs = TREE_CHAIN (exprs);
11300         }
11301       return 0;
11302     }
11303   return 1;
11304 }
11305
11306 /* Subroutine of start_function.  Ensure that each of the parameter
11307    types (as listed in PARMS) is complete, as is required for a
11308    function definition.  */
11309
11310 static void
11311 require_complete_types_for_parms (parms)
11312      tree parms;
11313 {
11314   while (parms)
11315     {
11316       tree type = TREE_TYPE (parms);
11317       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11318         {
11319           if (DECL_NAME (parms))
11320             error ("parameter `%s' has incomplete type",
11321                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11322           else
11323             error ("parameter has incomplete type");
11324           TREE_TYPE (parms) = error_mark_node;
11325         }
11326       else
11327         layout_decl (parms, 0);
11328
11329       parms = TREE_CHAIN (parms);
11330     }
11331 }
11332
11333 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11334    NULL_TREE otherwise.  */
11335
11336 static tree
11337 local_variable_p (t)
11338      tree t;
11339 {
11340   if ((TREE_CODE (t) == VAR_DECL 
11341        /* A VAR_DECL with a context that is a _TYPE is a static data
11342           member.  */
11343        && !TYPE_P (CP_DECL_CONTEXT (t))
11344        /* Any other non-local variable must be at namespace scope.  */
11345        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11346       || (TREE_CODE (t) == PARM_DECL))
11347     return t;
11348
11349   return NULL_TREE;
11350 }
11351
11352 /* Check that ARG, which is a default-argument expression for a
11353    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11354    something goes wrong.  DECL may also be a _TYPE node, rather than a
11355    DECL, if there is no DECL available.  */
11356
11357 tree
11358 check_default_argument (decl, arg)
11359      tree decl;
11360      tree arg;
11361 {
11362   tree var;
11363   tree decl_type;
11364
11365   if (TREE_CODE (arg) == DEFAULT_ARG)
11366     /* We get a DEFAULT_ARG when looking at an in-class declaration
11367        with a default argument.  Ignore the argument for now; we'll
11368        deal with it after the class is complete.  */
11369     return arg;
11370
11371   if (processing_template_decl || uses_template_parms (arg))
11372     /* We don't do anything checking until instantiation-time.  Note
11373        that there may be uninstantiated arguments even for an
11374        instantiated function, since default arguments are not
11375        instantiated until they are needed.  */
11376     return arg;
11377
11378   if (TYPE_P (decl))
11379     {
11380       decl_type = decl;
11381       decl = NULL_TREE;
11382     }
11383   else
11384     decl_type = TREE_TYPE (decl);
11385
11386   if (arg == error_mark_node 
11387       || decl == error_mark_node
11388       || TREE_TYPE (arg) == error_mark_node
11389       || decl_type == error_mark_node)
11390     /* Something already went wrong.  There's no need to check
11391        further.  */
11392     return error_mark_node;
11393
11394   /* [dcl.fct.default]
11395      
11396      A default argument expression is implicitly converted to the
11397      parameter type.  */
11398   if (!TREE_TYPE (arg)
11399       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11400     {
11401       if (decl)
11402         cp_error ("default argument for `%#D' has type `%T'", 
11403                   decl, TREE_TYPE (arg));
11404       else
11405         cp_error ("default argument for paramter of type `%T' has type `%T'",
11406                   decl_type, TREE_TYPE (arg));
11407
11408       return error_mark_node;
11409     }
11410
11411   /* [dcl.fct.default]
11412
11413      Local variables shall not be used in default argument
11414      expressions. 
11415
11416      The keyword `this' shall not be used in a default argument of a
11417      member function.  */
11418   var = search_tree (arg, local_variable_p);
11419   if (var)
11420     {
11421       cp_error ("default argument `%E' uses local variable `%D'",
11422                 arg, var);
11423       return error_mark_node;
11424     }
11425
11426   /* All is well.  */
11427   return arg;
11428 }
11429
11430 /* Decode the list of parameter types for a function type.
11431    Given the list of things declared inside the parens,
11432    return a list of types.
11433
11434    The list we receive can have three kinds of elements:
11435    an IDENTIFIER_NODE for names given without types,
11436    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11437    or void_type_node, to mark the end of an argument list
11438    when additional arguments are not permitted (... was not used).
11439
11440    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11441    a mere declaration.  A nonempty identifier-list gets an error message
11442    when FUNCDEF_FLAG is zero.
11443    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11444    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11445
11446    If all elements of the input list contain types,
11447    we return a list of the types.
11448    If all elements contain no type (except perhaps a void_type_node
11449    at the end), we return a null list.
11450    If some have types and some do not, it is an error, and we
11451    return a null list.
11452
11453    Also set last_function_parms to either
11454    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11455    A list of names is converted to a chain of PARM_DECLs
11456    by store_parm_decls so that ultimately it is always a chain of decls.
11457
11458    Note that in C++, parameters can take default values.  These default
11459    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11460    an error to specify default values which are followed by parameters
11461    that have no default values, or an ELLIPSES.  For simplicities sake,
11462    only parameters which are specified with their types can take on
11463    default values.  */
11464
11465 static tree
11466 grokparms (first_parm, funcdef_flag)
11467      tree first_parm;
11468      int funcdef_flag;
11469 {
11470   tree result = NULL_TREE;
11471   tree decls = NULL_TREE;
11472
11473   if (first_parm != NULL_TREE
11474       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11475     {
11476       if (! funcdef_flag)
11477         pedwarn ("parameter names (without types) in function declaration");
11478       last_function_parms = first_parm;
11479       return NULL_TREE;
11480     }
11481   else if (first_parm != NULL_TREE
11482            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11483            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11484     my_friendly_abort (145);
11485   else
11486     {
11487       /* Types were specified.  This is a list of declarators
11488          each represented as a TREE_LIST node.  */
11489       register tree parm, chain;
11490       int any_init = 0, any_error = 0;
11491
11492       if (first_parm != NULL_TREE)
11493         {
11494           tree last_result = NULL_TREE;
11495           tree last_decl = NULL_TREE;
11496
11497           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11498             {
11499               tree type = NULL_TREE, list_node = parm;
11500               register tree decl = TREE_VALUE (parm);
11501               tree init = TREE_PURPOSE (parm);
11502
11503               chain = TREE_CHAIN (parm);
11504               /* @@ weak defense against parse errors.  */
11505               if (TREE_CODE (decl) != VOID_TYPE 
11506                   && TREE_CODE (decl) != TREE_LIST)
11507                 {
11508                   /* Give various messages as the need arises.  */
11509                   if (TREE_CODE (decl) == STRING_CST)
11510                     cp_error ("invalid string constant `%E'", decl);
11511                   else if (TREE_CODE (decl) == INTEGER_CST)
11512                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11513                   continue;
11514                 }
11515
11516               if (TREE_CODE (decl) != VOID_TYPE)
11517                 {
11518                   decl = grokdeclarator (TREE_VALUE (decl),
11519                                          TREE_PURPOSE (decl),
11520                                          PARM, init != NULL_TREE,
11521                                          NULL_TREE);
11522                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11523                     continue;
11524
11525                   /* Top-level qualifiers on the parameters are
11526                      ignored for function types.  */
11527                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11528
11529                   if (TREE_CODE (type) == VOID_TYPE)
11530                     decl = void_type_node;
11531                   else if (TREE_CODE (type) == METHOD_TYPE)
11532                     {
11533                       if (DECL_NAME (decl))
11534                         /* Cannot use the decl here because
11535                            we don't have DECL_CONTEXT set up yet.  */
11536                         cp_error ("parameter `%D' invalidly declared method type",
11537                                   DECL_NAME (decl));
11538                       else
11539                         error ("parameter invalidly declared method type");
11540                       type = build_pointer_type (type);
11541                       TREE_TYPE (decl) = type;
11542                     }
11543                   else if (TREE_CODE (type) == OFFSET_TYPE)
11544                     {
11545                       if (DECL_NAME (decl))
11546                         cp_error ("parameter `%D' invalidly declared offset type",
11547                                   DECL_NAME (decl));
11548                       else
11549                         error ("parameter invalidly declared offset type");
11550                       type = build_pointer_type (type);
11551                       TREE_TYPE (decl) = type;
11552                     }
11553                   else if (TREE_CODE (type) == RECORD_TYPE
11554                            && TYPE_LANG_SPECIFIC (type)
11555                            && CLASSTYPE_ABSTRACT_VIRTUALS (type))
11556                     {
11557                       abstract_virtuals_error (decl, type);
11558                       any_error = 1;  /* Seems like a good idea. */
11559                     }
11560                   else if (TREE_CODE (type) == RECORD_TYPE
11561                            && TYPE_LANG_SPECIFIC (type)
11562                            && IS_SIGNATURE (type))
11563                     {
11564                       signature_error (decl, type);
11565                       any_error = 1;  /* Seems like a good idea. */
11566                     }
11567                   else if (POINTER_TYPE_P (type))
11568                     {
11569                       tree t = type;
11570                       while (POINTER_TYPE_P (t)
11571                              || (TREE_CODE (t) == ARRAY_TYPE
11572                                  && TYPE_DOMAIN (t) != NULL_TREE))
11573                         t = TREE_TYPE (t);
11574                       if (TREE_CODE (t) == ARRAY_TYPE)
11575                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11576                                   type,
11577                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11578                     }
11579                 }
11580
11581               if (TREE_CODE (decl) == VOID_TYPE)
11582                 {
11583                   if (result == NULL_TREE)
11584                     {
11585                       result = void_list_node;
11586                       last_result = result;
11587                     }
11588                   else
11589                     {
11590                       TREE_CHAIN (last_result) = void_list_node;
11591                       last_result = void_list_node;
11592                     }
11593                   if (chain
11594                       && (chain != void_list_node || TREE_CHAIN (chain)))
11595                     error ("`void' in parameter list must be entire list");
11596                   break;
11597                 }
11598
11599               /* Since there is a prototype, args are passed in their own types.  */
11600               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11601 #ifdef PROMOTE_PROTOTYPES
11602               if ((TREE_CODE (type) == INTEGER_TYPE
11603                    || TREE_CODE (type) == ENUMERAL_TYPE)
11604                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11605                 DECL_ARG_TYPE (decl) = integer_type_node;
11606 #endif
11607               if (!any_error && init)
11608                 {
11609                   any_init++;
11610                   init = check_default_argument (decl, init);
11611                 }
11612               else
11613                 init = NULL_TREE;
11614
11615               if (decls == NULL_TREE)
11616                 {
11617                   decls = decl;
11618                   last_decl = decls;
11619                 }
11620               else
11621                 {
11622                   TREE_CHAIN (last_decl) = decl;
11623                   last_decl = decl;
11624                 }
11625               if (! current_function_decl && TREE_PERMANENT (list_node))
11626                 {
11627                   TREE_PURPOSE (list_node) = init;
11628                   TREE_VALUE (list_node) = type;
11629                   TREE_CHAIN (list_node) = NULL_TREE;
11630                 }
11631               else
11632                 list_node = saveable_tree_cons (init, type, NULL_TREE);
11633               if (result == NULL_TREE)
11634                 {
11635                   result = list_node;
11636                   last_result = result;
11637                 }
11638               else
11639                 {
11640                   TREE_CHAIN (last_result) = list_node;
11641                   last_result = list_node;
11642                 }
11643             }
11644           if (last_result)
11645             TREE_CHAIN (last_result) = NULL_TREE;
11646           /* If there are no parameters, and the function does not end
11647              with `...', then last_decl will be NULL_TREE.  */
11648           if (last_decl != NULL_TREE)
11649             TREE_CHAIN (last_decl) = NULL_TREE;
11650         }
11651     }
11652
11653   last_function_parms = decls;
11654
11655   return result;
11656 }
11657
11658 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11659    FUNCTION_TYPE with the newly parsed version of its default argument, which
11660    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11661
11662 void
11663 replace_defarg (arg, init)
11664      tree arg, init;
11665 {
11666   if (! processing_template_decl
11667       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11668     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11669                 TREE_TYPE (init), TREE_VALUE (arg));
11670   TREE_PURPOSE (arg) = init;
11671 }
11672 \f
11673 int
11674 copy_args_p (d)
11675      tree d;
11676 {
11677   tree t = FUNCTION_ARG_CHAIN (d);
11678   if (DECL_CONSTRUCTOR_P (d)
11679       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11680     t = TREE_CHAIN (t);
11681   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11682       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11683           == DECL_CLASS_CONTEXT (d))
11684       && (TREE_CHAIN (t) == NULL_TREE
11685           || TREE_CHAIN (t) == void_list_node
11686           || TREE_PURPOSE (TREE_CHAIN (t))))
11687     return 1;
11688   return 0;
11689 }
11690
11691 /* These memoizing functions keep track of special properties which
11692    a class may have.  `grok_ctor_properties' notices whether a class
11693    has a constructor of the form X(X&), and also complains
11694    if the class has a constructor of the form X(X).
11695    `grok_op_properties' takes notice of the various forms of
11696    operator= which are defined, as well as what sorts of type conversion
11697    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11698
11699 int
11700 grok_ctor_properties (ctype, decl)
11701      tree ctype, decl;
11702 {
11703   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11704   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11705
11706   /* When a type has virtual baseclasses, a magical first int argument is
11707      added to any ctor so we can tell if the class has been initialized
11708      yet.  This could screw things up in this function, so we deliberately
11709      ignore the leading int if we're in that situation.  */
11710   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11711     {
11712       my_friendly_assert (parmtypes
11713                           && TREE_VALUE (parmtypes) == integer_type_node,
11714                           980529);
11715       parmtypes = TREE_CHAIN (parmtypes);
11716       parmtype = TREE_VALUE (parmtypes);
11717     }
11718
11719   /* [class.copy]
11720
11721      A non-template constructor for class X is a copy constructor if
11722      its first parameter is of type X&, const X&, volatile X& or const
11723      volatile X&, and either there are no other parameters or else all
11724      other parameters have default arguments.  */
11725   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11726       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11727       && (TREE_CHAIN (parmtypes) == NULL_TREE
11728           || TREE_CHAIN (parmtypes) == void_list_node
11729           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11730       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11731            && is_member_template (DECL_TI_TEMPLATE (decl))))
11732     {
11733       TYPE_HAS_INIT_REF (ctype) = 1;
11734       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11735         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11736     }
11737   /* [class.copy]
11738
11739      A declaration of a constructor for a class X is ill-formed if its
11740      first parameter is of type (optionally cv-qualified) X and either
11741      there are no other parameters or else all other parameters have
11742      default arguments.  
11743
11744      We *don't* complain about member template instantiations that
11745      have this form, though; they can occur as we try to decide what
11746      constructor to use during overload resolution.  Since overload
11747      resolution will never prefer such a constructor to the
11748      non-template copy constructor (which is either explicitly or
11749      implicitly defined), there's no need to worry about their
11750      existence.  Theoretically, they should never even be
11751      instantiated, but that's hard to forestall.  */
11752   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11753            && (TREE_CHAIN (parmtypes) == NULL_TREE
11754                || TREE_CHAIN (parmtypes) == void_list_node
11755                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11756            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11757                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11758     {
11759       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11760                 ctype, ctype);
11761       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11762       return 0;
11763     }
11764   else if (TREE_CODE (parmtype) == VOID_TYPE
11765            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11766     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11767
11768   return 1;
11769 }
11770
11771 /* An operator with this name can be either unary or binary.  */
11772
11773 static int
11774 ambi_op_p (name)
11775      tree name;
11776 {
11777   return (name == ansi_opname [(int) INDIRECT_REF]
11778           || name == ansi_opname [(int) ADDR_EXPR]
11779           || name == ansi_opname [(int) NEGATE_EXPR]
11780           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11781           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11782           || name == ansi_opname [(int) CONVERT_EXPR]);
11783 }
11784
11785 /* An operator with this name can only be unary.  */
11786
11787 static int
11788 unary_op_p (name)
11789      tree name;
11790 {
11791   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11792           || name == ansi_opname [(int) BIT_NOT_EXPR]
11793           || name == ansi_opname [(int) COMPONENT_REF]
11794           || IDENTIFIER_TYPENAME_P (name));
11795 }
11796
11797 /* Do a little sanity-checking on how they declared their operator.  */
11798
11799 void
11800 grok_op_properties (decl, virtualp, friendp)
11801      tree decl;
11802      int virtualp, friendp;
11803 {
11804   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11805   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11806   tree name = DECL_NAME (decl);
11807
11808   if (current_class_type == NULL_TREE)
11809     friendp = 1;
11810
11811   if (! friendp)
11812     {
11813       /* [class.copy]
11814
11815          A user-declared copy assignment operator X::operator= is a
11816          non-static non-template member function of class X with
11817          exactly one parameter of type X, X&, const X&, volatile X& or
11818          const volatile X&.  */
11819       if (name == ansi_opname[(int) MODIFY_EXPR]
11820           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11821                && is_member_template (DECL_TI_TEMPLATE (decl))))
11822         TYPE_HAS_ASSIGNMENT (current_class_type) = 1;
11823       else if (name == ansi_opname[(int) CALL_EXPR])
11824         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11825       else if (name == ansi_opname[(int) ARRAY_REF])
11826         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11827       else if (name == ansi_opname[(int) COMPONENT_REF]
11828                || name == ansi_opname[(int) MEMBER_REF])
11829         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11830       else if (name == ansi_opname[(int) NEW_EXPR])
11831         TYPE_GETS_NEW (current_class_type) |= 1;
11832       else if (name == ansi_opname[(int) DELETE_EXPR])
11833         TYPE_GETS_DELETE (current_class_type) |= 1;
11834       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11835         TYPE_GETS_NEW (current_class_type) |= 2;
11836       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11837         TYPE_GETS_DELETE (current_class_type) |= 2;
11838     }
11839
11840   if (name == ansi_opname[(int) NEW_EXPR]
11841       || name == ansi_opname[(int) VEC_NEW_EXPR])
11842     {
11843       /* When the compiler encounters the definition of A::operator new, it
11844          doesn't look at the class declaration to find out if it's static.  */
11845       if (methodp)
11846         revert_static_member_fn (&decl, NULL, NULL);
11847      
11848       /* Take care of function decl if we had syntax errors.  */
11849       if (argtypes == NULL_TREE)
11850         TREE_TYPE (decl)
11851           = build_function_type (ptr_type_node,
11852                                  hash_tree_chain (integer_type_node,
11853                                                   void_list_node));
11854       else
11855         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11856     }
11857   else if (name == ansi_opname[(int) DELETE_EXPR]
11858            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11859     {
11860       if (methodp)
11861         revert_static_member_fn (&decl, NULL, NULL);
11862      
11863       if (argtypes == NULL_TREE)
11864         TREE_TYPE (decl)
11865           = build_function_type (void_type_node,
11866                                  hash_tree_chain (ptr_type_node,
11867                                                   void_list_node));
11868       else
11869         {
11870           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11871
11872           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11873               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11874                   != void_list_node))
11875             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11876         }
11877     }
11878   else
11879     {
11880       /* An operator function must either be a non-static member function
11881          or have at least one parameter of a class, a reference to a class,
11882          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11883       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11884         {
11885           if (IDENTIFIER_TYPENAME_P (name)
11886               || name == ansi_opname[(int) CALL_EXPR]
11887               || name == ansi_opname[(int) MODIFY_EXPR]
11888               || name == ansi_opname[(int) COMPONENT_REF]
11889               || name == ansi_opname[(int) ARRAY_REF])
11890             cp_error ("`%D' must be a nonstatic member function", decl);
11891           else
11892             {
11893               tree p = argtypes;
11894
11895               if (DECL_STATIC_FUNCTION_P (decl))
11896                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11897
11898               if (p)
11899                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11900                   {
11901                     tree arg = TREE_VALUE (p);
11902                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11903                       arg = TREE_TYPE (arg);
11904
11905                     /* This lets bad template code slip through.  */
11906                     if (IS_AGGR_TYPE (arg)
11907                         || TREE_CODE (arg) == ENUMERAL_TYPE
11908                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11909                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11910                       goto foundaggr;
11911                   }
11912               cp_error
11913                 ("`%D' must have an argument of class or enumerated type",
11914                  decl);
11915             foundaggr:
11916               ;
11917             }
11918         }
11919       
11920       if (name == ansi_opname[(int) CALL_EXPR])
11921         return;                 /* No restrictions on args. */
11922
11923       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11924         {
11925           tree t = TREE_TYPE (name);
11926           if (TREE_CODE (t) == VOID_TYPE)
11927             pedwarn ("void is not a valid type conversion operator");
11928           else if (! friendp)
11929             {
11930               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11931               char *what = 0;
11932               if (ref)
11933                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11934
11935               if (t == current_class_type)
11936                 what = "the same type";
11937               /* Don't force t to be complete here.  */
11938               else if (IS_AGGR_TYPE (t)
11939                        && TYPE_SIZE (t)
11940                        && DERIVED_FROM_P (t, current_class_type))
11941                 what = "a base class";
11942
11943               if (what)
11944                 warning ("conversion to %s%s will never use a type conversion operator",
11945                          ref ? "a reference to " : "", what);
11946             }
11947         }
11948
11949       if (name == ansi_opname[(int) MODIFY_EXPR])
11950         {
11951           tree parmtype;
11952
11953           if (list_length (argtypes) != 3 && methodp)
11954             {
11955               cp_error ("`%D' must take exactly one argument", decl);
11956               return;
11957             }
11958           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11959
11960           if (copy_assignment_arg_p (parmtype, virtualp)
11961               && ! friendp)
11962             {
11963               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11964               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11965                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11966                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11967             }
11968         }
11969       else if (name == ansi_opname[(int) COND_EXPR])
11970         {
11971           /* 13.4.0.3 */
11972           pedwarn ("ANSI C++ prohibits overloading operator ?:");
11973           if (list_length (argtypes) != 4)
11974             cp_error ("`%D' must take exactly three arguments", decl);
11975         }         
11976       else if (ambi_op_p (name))
11977         {
11978           if (list_length (argtypes) == 2)
11979             /* prefix */;
11980           else if (list_length (argtypes) == 3)
11981             {
11982               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11983                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11984                   && ! processing_template_decl
11985                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11986                 {
11987                   if (methodp)
11988                     cp_error ("postfix `%D' must take `int' as its argument",
11989                               decl);
11990                   else
11991                     cp_error
11992                       ("postfix `%D' must take `int' as its second argument",
11993                        decl);
11994                 }
11995             }
11996           else
11997             {
11998               if (methodp)
11999                 cp_error ("`%D' must take either zero or one argument", decl);
12000               else
12001                 cp_error ("`%D' must take either one or two arguments", decl);
12002             }
12003
12004           /* More Effective C++ rule 6.  */
12005           if (warn_ecpp
12006               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12007                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12008             {
12009               tree arg = TREE_VALUE (argtypes);
12010               tree ret = TREE_TYPE (TREE_TYPE (decl));
12011               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12012                 arg = TREE_TYPE (arg);
12013               arg = TYPE_MAIN_VARIANT (arg);
12014               if (list_length (argtypes) == 2)
12015                 {
12016                   if (TREE_CODE (ret) != REFERENCE_TYPE
12017                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12018                                        arg))
12019                     cp_warning ("prefix `%D' should return `%T'", decl,
12020                                 build_reference_type (arg));
12021                 }
12022               else
12023                 {
12024                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12025                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12026                 }
12027             }
12028         }
12029       else if (unary_op_p (name))
12030         {
12031           if (list_length (argtypes) != 2)
12032             {
12033               if (methodp)
12034                 cp_error ("`%D' must take `void'", decl);
12035               else
12036                 cp_error ("`%D' must take exactly one argument", decl);
12037             }
12038         }
12039       else /* if (binary_op_p (name)) */
12040         {
12041           if (list_length (argtypes) != 3)
12042             {
12043               if (methodp)
12044                 cp_error ("`%D' must take exactly one argument", decl);
12045               else
12046                 cp_error ("`%D' must take exactly two arguments", decl);
12047             }
12048
12049           /* More Effective C++ rule 7.  */
12050           if (warn_ecpp
12051               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12052                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12053                   || name == ansi_opname [COMPOUND_EXPR]))
12054             cp_warning ("user-defined `%D' always evaluates both arguments",
12055                         decl);
12056         }
12057
12058       /* Effective C++ rule 23.  */
12059       if (warn_ecpp
12060           && list_length (argtypes) == 3
12061           && (name == ansi_opname [PLUS_EXPR]
12062               || name == ansi_opname [MINUS_EXPR]
12063               || name == ansi_opname [TRUNC_DIV_EXPR]
12064               || name == ansi_opname [MULT_EXPR])
12065           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12066         cp_warning ("`%D' should return by value", decl);
12067
12068       /* 13.4.0.8 */
12069       if (argtypes)
12070         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12071           if (TREE_PURPOSE (argtypes))
12072             {
12073               TREE_PURPOSE (argtypes) = NULL_TREE;
12074               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12075                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12076                 {
12077                   if (pedantic)
12078                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12079                 }
12080               else
12081                 cp_error ("`%D' cannot have default arguments", decl);
12082             }
12083     }
12084 }
12085 \f
12086 static char *
12087 tag_name (code)
12088      enum tag_types code;
12089 {
12090   switch (code)
12091     {
12092     case record_type:
12093       return "struct";
12094     case class_type:
12095       return "class";
12096     case union_type:
12097       return "union ";
12098     case enum_type:
12099       return "enum";
12100     case signature_type:
12101       return "signature";
12102     default:
12103       my_friendly_abort (981122);
12104     }
12105 }
12106
12107 /* Get the struct, enum or union (CODE says which) with tag NAME.
12108    Define the tag as a forward-reference if it is not defined.
12109
12110    C++: If a class derivation is given, process it here, and report
12111    an error if multiple derivation declarations are not identical.
12112
12113    If this is a definition, come in through xref_tag and only look in
12114    the current frame for the name (since C++ allows new names in any
12115    scope.)  */
12116
12117 tree
12118 xref_tag (code_type_node, name, globalize)
12119      tree code_type_node;
12120      tree name;
12121      int globalize;
12122 {
12123   enum tag_types tag_code;
12124   enum tree_code code;
12125   int temp = 0;
12126   register tree ref, t;
12127   struct binding_level *b = inner_binding_level;
12128   int got_type = 0;
12129   tree attributes = NULL_TREE;
12130
12131   /* If we are called from the parser, code_type_node will sometimes be a
12132      TREE_LIST.  This indicates that the user wrote
12133      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12134      use them later.  */
12135   if (TREE_CODE (code_type_node) == TREE_LIST)
12136     {
12137       attributes = TREE_PURPOSE (code_type_node);
12138       code_type_node = TREE_VALUE (code_type_node);
12139     }
12140
12141   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12142   switch (tag_code)
12143     {
12144     case record_type:
12145     case class_type:
12146     case signature_type:
12147       code = RECORD_TYPE;
12148       break;
12149     case union_type:
12150       code = UNION_TYPE;
12151       break;
12152     case enum_type:
12153       code = ENUMERAL_TYPE;
12154       break;
12155     default:
12156       my_friendly_abort (18);
12157     }
12158
12159   /* If a cross reference is requested, look up the type
12160      already defined for this tag and return it.  */
12161   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
12162     {
12163       t = name;
12164       name = TYPE_IDENTIFIER (t);
12165       got_type = 1;
12166     }
12167   else
12168     t = IDENTIFIER_TYPE_VALUE (name);
12169
12170   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12171       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12172     t = NULL_TREE;
12173
12174   if (! globalize)
12175     {
12176       /* If we know we are defining this tag, only look it up in
12177          this scope and don't try to find it as a type.  */
12178       ref = lookup_tag (code, name, b, 1);
12179     }
12180   else
12181     {
12182       if (current_class_type 
12183           && template_class_depth (current_class_type) 
12184           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12185       /* Since GLOBALIZE is non-zero, we are not looking at a
12186          definition of this tag.  Since, in addition, we are currently
12187          processing a (member) template declaration of a template
12188          class, we don't want to do any lookup at all; consider:
12189
12190            template <class X>
12191            struct S1
12192
12193            template <class U>
12194            struct S2
12195            { template <class V>
12196              friend struct S1; };
12197            
12198          Here, the S2::S1 declaration should not be confused with the
12199          outer declaration.  In particular, the inner version should
12200          have a template parameter of level 2, not level 1.  This
12201          would be particularly important if the member declaration
12202          were instead:
12203
12204            template <class V = U> friend struct S1;
12205
12206          say, when we should tsubst into `U' when instantiating S2.  */
12207         ref = NULL_TREE;
12208       else 
12209         {
12210           if (t)
12211             {
12212               if (t != TYPE_MAIN_VARIANT (t))
12213                 cp_pedwarn ("using typedef-name `%D' after `%s'",
12214                             TYPE_NAME (t), tag_name (tag_code));
12215               ref = t;
12216             }
12217           else
12218             ref = lookup_tag (code, name, b, 0);
12219           
12220           if (! ref)
12221             {
12222               /* Try finding it as a type declaration.  If that wins,
12223                  use it.  */ 
12224               ref = lookup_name (name, 1);
12225
12226               if (ref != NULL_TREE
12227                   && processing_template_decl
12228                   && DECL_CLASS_TEMPLATE_P (ref)
12229                   && template_class_depth (current_class_type) == 0)
12230                 /* Since GLOBALIZE is true, we're declaring a global
12231                template, so we want this type.  */
12232                 ref = DECL_RESULT (ref);
12233
12234               if (ref && TREE_CODE (ref) == TYPE_DECL
12235                   && TREE_CODE (TREE_TYPE (ref)) == code)
12236                 ref = TREE_TYPE (ref);
12237               else
12238                 ref = NULL_TREE;
12239             }
12240         }
12241     }
12242
12243   push_obstacks_nochange ();
12244
12245   if (! ref)
12246     {
12247       /* If no such tag is yet defined, create a forward-reference node
12248          and record it as the "definition".
12249          When a real declaration of this type is found,
12250          the forward-reference will be altered into a real type.  */
12251
12252       /* In C++, since these migrate into the global scope, we must
12253          build them on the permanent obstack.  */
12254
12255       temp = allocation_temporary_p ();
12256       if (temp)
12257         end_temporary_allocation ();
12258
12259       if (code == ENUMERAL_TYPE)
12260         {
12261           cp_error ("use of enum `%#D' without previous declaration", name);
12262
12263           ref = make_node (ENUMERAL_TYPE);
12264
12265           /* Give the type a default layout like unsigned int
12266              to avoid crashing if it does not get defined.  */
12267           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12268           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12269           TREE_UNSIGNED (ref) = 1;
12270           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12271           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12272           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12273
12274           /* Enable us to recognize when a type is created in class context.
12275              To do nested classes correctly, this should probably be cleared
12276              out when we leave this classes scope.  Currently this in only
12277              done in `start_enum'.  */
12278
12279           pushtag (name, ref, globalize);
12280         }
12281       else
12282         {
12283           struct binding_level *old_b = class_binding_level;
12284
12285           ref = make_lang_type (code);
12286
12287           if (tag_code == signature_type)
12288             {
12289               SET_SIGNATURE (ref);
12290               /* Since a signature type will be turned into the type
12291                  of signature tables, it's not only an interface.  */
12292               CLASSTYPE_INTERFACE_ONLY (ref) = 0;
12293               SET_CLASSTYPE_INTERFACE_KNOWN (ref);
12294               /* A signature doesn't have a vtable.  */
12295               CLASSTYPE_VTABLE_NEEDS_WRITING (ref) = 0;
12296             }
12297
12298 #ifdef NONNESTED_CLASSES
12299           /* Class types don't nest the way enums do.  */
12300           class_binding_level = (struct binding_level *)0;
12301 #endif
12302           pushtag (name, ref, globalize);
12303           class_binding_level = old_b;
12304         }
12305     }
12306   else
12307     {
12308       /* If it no longer looks like a nested type, make sure it's
12309          in global scope.  
12310          If it is not an IDENTIFIER, this is not a declaration */
12311       if (b->namespace_p && !class_binding_level
12312           && TREE_CODE (name) == IDENTIFIER_NODE)
12313         {
12314           if (IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12315             SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12316         }
12317
12318       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12319         redeclare_class_template (ref, current_template_parms);
12320     }
12321
12322   /* Until the type is defined, tentatively accept whatever
12323      structure tag the user hands us.  */
12324   if (TYPE_SIZE (ref) == NULL_TREE
12325       && ref != current_class_type
12326       /* Have to check this, in case we have contradictory tag info.  */
12327       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12328     {
12329       if (tag_code == class_type)
12330         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12331       else if (tag_code == record_type || tag_code == signature_type)
12332         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12333     }
12334
12335   pop_obstacks ();
12336
12337   TREE_TYPE (ref) = attributes;
12338
12339   if (ref && TYPE_P (ref))
12340     {
12341       /* [dcl.type.elab]
12342              
12343          If the identifier resolves to a typedef-name or a template
12344          type-parameter, the elaborated-type-specifier is
12345          ill-formed.  */
12346       if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
12347         cp_error ("`%T' is a typedef name", ref);
12348       else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
12349         cp_error ("`%T' is a template type paramter", ref);
12350     }
12351
12352   return ref;
12353 }
12354
12355 tree
12356 xref_tag_from_type (old, id, globalize)
12357      tree old, id;
12358      int globalize;
12359 {
12360   tree code_type_node;
12361
12362   if (TREE_CODE (old) == RECORD_TYPE)
12363     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12364                       ? class_type_node : record_type_node);
12365   else
12366     code_type_node = union_type_node;
12367
12368   if (id == NULL_TREE)
12369     id = TYPE_IDENTIFIER (old);
12370
12371   return xref_tag (code_type_node, id, globalize);
12372 }
12373
12374 /* REF is a type (named NAME), for which we have just seen some
12375    baseclasses.  BINFO is a list of those baseclasses; the
12376    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12377    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12378    struct, or union.  */
12379
12380 void
12381 xref_basetypes (code_type_node, name, ref, binfo)
12382      tree code_type_node;
12383      tree name, ref;
12384      tree binfo;
12385 {
12386   /* In the declaration `A : X, Y, ... Z' we mark all the types
12387      (A, X, Y, ..., Z) so we can check for duplicates.  */
12388   tree binfos;
12389   tree base;
12390
12391   int i, len;
12392   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12393
12394   if (tag_code == union_type)
12395     {
12396       cp_error ("derived union `%T' invalid", ref);
12397       return;
12398     }
12399
12400   len = list_length (binfo);
12401   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12402
12403   /* First, make sure that any templates in base-classes are
12404      instantiated.  This ensures that if we call ourselves recursively
12405      we do not get confused about which classes are marked and which
12406      are not.  */
12407   for (base = binfo; base; base = TREE_CHAIN (base))
12408     complete_type (TREE_VALUE (base));
12409
12410   SET_CLASSTYPE_MARKED (ref);
12411   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12412
12413   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12414     {
12415       /* The base of a derived struct is public by default.  */
12416       int via_public
12417         = (TREE_PURPOSE (binfo) == access_public_node
12418            || TREE_PURPOSE (binfo) == access_public_virtual_node
12419            || (tag_code != class_type
12420                && (TREE_PURPOSE (binfo) == access_default_node
12421                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12422       int via_protected
12423         = (TREE_PURPOSE (binfo) == access_protected_node
12424            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12425       int via_virtual
12426         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12427            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12428            || TREE_PURPOSE (binfo) == access_public_virtual_node
12429            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12430       tree basetype = TREE_VALUE (binfo);
12431       tree base_binfo;
12432
12433       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12434         basetype = TREE_TYPE (basetype);
12435       if (!basetype
12436           || (TREE_CODE (basetype) != RECORD_TYPE
12437               && TREE_CODE (basetype) != TYPENAME_TYPE
12438               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12439               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12440         {
12441           cp_error ("base type `%T' fails to be a struct or class type",
12442                     TREE_VALUE (binfo));
12443           continue;
12444         }
12445
12446       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12447
12448       /* This code replaces similar code in layout_basetypes.
12449          We put the complete_type first for implicit `typename'.  */
12450       if (TYPE_SIZE (basetype) == NULL_TREE
12451           && ! (current_template_parms && uses_template_parms (basetype)))
12452         {
12453           cp_error ("base class `%T' has incomplete type", basetype);
12454           continue;
12455         }
12456       else
12457         {
12458           if (CLASSTYPE_MARKED (basetype))
12459             {
12460               if (basetype == ref)
12461                 cp_error ("recursive type `%T' undefined", basetype);
12462               else
12463                 cp_error ("duplicate base type `%T' invalid", basetype);
12464               continue;
12465             }
12466
12467           if (TYPE_FOR_JAVA (basetype)
12468               && current_lang_stack == current_lang_base)
12469             TYPE_FOR_JAVA (ref) = 1;
12470
12471           /* Note that the BINFO records which describe individual
12472              inheritances are *not* shared in the lattice!  They
12473              cannot be shared because a given baseclass may be
12474              inherited with different `accessibility' by different
12475              derived classes.  (Each BINFO record describing an
12476              individual inheritance contains flags which say what
12477              the `accessibility' of that particular inheritance is.)  */
12478   
12479           base_binfo 
12480             = make_binfo (integer_zero_node, basetype,
12481                           CLASS_TYPE_P (basetype)
12482                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12483                           CLASS_TYPE_P (basetype)
12484                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12485  
12486           TREE_VEC_ELT (binfos, i) = base_binfo;
12487           TREE_VIA_PUBLIC (base_binfo) = via_public;
12488           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12489           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12490           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12491
12492           /* We need to unshare the binfos now so that lookups during class
12493              definition work.  */
12494           unshare_base_binfos (base_binfo);
12495
12496           SET_CLASSTYPE_MARKED (basetype);
12497
12498           /* We are free to modify these bits because they are meaningless
12499              at top level, and BASETYPE is a top-level type.  */
12500           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12501             {
12502               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12503               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12504             }
12505
12506           if (CLASS_TYPE_P (basetype))
12507             {
12508               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12509               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12510             }
12511
12512           i += 1;
12513         }
12514     }
12515   if (i)
12516     TREE_VEC_LENGTH (binfos) = i;
12517   else
12518     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12519
12520   if (i > 1)
12521     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12522   else if (i == 1)
12523     {
12524       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12525       
12526       if (CLASS_TYPE_P (basetype))
12527         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12528           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12529     }
12530
12531   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12532     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12533
12534   /* Unmark all the types.  */
12535   while (--i >= 0)
12536     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12537   CLEAR_CLASSTYPE_MARKED (ref);
12538
12539   pop_obstacks ();
12540 }
12541   
12542 \f
12543 /* Begin compiling the definition of an enumeration type.
12544    NAME is its name (or null if anonymous).
12545    Returns the type object, as yet incomplete.
12546    Also records info about it so that build_enumerator
12547    may be used to declare the individual values as they are read.  */
12548
12549 tree
12550 start_enum (name)
12551      tree name;
12552 {
12553   register tree enumtype = NULL_TREE;
12554   struct binding_level *b = inner_binding_level;
12555
12556   /* We are wasting space here and putting these on the permanent_obstack so
12557      that typeid(local enum) will work correctly. */
12558   push_obstacks (&permanent_obstack, &permanent_obstack);
12559
12560   /* If this is the real definition for a previous forward reference,
12561      fill in the contents in the same object that used to be the
12562      forward reference.  */
12563
12564   if (name != NULL_TREE)
12565     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12566
12567   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12568     cp_error ("multiple definition of `%#T'", enumtype);
12569   else
12570     {
12571       enumtype = make_node (ENUMERAL_TYPE);
12572       pushtag (name, enumtype, 0);
12573     }
12574
12575   if (current_class_type)
12576     TREE_ADDRESSABLE (b->tags) = 1;
12577
12578   /* We don't copy this value because build_enumerator needs to do it.  */
12579   enum_next_value = integer_zero_node;
12580   enum_overflow = 0;
12581
12582   GNU_xref_decl (current_function_decl, enumtype);
12583   return enumtype;
12584 }
12585
12586 /* After processing and defining all the values of an enumeration type,
12587    install their decls in the enumeration type and finish it off.
12588    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12589    Returns ENUMTYPE.  */
12590
12591 tree
12592 finish_enum (enumtype)
12593      tree enumtype;
12594 {
12595   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12596   /* Calculate the maximum value of any enumerator in this type.  */
12597
12598   tree values = TYPE_VALUES (enumtype);
12599   if (values)
12600     {
12601       tree pair;
12602
12603       for (pair = values; pair; pair = TREE_CHAIN (pair))
12604         {
12605           tree decl;
12606           tree value;
12607
12608           /* The TREE_VALUE is a CONST_DECL for this enumeration
12609              constant.  */
12610           decl = TREE_VALUE (pair);
12611
12612           /* The DECL_INITIAL will be NULL if we are processing a
12613              template declaration and this enumeration constant had no
12614              explicit initializer.  */
12615           value = DECL_INITIAL (decl);
12616           if (value && !processing_template_decl)
12617             {
12618               /* Set the TREE_TYPE for the VALUE as well.  That's so
12619                  that when we call decl_constant_value we get an
12620                  entity of the right type (but with the constant
12621                  value).  Since we shouldn't ever call
12622                  decl_constant_value on a template type, there's no
12623                  reason to do that when processing_template_decl.
12624                  And, if the expression is something like a
12625                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12626                  wreak havoc on the intended type of the expression.  
12627
12628                  Of course, there's also no point in trying to compute
12629                  minimum or maximum values if we're in a template.  */
12630               TREE_TYPE (value) = enumtype;
12631
12632               if (!minnode)
12633                 minnode = maxnode = value;
12634               else if (tree_int_cst_lt (maxnode, value))
12635                 maxnode = value;
12636               else if (tree_int_cst_lt (value, minnode))
12637                 minnode = value;
12638             }
12639
12640           if (processing_template_decl) 
12641             /* If this is just a template, leave the CONST_DECL
12642                alone.  That way tsubst_copy will find CONST_DECLs for
12643                CONST_DECLs, and not INTEGER_CSTs.  */
12644             ;
12645           else
12646             /* In the list we're building up, we want the enumeration
12647                values, not the CONST_DECLs.  */
12648             TREE_VALUE (pair) = value;
12649         }
12650     }
12651   else
12652     maxnode = minnode = integer_zero_node;
12653
12654   TYPE_VALUES (enumtype) = nreverse (values);
12655
12656   if (processing_template_decl)
12657     {
12658       tree scope = current_scope ();
12659       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12660         add_tree (build_min (TAG_DEFN, enumtype));
12661     }
12662   else
12663     {
12664       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12665       int lowprec = min_precision (minnode, unsignedp);
12666       int highprec = min_precision (maxnode, unsignedp);
12667       int precision = MAX (lowprec, highprec);
12668       tree tem;
12669
12670       TYPE_SIZE (enumtype) = NULL_TREE;
12671
12672       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12673
12674       TYPE_PRECISION (enumtype) = precision;
12675       if (unsignedp)
12676         fixup_unsigned_type (enumtype);
12677       else
12678         fixup_signed_type (enumtype);
12679
12680       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12681         /* Use the width of the narrowest normal C type which is wide
12682            enough.  */ 
12683         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12684                                                     (precision, 1));
12685       else
12686         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12687
12688       TYPE_SIZE (enumtype) = 0;
12689       layout_type (enumtype);
12690     
12691       /* Fix up all variant types of this enum type.  */
12692       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12693            tem = TYPE_NEXT_VARIANT (tem))
12694         {
12695           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12696           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12697           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12698           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12699           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12700           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12701           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12702           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12703           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12704         }
12705
12706       /* Finish debugging output for this type.  */
12707       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12708     }
12709
12710   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12711   pop_obstacks ();
12712
12713   return enumtype;
12714 }
12715
12716 /* Build and install a CONST_DECL for an enumeration constant of the
12717    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12718    Assignment of sequential values by default is handled here.  */
12719
12720 tree
12721 build_enumerator (name, value, type)
12722      tree name;
12723      tree value;
12724      tree type;
12725 {
12726   tree decl, result;
12727   tree context;
12728
12729   /* Remove no-op casts from the value.  */
12730   if (value)
12731     STRIP_TYPE_NOPS (value);
12732
12733  if (! processing_template_decl)
12734    {
12735      /* Validate and default VALUE.  */
12736      if (value != NULL_TREE)
12737        {
12738          if (TREE_READONLY_DECL_P (value))
12739            value = decl_constant_value (value);
12740
12741          if (TREE_CODE (value) == INTEGER_CST)
12742            {
12743              value = default_conversion (value);
12744              constant_expression_warning (value);
12745            }
12746          else
12747            {
12748              cp_error ("enumerator value for `%D' not integer constant", name);
12749              value = NULL_TREE;
12750            }
12751        }
12752
12753      /* Default based on previous value.  */
12754      if (value == NULL_TREE && ! processing_template_decl)
12755        {
12756          value = enum_next_value;
12757          if (enum_overflow)
12758            cp_error ("overflow in enumeration values at `%D'", name);
12759        }
12760
12761      /* Remove no-op casts from the value.  */
12762      if (value)
12763        STRIP_TYPE_NOPS (value);
12764 #if 0
12765      /* To fix MAX_VAL enum consts. (bkoz)  */
12766      TREE_TYPE (value) = integer_type_node;
12767 #endif
12768    }
12769
12770  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12771     Even in other cases, we will later (in finish_enum) be setting the
12772     type of VALUE.  */
12773  if (value != NULL_TREE)
12774    value = copy_node (value);
12775
12776   /* C++ associates enums with global, function, or class declarations.  */
12777  
12778  context = current_scope ();
12779  if (context && context == current_class_type)
12780    /* This enum declaration is local to the class.  */
12781    decl = build_lang_field_decl (CONST_DECL, name, type);
12782  else
12783    /* It's a global enum, or it's local to a function.  (Note local to
12784       a function could mean local to a class method.  */
12785    decl = build_decl (CONST_DECL, name, type);
12786
12787  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12788  DECL_INITIAL (decl) = value;
12789  TREE_READONLY (decl) = 1;
12790
12791  if (context && context == current_class_type)
12792    {
12793      pushdecl_class_level (decl);
12794      /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12795         on the TYPE_FIELDS list for `S'.  (That's so that you can say
12796         things like `S::i' later.)  */
12797      finish_member_declaration (decl);
12798    }
12799  else
12800    {
12801      pushdecl (decl);
12802      GNU_xref_decl (current_function_decl, decl);
12803    }
12804
12805  if (! processing_template_decl)
12806    {
12807      /* Set basis for default for next value.  */
12808      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12809                                                   integer_one_node, PLUS_EXPR);
12810      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12811    }
12812
12813   result = saveable_tree_cons (name, decl, NULL_TREE);
12814   return result;
12815 }
12816
12817 \f
12818 static int function_depth;
12819
12820 /* Create the FUNCTION_DECL for a function definition.
12821    DECLSPECS and DECLARATOR are the parts of the declaration;
12822    they describe the function's name and the type it returns,
12823    but twisted together in a fashion that parallels the syntax of C.
12824
12825    If PRE_PARSED_P is non-zero then DECLARATOR is really the DECL for
12826    the function we are about to process; DECLSPECS are ignored.  For
12827    example, we set PRE_PARSED_P when processing the definition of
12828    inline function that was defined in-class; the definition is
12829    actually processed when the class is complete.  In this case,
12830    PRE_PARSED_P is 2.  We also set PRE_PARSED_P when instanting the
12831    body of a template function, and when constructing thunk functions
12832    and such; in these cases PRE_PARSED_P is 1.
12833    
12834    This function creates a binding context for the function body
12835    as well as setting up the FUNCTION_DECL in current_function_decl.
12836
12837    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12838    (it defines a datum instead), we return 0, which tells
12839    yyparse to report a parse error.
12840
12841    For C++, we must first check whether that datum makes any sense.
12842    For example, "class A local_a(1,2);" means that variable local_a
12843    is an aggregate of type A, which should have a constructor
12844    applied to it with the argument list [1, 2].
12845
12846    @@ There is currently no way to retrieve the storage
12847    @@ allocated to FUNCTION (or all of its parms) if we return
12848    @@ something we had previously.  */
12849
12850 int
12851 start_function (declspecs, declarator, attrs, pre_parsed_p)
12852      tree declspecs, declarator, attrs;
12853      int pre_parsed_p;
12854 {
12855   tree decl1;
12856   tree ctype = NULL_TREE;
12857   tree fntype;
12858   tree restype;
12859   extern int have_extern_spec;
12860   extern int used_extern_spec;
12861   int doing_friend = 0;
12862
12863   /* Sanity check.  */
12864   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12865   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12866
12867   /* Assume, until we see it does.  */
12868   current_function_returns_value = 0;
12869   current_function_returns_null = 0;
12870   named_labels = 0;
12871   shadowed_labels = 0;
12872   current_function_assigns_this = 0;
12873   current_function_just_assigned_this = 0;
12874   current_function_parms_stored = 0;
12875   original_result_rtx = NULL_RTX;
12876   base_init_expr = NULL_TREE;
12877   current_base_init_list = NULL_TREE;
12878   current_member_init_list = NULL_TREE;
12879   ctor_label = dtor_label = NULL_TREE;
12880   static_labelno = 0;
12881
12882   clear_temp_name ();
12883
12884   /* This should only be done once on the top most decl.  */
12885   if (have_extern_spec && !used_extern_spec)
12886     {
12887       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12888       used_extern_spec = 1;
12889     }
12890
12891   if (pre_parsed_p)
12892     {
12893       decl1 = declarator;
12894
12895 #if 0
12896       /* What was this testing for, exactly?  */
12897       if (! DECL_ARGUMENTS (decl1)
12898           && !DECL_STATIC_FUNCTION_P (decl1)
12899           && !DECL_ARTIFICIAL (decl1)
12900           && DECL_CLASS_SCOPE_P (decl1)
12901           && TYPE_IDENTIFIER (DECL_CONTEXT (decl1))
12902           && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (DECL_CONTEXT (decl1))))
12903         {
12904           tree binding = binding_for_name (DECL_NAME (decl1), 
12905                                            current_namespace);
12906           cp_error ("redeclaration of `%#D'", decl1);
12907           if (IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)))
12908             cp_error_at ("previous declaration here", IDENTIFIER_CLASS_VALUE (DECL_NAME (decl1)));
12909           else if (BINDING_VALUE (binding))
12910             cp_error_at ("previous declaration here", BINDING_VALUE (binding));
12911         }
12912 #endif
12913
12914       fntype = TREE_TYPE (decl1);
12915       if (TREE_CODE (fntype) == METHOD_TYPE)
12916         ctype = TYPE_METHOD_BASETYPE (fntype);
12917
12918       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12919          class is in the (lexical) scope of the class in which it is
12920          defined.  */
12921       if (!ctype && DECL_FRIEND_P (decl1))
12922         {
12923           ctype = DECL_CLASS_CONTEXT (decl1);
12924
12925           /* CTYPE could be null here if we're dealing with a template;
12926              for example, `inline friend float foo()' inside a template
12927              will have no CTYPE set.  */
12928           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12929             ctype = NULL_TREE;
12930           else
12931             doing_friend = 1;
12932         }
12933
12934       last_function_parms = DECL_ARGUMENTS (decl1);
12935       last_function_parm_tags = NULL_TREE;
12936     }
12937   else
12938     {
12939       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12940       /* If the declarator is not suitable for a function definition,
12941          cause a syntax error.  */
12942       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12943
12944       fntype = TREE_TYPE (decl1);
12945
12946       restype = TREE_TYPE (fntype);
12947       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12948         {
12949           cp_error ("semicolon missing after declaration of `%#T'", restype);
12950           shadow_tag (build_expr_list (NULL_TREE, restype));
12951           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12952           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12953             fntype = build_function_type (integer_type_node,
12954                                           TYPE_ARG_TYPES (fntype));
12955           else
12956             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12957                                               integer_type_node,
12958                                               TYPE_ARG_TYPES (fntype));
12959           TREE_TYPE (decl1) = fntype;
12960         }
12961
12962       if (TREE_CODE (fntype) == METHOD_TYPE)
12963         ctype = TYPE_METHOD_BASETYPE (fntype);
12964       else if (DECL_MAIN_P (decl1))
12965         {
12966           /* If this doesn't return integer_type, complain.  */
12967           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12968             {
12969               if (pedantic || warn_return_type)
12970                 pedwarn ("return type for `main' changed to `int'");
12971               TREE_TYPE (decl1) = fntype = default_function_type;
12972             }
12973         }
12974     }
12975
12976   /* Warn if function was previously implicitly declared
12977      (but not if we warned then).  */
12978   if (! warn_implicit
12979       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12980     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12981
12982   announce_function (decl1);
12983
12984   /* Set up current_class_type, and enter the scope of the class, if
12985      appropriate.  */
12986   if (ctype)
12987     push_nested_class (ctype, 1);
12988   else if (DECL_STATIC_FUNCTION_P (decl1))
12989     push_nested_class (DECL_CONTEXT (decl1), 2);
12990
12991   /* Now that we have entered the scope of the class, we must restore
12992      the bindings for any template parameters surrounding DECL1, if it
12993      is an inline member template.  (Order is important; consider the
12994      case where a template parameter has the same name as a field of
12995      the class.)  It is not until after this point that
12996      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12997   if (pre_parsed_p == 2)
12998     maybe_begin_member_template_processing (decl1);
12999
13000   /* We are now in the scope of the function being defined.  */
13001   current_function_decl = decl1;
13002
13003   /* Save the parm names or decls from this function's declarator
13004      where store_parm_decls will find them.  */
13005   current_function_parms = last_function_parms;
13006   current_function_parm_tags = last_function_parm_tags;
13007
13008   if (! processing_template_decl)
13009     {
13010       /* In a function definition, arg types must be complete.  */
13011       require_complete_types_for_parms (current_function_parms);
13012
13013       if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
13014         {
13015           cp_error ("return-type `%#T' is an incomplete type",
13016                     TREE_TYPE (fntype));
13017
13018           /* Make it return void instead, but don't change the
13019              type of the DECL_RESULT, in case we have a named return value.  */
13020           if (ctype)
13021             TREE_TYPE (decl1)
13022               = build_cplus_method_type (build_type_variant (ctype,
13023                                                              TREE_READONLY (decl1),
13024                                                              TREE_SIDE_EFFECTS (decl1)),
13025                                          void_type_node,
13026                                          FUNCTION_ARG_CHAIN (decl1));
13027           else
13028             TREE_TYPE (decl1)
13029               = build_function_type (void_type_node,
13030                                      TYPE_ARG_TYPES (TREE_TYPE (decl1)));
13031           DECL_RESULT (decl1)
13032             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (fntype)));
13033           TREE_READONLY (DECL_RESULT (decl1))
13034             = CP_TYPE_CONST_P (TREE_TYPE (fntype));
13035           TREE_THIS_VOLATILE (DECL_RESULT (decl1))
13036             = CP_TYPE_VOLATILE_P (TREE_TYPE (fntype));
13037         }
13038
13039       if (TYPE_LANG_SPECIFIC (TREE_TYPE (fntype))
13040           && CLASSTYPE_ABSTRACT_VIRTUALS (TREE_TYPE (fntype)))
13041         abstract_virtuals_error (decl1, TREE_TYPE (fntype));
13042     }
13043
13044   /* Effective C++ rule 15.  See also c_expand_return.  */
13045   if (warn_ecpp
13046       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13047       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13048     cp_warning ("`operator=' should return a reference to `*this'");
13049
13050   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13051      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13052   DECL_INITIAL (decl1) = error_mark_node;
13053
13054 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13055   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13056 #endif
13057   
13058   /* This function exists in static storage.
13059      (This does not mean `static' in the C sense!)  */
13060   TREE_STATIC (decl1) = 1;
13061
13062   /* We must call push_template_decl after current_class_type is set
13063      up.  (If we are processing inline definitions after exiting a
13064      class scope, current_class_type will be NULL_TREE until set above
13065      by push_nested_class.)  */
13066   if (processing_template_decl)
13067     decl1 = push_template_decl (decl1);
13068
13069   /* Record the decl so that the function name is defined.
13070      If we already have a decl for this name, and it is a FUNCTION_DECL,
13071      use the old decl.  */
13072   if (!processing_template_decl && pre_parsed_p == 0)
13073     {
13074       /* A specialization is not used to guide overload resolution.  */
13075       if ((flag_guiding_decls 
13076            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13077           && ! DECL_FUNCTION_MEMBER_P (decl1))
13078         decl1 = pushdecl (decl1);
13079       else
13080         {
13081           /* We need to set the DECL_CONTEXT. */
13082           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13083             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13084           /* And make sure we have enough default args.  */
13085           check_default_args (decl1);
13086         }
13087       DECL_MAIN_VARIANT (decl1) = decl1;
13088       fntype = TREE_TYPE (decl1);
13089     }
13090
13091   current_function_decl = decl1;
13092
13093   if (DECL_INTERFACE_KNOWN (decl1))
13094     {
13095       tree ctx = hack_decl_function_context (decl1);
13096
13097       if (DECL_NOT_REALLY_EXTERN (decl1))
13098         DECL_EXTERNAL (decl1) = 0;
13099
13100       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
13101           && TREE_PUBLIC (ctx))
13102         /* This is a function in a local class in an extern inline
13103            function.  */
13104         comdat_linkage (decl1);
13105     }
13106   /* If this function belongs to an interface, it is public.
13107      If it belongs to someone else's interface, it is also external.
13108      This only affects inlines and template instantiations.  */
13109   else if (interface_unknown == 0
13110            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13111                || flag_alt_external_templates))
13112     {
13113       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13114           || processing_template_decl)
13115         {
13116           DECL_EXTERNAL (decl1)
13117             = (interface_only
13118                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines));
13119
13120           /* For WIN32 we also want to put these in linkonce sections.  */
13121           maybe_make_one_only (decl1);
13122         }
13123       else
13124         DECL_EXTERNAL (decl1) = 0;
13125       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13126       DECL_INTERFACE_KNOWN (decl1) = 1;
13127     }
13128   else
13129     {
13130       /* This is a definition, not a reference.
13131          So clear DECL_EXTERNAL.  */
13132       DECL_EXTERNAL (decl1) = 0;
13133
13134       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13135           && ! DECL_INTERFACE_KNOWN (decl1)
13136           /* Don't try to defer nested functions for now.  */
13137           && ! hack_decl_function_context (decl1))
13138         DECL_DEFER_OUTPUT (decl1) = 1;
13139       else
13140         DECL_INTERFACE_KNOWN (decl1) = 1;
13141     }
13142
13143   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1))
13144     {
13145       if (TREE_CODE (fntype) == METHOD_TYPE)
13146         TREE_TYPE (decl1) = fntype
13147           = build_function_type (TREE_TYPE (fntype),
13148                                  TREE_CHAIN (TYPE_ARG_TYPES (fntype)));
13149       current_function_parms = TREE_CHAIN (current_function_parms);
13150       DECL_ARGUMENTS (decl1) = current_function_parms;
13151       ctype = NULL_TREE;
13152     }
13153   restype = TREE_TYPE (fntype);
13154
13155   if (ctype)
13156     {
13157       /* If we're compiling a friend function, neither of the variables
13158          current_class_ptr nor current_class_type will have values.  */
13159       if (! doing_friend)
13160         {
13161           /* We know that this was set up by `grokclassfn'.
13162              We do not wait until `store_parm_decls', since evil
13163              parse errors may never get us to that point.  Here
13164              we keep the consistency between `current_class_type'
13165              and `current_class_ptr'.  */
13166           tree t = current_function_parms;
13167
13168           my_friendly_assert (t != NULL_TREE
13169                               && TREE_CODE (t) == PARM_DECL, 162);
13170
13171           if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE)
13172             {
13173               int i;
13174
13175               if (! hack_decl_function_context (decl1))
13176                 temporary_allocation ();
13177               i = suspend_momentary ();
13178
13179               /* Normally, build_indirect_ref returns
13180                  current_class_ref whenever current_class_ptr is
13181                  dereferenced.  This time, however, we want it to
13182                  *create* current_class_ref, so we temporarily clear
13183                  current_class_ptr to fool it.  */
13184               current_class_ptr = NULL_TREE;
13185               current_class_ref = build_indirect_ref (t, NULL_PTR);
13186               current_class_ptr = t;
13187
13188               resume_momentary (i);
13189               if (! hack_decl_function_context (decl1))
13190                 end_temporary_allocation ();
13191             }
13192           else
13193             /* We're having a signature pointer here.  */
13194             current_class_ref = current_class_ptr = t;
13195
13196         }
13197     }
13198   else
13199     current_class_ptr = current_class_ref = NULL_TREE;
13200
13201   pushlevel (0);
13202   current_binding_level->parm_flag = 1;
13203
13204   GNU_xref_function (decl1, current_function_parms);
13205
13206   if (attrs)
13207     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13208   
13209   make_function_rtl (decl1);
13210
13211   /* Promote the value to int before returning it.  */
13212   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13213     restype = type_promotes_to (restype);
13214
13215   /* If this fcn was already referenced via a block-scope `extern' decl
13216      (or an implicit decl), propagate certain information about the usage.  */
13217   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13218     TREE_ADDRESSABLE (decl1) = 1;
13219
13220   if (DECL_RESULT (decl1) == NULL_TREE)
13221     {
13222       DECL_RESULT (decl1)
13223         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13224       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13225       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13226     }
13227
13228   /* Allocate further tree nodes temporarily during compilation
13229      of this function only.  Tiemann moved up here from bottom of fn.  */
13230   /* If this is a nested function, then we must continue to allocate RTL
13231      on the permanent obstack in case we need to inline it later.  */
13232   if (! hack_decl_function_context (decl1))
13233     temporary_allocation ();
13234
13235   if (processing_template_decl)
13236     {
13237       ++minimal_parse_mode;
13238       last_tree = DECL_SAVED_TREE (decl1)
13239         = build_nt (EXPR_STMT, void_zero_node);
13240     }
13241
13242   ++function_depth;
13243
13244   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13245       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13246     {
13247       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13248       ctor_label = NULL_TREE;
13249     }
13250   else
13251     {
13252       dtor_label = NULL_TREE;
13253       if (DECL_CONSTRUCTOR_P (decl1))
13254         ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13255     }
13256
13257   return 1;
13258 }
13259 \f
13260 /* Called after store_parm_decls for a function-try-block.  We need to update
13261    last_parm_cleanup_insn so that the base initializers for a constructor
13262    are run within this block, not before it.  */
13263
13264 void
13265 expand_start_early_try_stmts ()
13266 {
13267   expand_start_try_stmts ();
13268   last_parm_cleanup_insn = get_last_insn ();
13269 }
13270
13271 /* Store the parameter declarations into the current function declaration.
13272    This is called after parsing the parameter declarations, before
13273    digesting the body of the function.
13274
13275    Also install to binding contour return value identifier, if any.  */
13276
13277 void
13278 store_parm_decls ()
13279 {
13280   register tree fndecl = current_function_decl;
13281   register tree parm;
13282   int parms_have_cleanups = 0;
13283   tree cleanups = NULL_TREE;
13284
13285   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
13286   tree specparms = current_function_parms;
13287
13288   /* This is a list of types declared among parms in a prototype.  */
13289   tree parmtags = current_function_parm_tags;
13290
13291   /* This is a chain of any other decls that came in among the parm
13292      declarations.  If a parm is declared with  enum {foo, bar} x;
13293      then CONST_DECLs for foo and bar are put here.  */
13294   tree nonparms = NULL_TREE;
13295
13296   if (toplevel_bindings_p ())
13297     fatal ("parse errors have confused me too much");
13298
13299   /* Initialize RTL machinery.  */
13300   init_function_start (fndecl, input_filename, lineno);
13301
13302   /* Create a binding level for the parms.  */
13303   expand_start_bindings (0);
13304
13305   if (specparms != NULL_TREE)
13306     {
13307       /* This case is when the function was defined with an ANSI prototype.
13308          The parms already have decls, so we need not do anything here
13309          except record them as in effect
13310          and complain if any redundant old-style parm decls were written.  */
13311
13312       register tree next;
13313
13314       /* Must clear this because it might contain TYPE_DECLs declared
13315          at class level.  */
13316       storedecls (NULL_TREE);
13317
13318       for (parm = nreverse (specparms); parm; parm = next)
13319         {
13320           next = TREE_CHAIN (parm);
13321           if (TREE_CODE (parm) == PARM_DECL)
13322             {
13323               tree cleanup;
13324               if (DECL_NAME (parm) == NULL_TREE)
13325                 {
13326                   pushdecl (parm);
13327                 }
13328               else if (TREE_CODE (TREE_TYPE (parm)) == VOID_TYPE)
13329                 cp_error ("parameter `%D' declared void", parm);
13330               else
13331                 {
13332                   /* Now fill in DECL_REFERENCE_SLOT for any of the parm decls.
13333                      A parameter is assumed not to have any side effects.
13334                      If this should change for any reason, then this
13335                      will have to wrap the bashed reference type in a save_expr.
13336                      
13337                      Also, if the parameter type is declared to be an X
13338                      and there is an X(X&) constructor, we cannot lay it
13339                      into the stack (any more), so we make this parameter
13340                      look like it is really of reference type.  Functions
13341                      which pass parameters to this function will know to
13342                      create a temporary in their frame, and pass a reference
13343                      to that.  */
13344
13345                   if (TREE_CODE (TREE_TYPE (parm)) == REFERENCE_TYPE
13346                       && TYPE_SIZE (TREE_TYPE (TREE_TYPE (parm))))
13347                     SET_DECL_REFERENCE_SLOT (parm, convert_from_reference (parm));
13348
13349                   pushdecl (parm);
13350                 }
13351               if (! processing_template_decl
13352                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13353                 {
13354                   expand_decl (parm);
13355                   parms_have_cleanups = 1;
13356
13357                   /* Keep track of the cleanups.  */
13358                   cleanups = tree_cons (parm, cleanup, cleanups);
13359                 }
13360             }
13361           else
13362             {
13363               /* If we find an enum constant or a type tag,
13364                  put it aside for the moment.  */
13365               TREE_CHAIN (parm) = NULL_TREE;
13366               nonparms = chainon (nonparms, parm);
13367             }
13368         }
13369
13370       /* Get the decls in their original chain order
13371          and record in the function.  This is all and only the
13372          PARM_DECLs that were pushed into scope by the loop above.  */
13373       DECL_ARGUMENTS (fndecl) = getdecls ();
13374
13375       storetags (chainon (parmtags, gettags ()));
13376     }
13377   else
13378     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13379
13380   /* Now store the final chain of decls for the arguments
13381      as the decl-chain of the current lexical scope.
13382      Put the enumerators in as well, at the front so that
13383      DECL_ARGUMENTS is not modified.  */
13384
13385   storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13386
13387   /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function.  */
13388   declare_function_name ();
13389
13390   /* Initialize the RTL code for the function.  */
13391   DECL_SAVED_INSNS (fndecl) = NULL_RTX;
13392   if (! processing_template_decl)
13393     expand_function_start (fndecl, parms_have_cleanups);
13394
13395   current_function_parms_stored = 1;
13396
13397   /* If this function is `main', emit a call to `__main'
13398      to run global initializers, etc.  */
13399   if (DECL_MAIN_P (fndecl))
13400     expand_main_function ();
13401
13402   /* Now that we have initialized the parms, we can start their
13403      cleanups.  We cannot do this before, since expand_decl_cleanup
13404      should not be called before the parm can be used.  */
13405   if (cleanups
13406       && ! processing_template_decl)      
13407     {
13408       for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
13409         {
13410           if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
13411             cp_error ("parser lost in parsing declaration of `%D'",
13412                       TREE_PURPOSE (cleanups));
13413         }
13414     }
13415
13416   /* Create a binding contour which can be used to catch
13417      cleanup-generated temporaries.  Also, if the return value needs or
13418      has initialization, deal with that now.  */
13419   if (parms_have_cleanups)
13420     {
13421       pushlevel (0);
13422       expand_start_bindings (0);
13423     }
13424
13425   if (! processing_template_decl && flag_exceptions)
13426     {
13427       /* Do the starting of the exception specifications, if we have any.  */
13428       if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13429         expand_start_eh_spec ();
13430     }
13431
13432   last_parm_cleanup_insn = get_last_insn ();
13433   last_dtor_insn = get_last_insn ();
13434 }
13435
13436 /* Bind a name and initialization to the return value of
13437    the current function.  */
13438
13439 void
13440 store_return_init (return_id, init)
13441      tree return_id, init;
13442 {
13443   tree decl = DECL_RESULT (current_function_decl);
13444
13445   if (pedantic)
13446     /* Give this error as many times as there are occurrences,
13447        so that users can use Emacs compilation buffers to find
13448        and fix all such places.  */
13449     pedwarn ("ANSI C++ does not permit named return values");
13450
13451   if (return_id != NULL_TREE)
13452     {
13453       if (DECL_NAME (decl) == NULL_TREE)
13454         {
13455           DECL_NAME (decl) = return_id;
13456           DECL_ASSEMBLER_NAME (decl) = return_id;
13457         }
13458       else
13459         cp_error ("return identifier `%D' already in place", decl);
13460     }
13461
13462   /* Can't let this happen for constructors.  */
13463   if (DECL_CONSTRUCTOR_P (current_function_decl))
13464     {
13465       error ("can't redefine default return value for constructors");
13466       return;
13467     }
13468
13469   /* If we have a named return value, put that in our scope as well.  */
13470   if (DECL_NAME (decl) != NULL_TREE)
13471     {
13472       /* If this named return value comes in a register,
13473          put it in a pseudo-register.  */
13474       if (DECL_REGISTER (decl))
13475         {
13476           original_result_rtx = DECL_RTL (decl);
13477           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13478         }
13479
13480       /* Let `cp_finish_decl' know that this initializer is ok.  */
13481       DECL_INITIAL (decl) = init;
13482       pushdecl (decl);
13483
13484       if (minimal_parse_mode)
13485         add_tree (build_min_nt (RETURN_INIT, return_id,
13486                                 copy_to_permanent (init)));
13487       else
13488         cp_finish_decl (decl, init, NULL_TREE, 0, 0);
13489     }
13490 }
13491
13492 \f
13493 /* Finish up a function declaration and compile that function
13494    all the way to assembler language output.  The free the storage
13495    for the function definition.
13496
13497    This is called after parsing the body of the function definition.
13498    LINENO is the current line number.
13499
13500    FLAGS is a bitwise or of the following values: 
13501      1 - CALL_POPLEVEL 
13502        An extra call to poplevel (and expand_end_bindings) must be
13503        made to take care of the binding contour for the base
13504        initializers.  This is only relevant for constructors.
13505      2 - INCLASS_INLINE
13506        We just finished processing the body of an in-class inline
13507        function definition.  (This processing will have taken place
13508        after the class definition is complete.)
13509
13510    NESTED is nonzero if we were in the middle of compiling another function
13511    when we started on this one.  */
13512
13513 void
13514 finish_function (lineno, flags, nested)
13515      int lineno;
13516      int flags;
13517      int nested;
13518 {
13519   register tree fndecl = current_function_decl;
13520   tree fntype, ctype = NULL_TREE;
13521   rtx last_parm_insn, insns;
13522   /* Label to use if this function is supposed to return a value.  */
13523   tree no_return_label = NULL_TREE;
13524   tree decls = NULL_TREE;
13525   int call_poplevel = (flags & 1) != 0;
13526   int inclass_inline = (flags & 2) != 0;
13527   int in_template;
13528
13529   /* When we get some parse errors, we can end up without a
13530      current_function_decl, so cope.  */
13531   if (fndecl == NULL_TREE)
13532     return;
13533
13534   if (! nested && function_depth > 1)
13535     nested = 1;
13536
13537   fntype = TREE_TYPE (fndecl);
13538
13539 /*  TREE_READONLY (fndecl) = 1;
13540     This caused &foo to be of type ptr-to-const-function
13541     which then got a warning when stored in a ptr-to-function variable.  */
13542
13543   /* This happens on strange parse errors.  */
13544   if (! current_function_parms_stored)
13545     {
13546       call_poplevel = 0;
13547       store_parm_decls ();
13548     }
13549
13550   if (processing_template_decl)
13551     {
13552       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13553         {
13554           decls = getdecls ();
13555           expand_end_bindings (decls, decls != NULL_TREE, 0);
13556           poplevel (decls != NULL_TREE, 0, 0);
13557         }
13558     }
13559   else
13560     {
13561       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13562         {
13563           tree ttype = target_type (fntype);
13564           tree parmdecl;
13565
13566           if (IS_AGGR_TYPE (ttype))
13567             /* Let debugger know it should output info for this type.  */
13568             note_debug_info_needed (ttype);
13569
13570           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13571             {
13572               ttype = target_type (TREE_TYPE (parmdecl));
13573               if (IS_AGGR_TYPE (ttype))
13574                 /* Let debugger know it should output info for this type.  */
13575                 note_debug_info_needed (ttype);
13576             }
13577         }
13578
13579       /* Clean house because we will need to reorder insns here.  */
13580       do_pending_stack_adjust ();
13581
13582       if (dtor_label)
13583         {
13584           tree binfo = TYPE_BINFO (current_class_type);
13585           tree cond = integer_one_node;
13586           tree exprstmt;
13587           tree in_charge_node = lookup_name (in_charge_identifier, 0);
13588           tree virtual_size;
13589           int ok_to_optimize_dtor = 0;
13590           int empty_dtor = get_last_insn () == last_dtor_insn;
13591
13592           if (current_function_assigns_this)
13593             cond = build (NE_EXPR, boolean_type_node,
13594                           current_class_ptr, integer_zero_node);
13595           else
13596             {
13597               int n_baseclasses = CLASSTYPE_N_BASECLASSES (current_class_type);
13598
13599               /* If this destructor is empty, then we don't need to check
13600                  whether `this' is NULL in some cases.  */
13601               if ((flag_this_is_variable & 1) == 0)
13602                 ok_to_optimize_dtor = 1;
13603               else if (empty_dtor)
13604                 ok_to_optimize_dtor
13605                   = (n_baseclasses == 0
13606                      || (n_baseclasses == 1
13607                          && TYPE_HAS_DESTRUCTOR (TYPE_BINFO_BASETYPE (current_class_type, 0))));
13608             }
13609
13610           /* These initializations might go inline.  Protect
13611              the binding level of the parms.  */
13612           pushlevel (0);
13613           expand_start_bindings (0);
13614
13615           if (current_function_assigns_this)
13616             {
13617               current_function_assigns_this = 0;
13618               current_function_just_assigned_this = 0;
13619             }
13620
13621           /* Generate the code to call destructor on base class.
13622              If this destructor belongs to a class with virtual
13623              functions, then set the virtual function table
13624              pointer to represent the type of our base class.  */
13625
13626           /* This side-effect makes call to `build_delete' generate the
13627              code we have to have at the end of this destructor.
13628              `build_delete' will set the flag again.  */
13629           TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13630
13631           /* These are two cases where we cannot delegate deletion.  */
13632           if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13633               || TYPE_GETS_REG_DELETE (current_class_type))
13634             exprstmt = build_delete (current_class_type, current_class_ref, integer_zero_node,
13635                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13636           else
13637             exprstmt = build_delete (current_class_type, current_class_ref, in_charge_node,
13638                                      LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 0);
13639
13640           /* If we did not assign to this, then `this' is non-zero at
13641              the end of a destructor.  As a special optimization, don't
13642              emit test if this is an empty destructor.  If it does nothing,
13643              it does nothing.  If it calls a base destructor, the base
13644              destructor will perform the test.  */
13645
13646           if (exprstmt != error_mark_node
13647               && (TREE_CODE (exprstmt) != NOP_EXPR
13648                   || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13649                   || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13650             {
13651               expand_label (dtor_label);
13652               if (cond != integer_one_node)
13653                 expand_start_cond (cond, 0);
13654               if (exprstmt != void_zero_node)
13655                 /* Don't call `expand_expr_stmt' if we're not going to do
13656                    anything, since -Wall will give a diagnostic.  */
13657                 expand_expr_stmt (exprstmt);
13658
13659               /* Run destructor on all virtual baseclasses.  */
13660               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13661                 {
13662                   tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13663                   expand_start_cond (build (BIT_AND_EXPR, integer_type_node,
13664                                             in_charge_node, integer_two_node), 0);
13665                   while (vbases)
13666                     {
13667                       if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13668                         {
13669                           tree vb = get_vbase
13670                             (BINFO_TYPE (vbases),
13671                              TYPE_BINFO (current_class_type));
13672                           expand_expr_stmt
13673                             (build_scoped_method_call
13674                              (current_class_ref, vb, dtor_identifier,
13675                               build_expr_list (NULL_TREE, integer_zero_node)));
13676                         }
13677                       vbases = TREE_CHAIN (vbases);
13678                     }
13679                   expand_end_cond ();
13680                 }
13681
13682               do_pending_stack_adjust ();
13683               if (cond != integer_one_node)
13684                 expand_end_cond ();
13685             }
13686
13687           virtual_size = c_sizeof (current_class_type);
13688
13689           /* At the end, call delete if that's what's requested.  */
13690
13691           /* FDIS sez: At the point of definition of a virtual destructor
13692                (including an implicit definition), non-placement operator
13693                delete shall be looked up in the scope of the destructor's
13694                class and if found shall be accessible and unambiguous.
13695
13696              This is somewhat unclear, but I take it to mean that if the
13697              class only defines placement deletes we don't do anything here.
13698              So we pass LOOKUP_SPECULATIVELY; delete_sanity will complain
13699              for us if they ever try to delete one of these.  */
13700
13701           if (TYPE_GETS_REG_DELETE (current_class_type)
13702               || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13703             exprstmt = build_op_delete_call
13704               (DELETE_EXPR, current_class_ptr, virtual_size,
13705                LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13706           else
13707             exprstmt = NULL_TREE;
13708
13709           if (exprstmt)
13710             {
13711               cond = build (BIT_AND_EXPR, integer_type_node,
13712                             in_charge_node, integer_one_node);
13713               expand_start_cond (cond, 0);
13714               expand_expr_stmt (exprstmt);
13715               expand_end_cond ();
13716             }
13717
13718           /* End of destructor.  */
13719           expand_end_bindings (NULL_TREE, getdecls () != NULL_TREE, 0);
13720           poplevel (getdecls () != NULL_TREE, 0, 0);
13721
13722           /* Back to the top of destructor.  */
13723           /* Don't execute destructor code if `this' is NULL.  */
13724
13725           start_sequence ();
13726
13727           /* If the dtor is empty, and we know there is not possible way we
13728              could use any vtable entries, before they are possibly set by
13729              a base class dtor, we don't have to setup the vtables, as we
13730              know that any base class dtoring will set up any vtables it
13731              needs.  We avoid MI, because one base class dtor can do a
13732              virtual dispatch to an overridden function that would need to
13733              have a non-related vtable set up, we cannot avoid setting up
13734              vtables in that case.  We could change this to see if there is
13735              just one vtable.  */
13736           if (! empty_dtor || TYPE_USES_COMPLEX_INHERITANCE (current_class_type))
13737             {
13738               /* Make all virtual function table pointers in non-virtual base
13739                  classes point to CURRENT_CLASS_TYPE's virtual function
13740                  tables.  */
13741               expand_direct_vtbls_init (binfo, binfo, 1, 0, current_class_ptr);
13742
13743               if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13744                 expand_indirect_vtbls_init (binfo, current_class_ref, current_class_ptr);
13745             }
13746           
13747           if (! ok_to_optimize_dtor)
13748             {
13749               cond = build_binary_op (NE_EXPR,
13750                                       current_class_ptr, integer_zero_node, 1);
13751               expand_start_cond (cond, 0);
13752             }
13753
13754           insns = get_insns ();
13755           end_sequence ();
13756
13757           last_parm_insn = get_first_nonparm_insn ();
13758           if (last_parm_insn == NULL_RTX)
13759             last_parm_insn = get_last_insn ();
13760           else
13761             last_parm_insn = previous_insn (last_parm_insn);
13762
13763           emit_insns_after (insns, last_parm_insn);
13764
13765           if (! ok_to_optimize_dtor)
13766             expand_end_cond ();
13767         }
13768       else if (current_function_assigns_this)
13769         {
13770           /* Does not need to call emit_base_init, because
13771              that is done (if needed) just after assignment to this
13772              is seen.  */
13773
13774           if (DECL_CONSTRUCTOR_P (current_function_decl))
13775             {
13776               end_protect_partials ();
13777               expand_label (ctor_label);
13778               ctor_label = NULL_TREE;
13779
13780               if (call_poplevel)
13781                 {
13782                   decls = getdecls ();
13783                   expand_end_bindings (decls, decls != NULL_TREE, 0);
13784                   poplevel (decls != NULL_TREE, 0, 0);
13785                 }
13786               /* c_expand_return knows to return 'this' from a constructor.  */
13787               c_expand_return (NULL_TREE);
13788             }
13789           else if (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl))) != VOID_TYPE
13790                    && return_label != NULL_RTX)
13791             no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13792
13793           current_function_assigns_this = 0;
13794           current_function_just_assigned_this = 0;
13795           base_init_expr = NULL_TREE;
13796         }
13797       else if (DECL_CONSTRUCTOR_P (fndecl))
13798         {
13799           tree cond = NULL_TREE, thenclause = NULL_TREE;
13800           /* Allow constructor for a type to get a new instance of the object
13801              using `build_new'.  */
13802           tree abstract_virtuals = CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type);
13803           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = NULL_TREE;
13804
13805           DECL_RETURNS_FIRST_ARG (fndecl) = 1;
13806
13807           if (flag_this_is_variable > 0)
13808             {
13809               cond = build_binary_op (EQ_EXPR,
13810                                       current_class_ptr, integer_zero_node, 1);
13811               thenclause = build_modify_expr (current_class_ptr, NOP_EXPR,
13812                                               build_new (NULL_TREE, current_class_type, void_type_node, 0));
13813             }
13814
13815           CLASSTYPE_ABSTRACT_VIRTUALS (current_class_type) = abstract_virtuals;
13816
13817           start_sequence ();
13818
13819           if (flag_this_is_variable > 0)
13820             {
13821               expand_start_cond (cond, 0);
13822               expand_expr_stmt (thenclause);
13823               expand_end_cond ();
13824             }
13825
13826           /* Emit insns from `emit_base_init' which sets up virtual
13827              function table pointer(s).  */
13828           if (base_init_expr)
13829             {
13830               expand_expr_stmt (base_init_expr);
13831               base_init_expr = NULL_TREE;
13832             }
13833
13834           insns = get_insns ();
13835           end_sequence ();
13836
13837           /* This is where the body of the constructor begins.  */
13838
13839           emit_insns_after (insns, last_parm_cleanup_insn);
13840
13841           end_protect_partials ();
13842
13843           /* This is where the body of the constructor ends.  */
13844           expand_label (ctor_label);
13845           ctor_label = NULL_TREE;
13846
13847           if (call_poplevel)
13848             {
13849               decls = getdecls ();
13850               expand_end_bindings (decls, decls != NULL_TREE, 0);
13851               poplevel (decls != NULL_TREE, 1, 0);
13852             }
13853
13854           /* c_expand_return knows to return 'this' from a constructor.  */
13855           c_expand_return (NULL_TREE);
13856
13857           current_function_assigns_this = 0;
13858           current_function_just_assigned_this = 0;
13859         }
13860       else if (DECL_MAIN_P (fndecl))
13861         {
13862           /* Make it so that `main' always returns 0 by default.  */
13863 #ifdef VMS
13864           c_expand_return (integer_one_node);
13865 #else
13866           c_expand_return (integer_zero_node);
13867 #endif
13868         }
13869       else if (return_label != NULL_RTX
13870                && current_function_return_value == NULL_TREE
13871                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13872         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13873
13874       if (flag_exceptions)
13875         expand_exception_blocks ();
13876
13877       /* If this function is supposed to return a value, ensure that
13878          we do not fall into the cleanups by mistake.  The end of our
13879          function will look like this:
13880          
13881          user code (may have return stmt somewhere)
13882          goto no_return_label
13883          cleanup_label:
13884          cleanups
13885          goto return_label
13886          no_return_label:
13887          NOTE_INSN_FUNCTION_END
13888          return_label:
13889          things for return
13890          
13891          If the user omits a return stmt in the USER CODE section, we
13892          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13893          Otherwise, we won't.  */
13894       if (no_return_label)
13895         {
13896           DECL_CONTEXT (no_return_label) = fndecl;
13897           DECL_INITIAL (no_return_label) = error_mark_node;
13898           DECL_SOURCE_FILE (no_return_label) = input_filename;
13899           DECL_SOURCE_LINE (no_return_label) = lineno;
13900           expand_goto (no_return_label);
13901         }
13902
13903       if (cleanup_label)
13904         {
13905           /* Remove the binding contour which is used
13906              to catch cleanup-generated temporaries.  */
13907           expand_end_bindings (0, 0, 0);
13908           poplevel (0, 0, 0);
13909
13910           /* Emit label at beginning of cleanup code for parameters.  */
13911           emit_label (cleanup_label);
13912         }
13913
13914       /* Get return value into register if that's where it's supposed to be.  */
13915       if (original_result_rtx)
13916         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13917
13918       /* Finish building code that will trigger warnings if users forget
13919          to make their functions return values.  */
13920       if (no_return_label || cleanup_label)
13921         emit_jump (return_label);
13922       if (no_return_label)
13923         {
13924           /* We don't need to call `expand_*_return' here because we
13925              don't need any cleanups here--this path of code is only
13926              for error checking purposes.  */
13927           expand_label (no_return_label);
13928         }
13929
13930       /* Generate rtl for function exit.  */
13931       expand_function_end (input_filename, lineno, 1);
13932     }
13933   
13934   /* If we're processing a template, squirrel away the definition
13935      until we do an instantiation.  */
13936   if (processing_template_decl)
13937     {
13938       --minimal_parse_mode;
13939       DECL_SAVED_TREE (fndecl) = TREE_CHAIN (DECL_SAVED_TREE (fndecl));
13940       /* We have to save this value here in case
13941          maybe_end_member_template_processing decides to pop all the
13942          template parameters.  */
13943       in_template = 1;
13944     }
13945   else
13946     in_template = 0;
13947
13948   /* This must come after expand_function_end because cleanups might
13949      have declarations (from inline functions) that need to go into
13950      this function's blocks.  */
13951   if (current_binding_level->parm_flag != 1)
13952     my_friendly_abort (122);
13953   poplevel (1, 0, 1);
13954
13955   /* If this is a in-class inline definition, we may have to pop the
13956      bindings for the template parameters that we added in
13957      maybe_begin_member_template_processing when start_function was
13958      called.  */
13959   if (inclass_inline)
13960     maybe_end_member_template_processing ();
13961
13962   /* Reset scope for C++: if we were in the scope of a class,
13963      then when we finish this function, we are not longer so.
13964      This cannot be done until we know for sure that no more
13965      class members will ever be referenced in this function
13966      (i.e., calls to destructors).  */
13967   if (current_class_name)
13968     {
13969       ctype = current_class_type;
13970       pop_nested_class (1);
13971     }
13972
13973   /* Must mark the RESULT_DECL as being in this function.  */
13974   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13975
13976   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13977      to the FUNCTION_DECL node itself.  */
13978   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13979
13980   if (!in_template)
13981     {
13982       int saved_flag_keep_inline_functions =
13983         flag_keep_inline_functions;
13984
13985       /* So we can tell if jump_optimize sets it to 1.  */
13986       can_reach_end = 0;
13987
13988       if (DECL_CONTEXT (fndecl) != NULL_TREE
13989           && hack_decl_function_context (fndecl))
13990         /* Trick rest_of_compilation into not deferring output of this
13991            function, even if it is inline, since the rtl_obstack for
13992            this function is the function_obstack of the enclosing
13993            function and will be deallocated when the enclosing
13994            function is gone.  See save_tree_status.  */
13995         flag_keep_inline_functions = 1;
13996
13997       /* Run the optimizers and output the assembler code for this
13998          function.  */
13999
14000       if (DECL_ARTIFICIAL (fndecl))
14001         {
14002           /* Do we really *want* to inline this synthesized method?  */
14003
14004           int save_fif = flag_inline_functions;
14005           flag_inline_functions = 1;
14006
14007           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14008              will check our size.  */
14009           DECL_INLINE (fndecl) = 0;
14010
14011           rest_of_compilation (fndecl);
14012           flag_inline_functions = save_fif;
14013         }
14014       else
14015         rest_of_compilation (fndecl);
14016
14017       flag_keep_inline_functions = saved_flag_keep_inline_functions;
14018
14019       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14020         {
14021           /* Set DECL_EXTERNAL so that assemble_external will be called as
14022              necessary.  We'll clear it again in finish_file.  */
14023           if (! DECL_EXTERNAL (fndecl))
14024             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14025           DECL_EXTERNAL (fndecl) = 1;
14026           mark_inline_for_output (fndecl);
14027         }
14028
14029       if (ctype && TREE_ASM_WRITTEN (fndecl))
14030         note_debug_info_needed (ctype);
14031
14032       current_function_returns_null |= can_reach_end;
14033
14034       /* Since we don't normally go through c_expand_return for constructors,
14035          this normally gets the wrong value.
14036          Also, named return values have their return codes emitted after
14037          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14038       if (DECL_CONSTRUCTOR_P (fndecl)
14039           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14040         current_function_returns_null = 0;
14041
14042       if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
14043         cp_warning ("`noreturn' function `%D' does return", fndecl);
14044       else if ((warn_return_type || pedantic)
14045                && current_function_returns_null
14046                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14047         {
14048           /* If this function returns non-void and control can drop through,
14049              complain.  */
14050           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14051         }
14052       /* With just -W, complain only if function returns both with
14053          and without a value.  */
14054       else if (extra_warnings
14055                && current_function_returns_value && current_function_returns_null)
14056         warning ("this function may return with or without a value");
14057     }
14058
14059   --function_depth;
14060
14061   /* Free all the tree nodes making up this function.  */
14062   /* Switch back to allocating nodes permanently
14063      until we start another function.  */
14064   if (! nested)
14065     permanent_allocation (1);
14066
14067   if (DECL_SAVED_INSNS (fndecl) == NULL_RTX)
14068     {
14069       tree t;
14070
14071       /* Stop pointing to the local nodes about to be freed.  */
14072       /* But DECL_INITIAL must remain nonzero so we know this
14073          was an actual function definition.  */
14074       DECL_INITIAL (fndecl) = error_mark_node;
14075       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14076         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14077     }
14078
14079   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14080     static_ctors = perm_tree_cons (NULL_TREE, fndecl, static_ctors);
14081   if (DECL_STATIC_DESTRUCTOR (fndecl))
14082     static_dtors = perm_tree_cons (NULL_TREE, fndecl, static_dtors);
14083
14084   if (! nested)
14085     {
14086       /* Let the error reporting routines know that we're outside a
14087          function.  For a nested function, this value is used in
14088          pop_cp_function_context and then reset via pop_function_context.  */
14089       current_function_decl = NULL_TREE;
14090     }
14091
14092   named_label_uses = NULL;
14093   current_class_ptr = NULL_TREE;
14094   current_class_ref = NULL_TREE;
14095 }
14096 \f
14097 /* Create the FUNCTION_DECL for a function definition.
14098    DECLSPECS and DECLARATOR are the parts of the declaration;
14099    they describe the return type and the name of the function,
14100    but twisted together in a fashion that parallels the syntax of C.
14101
14102    This function creates a binding context for the function body
14103    as well as setting up the FUNCTION_DECL in current_function_decl.
14104
14105    Returns a FUNCTION_DECL on success.
14106
14107    If the DECLARATOR is not suitable for a function (it defines a datum
14108    instead), we return 0, which tells yyparse to report a parse error.
14109
14110    May return void_type_node indicating that this method is actually
14111    a friend.  See grokfield for more details.
14112
14113    Came here with a `.pushlevel' .
14114
14115    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14116    CHANGES TO CODE IN `grokfield'.  */
14117
14118 tree
14119 start_method (declspecs, declarator, attrlist)
14120      tree declarator, declspecs, attrlist;
14121 {
14122   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14123                                 attrlist);
14124
14125   /* Something too ugly to handle.  */
14126   if (fndecl == NULL_TREE)
14127     return NULL_TREE;
14128
14129   /* Pass friends other than inline friend functions back.  */
14130   if (fndecl == void_type_node)
14131     return fndecl;
14132
14133   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14134     /* Not a function, tell parser to report parse error.  */
14135     return NULL_TREE;
14136
14137   if (IS_SIGNATURE (current_class_type))
14138     IS_DEFAULT_IMPLEMENTATION (fndecl) = 1;
14139
14140   if (DECL_IN_AGGR_P (fndecl))
14141     {
14142       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14143         {
14144           if (DECL_CONTEXT (fndecl) 
14145               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14146             cp_error ("`%D' is already defined in class %s", fndecl,
14147                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14148         }
14149       return void_type_node;
14150     }
14151
14152   check_template_shadow (fndecl);
14153
14154   DECL_THIS_INLINE (fndecl) = 1;
14155
14156   if (flag_default_inline)
14157     DECL_INLINE (fndecl) = 1;
14158
14159   /* We process method specializations in finish_struct_1.  */
14160   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14161     fndecl = push_template_decl (fndecl);
14162
14163   /* We read in the parameters on the maybepermanent_obstack,
14164      but we won't be getting back to them until after we
14165      may have clobbered them.  So the call to preserve_data
14166      will keep them safe.  */
14167   preserve_data ();
14168
14169   if (! DECL_FRIEND_P (fndecl))
14170     {
14171       if (TREE_CHAIN (fndecl))
14172         {
14173           fndecl = copy_node (fndecl);
14174           TREE_CHAIN (fndecl) = NULL_TREE;
14175         }
14176
14177       if (DECL_CONSTRUCTOR_P (fndecl))
14178         {
14179           if (! grok_ctor_properties (current_class_type, fndecl))
14180             return void_type_node;
14181         }
14182       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14183         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14184     }
14185
14186   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
14187
14188   /* Make a place for the parms */
14189   pushlevel (0);
14190   current_binding_level->parm_flag = 1;
14191   
14192   DECL_IN_AGGR_P (fndecl) = 1;
14193   return fndecl;
14194 }
14195
14196 /* Go through the motions of finishing a function definition.
14197    We don't compile this method until after the whole class has
14198    been processed.
14199
14200    FINISH_METHOD must return something that looks as though it
14201    came from GROKFIELD (since we are defining a method, after all).
14202
14203    This is called after parsing the body of the function definition.
14204    STMTS is the chain of statements that makes up the function body.
14205
14206    DECL is the ..._DECL that `start_method' provided.  */
14207
14208 tree
14209 finish_method (decl)
14210      tree decl;
14211 {
14212   register tree fndecl = decl;
14213   tree old_initial;
14214
14215   register tree link;
14216
14217   if (decl == void_type_node)
14218     return decl;
14219
14220   old_initial = DECL_INITIAL (fndecl);
14221
14222   /* Undo the level for the parms (from start_method).
14223      This is like poplevel, but it causes nothing to be
14224      saved.  Saving information here confuses symbol-table
14225      output routines.  Besides, this information will
14226      be correctly output when this method is actually
14227      compiled.  */
14228
14229   /* Clear out the meanings of the local variables of this level;
14230      also record in each decl which block it belongs to.  */
14231
14232   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14233     {
14234       if (DECL_NAME (link) != NULL_TREE)
14235         pop_binding (DECL_NAME (link), link);
14236       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14237       DECL_CONTEXT (link) = NULL_TREE;
14238     }
14239
14240   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14241                       (HOST_WIDE_INT) current_binding_level->level_chain,
14242                       current_binding_level->parm_flag,
14243                       current_binding_level->keep);
14244
14245   poplevel (0, 0, 0);
14246
14247   DECL_INITIAL (fndecl) = old_initial;
14248
14249   /* We used to check if the context of FNDECL was different from
14250      current_class_type as another way to get inside here.  This didn't work
14251      for String.cc in libg++.  */
14252   if (DECL_FRIEND_P (fndecl))
14253     {
14254       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14255         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14256       decl = void_type_node;
14257     }
14258
14259   return decl;
14260 }
14261 \f
14262 /* Called when a new struct TYPE is defined.
14263    If this structure or union completes the type of any previous
14264    variable declaration, lay it out and output its rtl.  */
14265
14266 void
14267 hack_incomplete_structures (type)
14268      tree type;
14269 {
14270   tree *list;
14271
14272   if (current_binding_level->incomplete == NULL_TREE)
14273     return;
14274
14275   if (!type) /* Don't do this for class templates.  */
14276     return;
14277
14278   for (list = &current_binding_level->incomplete; *list; )
14279     {
14280       tree decl = TREE_VALUE (*list);
14281       if ((decl && TREE_TYPE (decl) == type)
14282           || (TREE_TYPE (decl)
14283               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14284               && TREE_TYPE (TREE_TYPE (decl)) == type))
14285         {
14286           int toplevel = toplevel_bindings_p ();
14287           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14288               && TREE_TYPE (TREE_TYPE (decl)) == type)
14289             layout_type (TREE_TYPE (decl));
14290           layout_decl (decl, 0);
14291           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14292           if (! toplevel)
14293             {
14294               tree cleanup;
14295               expand_decl (decl);
14296               cleanup = maybe_build_cleanup (decl);
14297               expand_decl_init (decl);
14298               if (! expand_decl_cleanup (decl, cleanup))
14299                 cp_error ("parser lost in parsing declaration of `%D'",
14300                           decl);
14301             }
14302           *list = TREE_CHAIN (*list);
14303         }
14304       else
14305         list = &TREE_CHAIN (*list);
14306     }
14307 }
14308
14309 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14310    See build_delete for information about AUTO_DELETE.
14311
14312    Don't build these on the momentary obstack; they must live
14313    the life of the binding contour.  */
14314
14315 static tree
14316 maybe_build_cleanup_1 (decl, auto_delete)
14317      tree decl, auto_delete;
14318 {
14319   tree type = TREE_TYPE (decl);
14320   if (TYPE_NEEDS_DESTRUCTOR (type))
14321     {
14322       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14323       tree rval;
14324
14325       if (TREE_CODE (decl) != PARM_DECL)
14326         temp = suspend_momentary ();
14327
14328       if (TREE_CODE (type) == ARRAY_TYPE)
14329         rval = decl;
14330       else
14331         {
14332           mark_addressable (decl);
14333           rval = build_unary_op (ADDR_EXPR, decl, 0);
14334         }
14335
14336       /* Optimize for space over speed here.  */
14337       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14338           || flag_expensive_optimizations)
14339         flags |= LOOKUP_NONVIRTUAL;
14340
14341       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14342
14343       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14344           && ! TYPE_HAS_DESTRUCTOR (type))
14345         rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval,
14346                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14347
14348       if (TREE_CODE (decl) != PARM_DECL)
14349         resume_momentary (temp);
14350
14351       return rval;
14352     }
14353   return 0;
14354 }
14355
14356 /* If DECL is of a type which needs a cleanup, build that cleanup
14357    here.  The cleanup does free the storage with a call to delete.  */
14358
14359 tree
14360 maybe_build_cleanup_and_delete (decl)
14361      tree decl;
14362 {
14363   return maybe_build_cleanup_1 (decl, integer_three_node);
14364 }
14365
14366 /* If DECL is of a type which needs a cleanup, build that cleanup
14367    here.  The cleanup does not free the storage with a call a delete.  */
14368
14369 tree
14370 maybe_build_cleanup (decl)
14371      tree decl;
14372 {
14373   return maybe_build_cleanup_1 (decl, integer_two_node);
14374 }
14375 \f
14376 /* Expand a C++ expression at the statement level.
14377    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14378    The C++ type checker should get all of these out when
14379    expressions are combined with other, type-providing, expressions,
14380    leaving only orphan expressions, such as:
14381
14382    &class::bar;         / / takes its address, but does nothing with it.  */
14383
14384 void
14385 cplus_expand_expr_stmt (exp)
14386      tree exp;
14387 {
14388   if (processing_template_decl)
14389     {
14390       add_tree (build_min_nt (EXPR_STMT, exp));
14391       return;
14392     }
14393
14394   /* Arrange for all temps to disappear.  */
14395   expand_start_target_temps ();
14396
14397   exp = require_complete_type_in_void (exp);
14398   
14399   if (TREE_CODE (exp) == FUNCTION_DECL)
14400     {
14401       cp_warning ("reference, not call, to function `%D'", exp);
14402       warning ("at this point in file");
14403     }
14404
14405 #if 0
14406   /* We should do this eventually, but right now this causes regex.o from
14407      libg++ to miscompile, and tString to core dump.  */
14408   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14409 #endif
14410
14411   /* Strip unused implicit INDIRECT_REFs of references.  */
14412   if (TREE_CODE (exp) == INDIRECT_REF
14413       && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
14414     exp = TREE_OPERAND (exp, 0);
14415
14416   /* If we don't do this, we end up down inside expand_expr
14417      trying to do TYPE_MODE on the ERROR_MARK, and really
14418      go outside the bounds of the type.  */
14419   if (exp != error_mark_node)
14420     expand_expr_stmt (break_out_cleanups (exp));
14421
14422   /* Clean up any pending cleanups.  This happens when a function call
14423      returns a cleanup-needing value that nobody uses.  */
14424   expand_end_target_temps ();
14425 }
14426
14427 /* When a stmt has been parsed, this function is called.
14428
14429    Currently, this function only does something within a
14430    constructor's scope: if a stmt has just assigned to this,
14431    and we are in a derived class, we call `emit_base_init'.  */
14432
14433 void
14434 finish_stmt ()
14435 {
14436   extern struct nesting *cond_stack, *loop_stack, *case_stack;
14437
14438   
14439   if (current_function_assigns_this
14440       || ! current_function_just_assigned_this)
14441     return;
14442   if (DECL_CONSTRUCTOR_P (current_function_decl))
14443     {
14444       /* Constructors must wait until we are out of control
14445          zones before calling base constructors.  */
14446       if (cond_stack || loop_stack || case_stack)
14447         return;
14448       expand_expr_stmt (base_init_expr);
14449       check_base_init (current_class_type);
14450     }
14451   current_function_assigns_this = 1;
14452 }
14453
14454 /* Change a static member function definition into a FUNCTION_TYPE, instead
14455    of the METHOD_TYPE that we create when it's originally parsed.
14456
14457    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14458    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14459    other decls.  Either pass the addresses of local variables or NULL.  */
14460
14461 void
14462 revert_static_member_fn (decl, fn, argtypes)
14463      tree *decl, *fn, *argtypes;
14464 {
14465   tree tmp;
14466   tree function = fn ? *fn : TREE_TYPE (*decl);
14467   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14468
14469   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14470       != TYPE_UNQUALIFIED)
14471     cp_error ("static member function `%#D' declared with type qualifiers", 
14472               *decl);
14473
14474   args = TREE_CHAIN (args);
14475   tmp = build_function_type (TREE_TYPE (function), args);
14476   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14477   tmp = build_exception_variant (tmp,
14478                                  TYPE_RAISES_EXCEPTIONS (function));
14479   TREE_TYPE (*decl) = tmp;
14480   if (DECL_ARGUMENTS (*decl))
14481     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14482   DECL_STATIC_FUNCTION_P (*decl) = 1;
14483   if (fn)
14484     *fn = tmp;
14485   if (argtypes)
14486     *argtypes = args;
14487 }
14488
14489 int
14490 id_in_current_class (id)
14491      tree id;
14492 {
14493   return !!purpose_member (id, class_binding_level->class_shadowed);
14494 }
14495
14496 struct cp_function
14497 {
14498   int returns_value;
14499   int returns_null;
14500   int assigns_this;
14501   int just_assigned_this;
14502   int parms_stored;
14503   int temp_name_counter;
14504   tree named_labels;
14505   struct named_label_list *named_label_uses;
14506   tree shadowed_labels;
14507   tree ctor_label;
14508   tree dtor_label;
14509   rtx last_dtor_insn;
14510   rtx last_parm_cleanup_insn;
14511   tree base_init_list;
14512   tree member_init_list;
14513   tree base_init_expr;
14514   tree current_class_ptr;
14515   tree current_class_ref;
14516   rtx result_rtx;
14517   struct cp_function *next;
14518   struct binding_level *binding_level;
14519   int static_labelno;
14520 };
14521
14522 static struct cp_function *cp_function_chain;
14523
14524 extern int temp_name_counter;
14525
14526 /* Save and reinitialize the variables
14527    used during compilation of a C++ function.  */
14528
14529 void
14530 push_cp_function_context (context)
14531      tree context;
14532 {
14533   struct cp_function *p
14534     = (struct cp_function *) xmalloc (sizeof (struct cp_function));
14535
14536   push_function_context_to (context);
14537
14538   p->next = cp_function_chain;
14539   cp_function_chain = p;
14540
14541   p->named_labels = named_labels;
14542   p->named_label_uses = named_label_uses;
14543   p->shadowed_labels = shadowed_labels;
14544   p->returns_value = current_function_returns_value;
14545   p->returns_null = current_function_returns_null;
14546   p->binding_level = current_binding_level;
14547   p->ctor_label = ctor_label;
14548   p->dtor_label = dtor_label;
14549   p->last_dtor_insn = last_dtor_insn;
14550   p->last_parm_cleanup_insn = last_parm_cleanup_insn;
14551   p->assigns_this = current_function_assigns_this;
14552   p->just_assigned_this = current_function_just_assigned_this;
14553   p->parms_stored = current_function_parms_stored;
14554   p->result_rtx = original_result_rtx;
14555   p->base_init_expr = base_init_expr;
14556   p->temp_name_counter = temp_name_counter;
14557   p->base_init_list = current_base_init_list;
14558   p->member_init_list = current_member_init_list;
14559   p->current_class_ptr = current_class_ptr;
14560   p->current_class_ref = current_class_ref;
14561   p->static_labelno = static_labelno;
14562 }
14563
14564 /* Restore the variables used during compilation of a C++ function.  */
14565
14566 void
14567 pop_cp_function_context (context)
14568      tree context;
14569 {
14570   struct cp_function *p = cp_function_chain;
14571   tree link;
14572
14573   /* Bring back all the labels that were shadowed.  */
14574   for (link = shadowed_labels; link; link = TREE_CHAIN (link))
14575     if (DECL_NAME (TREE_VALUE (link)) != 0)
14576       SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)),
14577                                   TREE_VALUE (link));
14578
14579   pop_function_context_from (context);
14580
14581   cp_function_chain = p->next;
14582
14583   named_labels = p->named_labels;
14584   named_label_uses = p->named_label_uses;
14585   shadowed_labels = p->shadowed_labels;
14586   current_function_returns_value = p->returns_value;
14587   current_function_returns_null = p->returns_null;
14588   current_binding_level = p->binding_level;
14589   ctor_label = p->ctor_label;
14590   dtor_label = p->dtor_label;
14591   last_dtor_insn = p->last_dtor_insn;
14592   last_parm_cleanup_insn = p->last_parm_cleanup_insn;
14593   current_function_assigns_this = p->assigns_this;
14594   current_function_just_assigned_this = p->just_assigned_this;
14595   current_function_parms_stored = p->parms_stored;
14596   original_result_rtx = p->result_rtx;
14597   base_init_expr = p->base_init_expr;
14598   temp_name_counter = p->temp_name_counter;
14599   current_base_init_list = p->base_init_list;
14600   current_member_init_list = p->member_init_list;
14601   current_class_ptr = p->current_class_ptr;
14602   current_class_ref = p->current_class_ref;
14603   static_labelno = p->static_labelno;
14604
14605   free (p);
14606 }
14607
14608 int
14609 in_function_p ()
14610 {
14611   return function_depth != 0;
14612 }