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