OSDN Git Service

* decl.c (pushdecl): Do create a binding for extern "C" functions,
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46 #include "ggc.h"
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern tree global_namespace;
59
60 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
61
62 /* Use garbage collection.  */
63
64 int ggc_p = 1;
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 WCHAR_UNSIGNED
73 #define WCHAR_UNSIGNED 0
74 #endif
75
76 #ifndef CHAR_TYPE_SIZE
77 #define CHAR_TYPE_SIZE BITS_PER_UNIT
78 #endif
79
80 #ifndef BOOL_TYPE_SIZE
81 #ifdef SLOW_BYTE_ACCESS
82 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
83 #else
84 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
85 #endif
86 #endif
87
88 /* We let tm.h override the types used here, to handle trivial differences
89    such as the choice of unsigned int or long unsigned int for size_t.
90    When machines start needing nontrivial differences in the size type,
91    it would be best to do something here to figure out automatically
92    from other information what type to use.  */
93
94 #ifndef SIZE_TYPE
95 #define SIZE_TYPE "long unsigned int"
96 #endif
97
98 #ifndef PTRDIFF_TYPE
99 #define PTRDIFF_TYPE "long int"
100 #endif
101
102 #ifndef WCHAR_TYPE
103 #define WCHAR_TYPE "int"
104 #endif
105
106 static tree grokparms                           PROTO((tree, int));
107 static const char *redeclaration_error_message  PROTO((tree, tree));
108
109 static struct stack_level *push_decl_level PROTO((struct stack_level *,
110                                                   struct obstack *));
111 static void push_binding_level PROTO((struct binding_level *, int,
112                                       int));
113 static void pop_binding_level PROTO((void));
114 static void suspend_binding_level PROTO((void));
115 static void resume_binding_level PROTO((struct binding_level *));
116 static struct binding_level *make_binding_level PROTO((void));
117 static void declare_namespace_level PROTO((void));
118 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
119 static void storedecls PROTO((tree));
120 static void require_complete_types_for_parms PROTO((tree));
121 static void push_overloaded_decl_1 PROTO((tree));
122 static int ambi_op_p PROTO((tree));
123 static int unary_op_p PROTO((tree));
124 static tree store_bindings PROTO((tree, tree));
125 static tree lookup_tag_reverse PROTO((tree, tree));
126 static tree obscure_complex_init PROTO((tree, tree));
127 static tree maybe_build_cleanup_1 PROTO((tree, tree));
128 static tree lookup_name_real PROTO((tree, int, int, int));
129 static void warn_extern_redeclared_static PROTO((tree, tree));
130 static void grok_reference_init PROTO((tree, tree, tree));
131 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
132                               enum overload_flags, tree,
133                               tree, int, int, int, int, int, int, tree));
134 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
135 static tree lookup_tag PROTO((enum tree_code, tree,
136                               struct binding_level *, int));
137 static void set_identifier_type_value_with_scope
138         PROTO((tree, tree, struct binding_level *));
139 static void record_builtin_type PROTO((enum rid, const char *, tree));
140 static void record_unknown_type PROTO((tree, const char *));
141 static int member_function_or_else PROTO((tree, tree, const char *));
142 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
143                                   int));
144 static void lang_print_error_function PROTO((const char *));
145 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
146 static void check_for_uninitialized_const_var PROTO((tree));
147 static unsigned long typename_hash PROTO((hash_table_key));
148 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
149 static void push_binding PROTO((tree, tree, struct binding_level*));
150 static int add_binding PROTO((tree, tree));
151 static void pop_binding PROTO((tree, tree));
152 static tree local_variable_p PROTO((tree));
153 static tree find_binding PROTO((tree, tree));
154 static tree select_decl PROTO((tree, int));
155 static int lookup_flags PROTO((int, int));
156 static tree qualify_lookup PROTO((tree, int));
157 static tree record_builtin_java_type PROTO((const char *, int));
158 static const char *tag_name PROTO((enum tag_types code));
159 static void find_class_binding_level PROTO((void));
160 static struct binding_level *innermost_nonclass_level PROTO((void));
161 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
162 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
163 static int walk_globals_r PROTO((tree, void *));
164 static void add_decl_to_level PROTO((tree, struct binding_level *));
165 static tree make_label_decl PROTO((tree, int));
166 static void pop_label PROTO((tree));
167 static void pop_labels PROTO((tree));
168 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
169 static void layout_var_decl PROTO((tree));
170 static void maybe_commonize_var PROTO((tree));
171 static tree check_initializer PROTO((tree, tree));
172 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
173 static void push_cp_function_context PROTO((struct function *));
174 static void pop_cp_function_context PROTO((struct function *));
175 static void mark_binding_level PROTO((void *));
176 static void mark_cp_function_context PROTO((struct function *));
177 static void mark_saved_scope PROTO((void *));
178 static void mark_lang_function PROTO((struct language_function *));
179 static void save_function_data PROTO((tree));
180 static void check_function_type PROTO((tree));
181 static void destroy_local_static PROTO((tree));
182 static void destroy_local_var PROTO((tree));
183 static void finish_destructor_body PROTO((void));
184
185 #if defined (DEBUG_CP_BINDING_LEVELS)
186 static void indent PROTO((void));
187 #endif
188
189 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
190 tree error_mark_list;
191
192 /* The following symbols are subsumed in the cp_global_trees array, and
193    listed here individually for documentation purposes. 
194
195    C++ extensions
196         tree wchar_decl_node;
197         tree void_zero_node;
198
199         tree vtable_entry_type;
200         tree delta_type_node;
201 #if 0
202    Old rtti stuff.
203         tree __baselist_desc_type_node;
204         tree __i_desc_type_node, __m_desc_type_node;
205         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
206 #endif
207         tree __t_desc_type_node;
208 #if 0
209         tree __tp_desc_type_node;
210 #endif
211         tree __access_mode_type_node;
212         tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
213         tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
214         tree __ptmf_desc_type_node, __ptmd_desc_type_node;
215 #if 0
216    Not needed yet?  May be needed one day?
217         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
218         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
219         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
220 #endif
221
222         tree class_star_type_node;
223         tree class_type_node, record_type_node, union_type_node, enum_type_node;
224         tree unknown_type_node;
225
226    Array type `vtable_entry_type[]'
227
228         tree vtbl_type_node;
229         tree vtbl_ptr_type_node;
230
231    Nnamespace std
232
233         tree std_node;
234
235    A FUNCTION_DECL which can call `abort'.  Not necessarily the
236    one that the user will declare, but sufficient to be called
237    by routines that want to abort the program.
238
239         tree abort_fndecl;
240
241    The FUNCTION_DECL for the default `::operator delete'.
242
243         tree global_delete_fndecl;
244
245    Used by RTTI
246         tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
247
248 */
249
250 tree cp_global_trees[CPTI_MAX];
251
252 /* Indicates that there is a type value in some namespace, although
253    that is not necessarily in scope at the moment.  */
254
255 static tree global_type_node;
256
257 /* Namespace std.  */
258 int in_std;
259
260 /* Expect only namespace names now. */
261 static int only_namespace_names;
262
263 /* In a destructor, the last insn emitted after the start of the
264    function and the parms.  */
265
266 #define last_dtor_insn cp_function_chain->x_last_dtor_insn
267
268 /* In a constructor, the last insn emitted after the start of the
269    function and the parms, the exception specification and any
270    function-try-block.  The constructor initializers are emitted after
271    this insn.  */
272
273 #define last_parm_cleanup_insn cp_function_chain->x_last_parm_cleanup_insn
274
275 /* If original DECL_RESULT of current function was a register,
276    but due to being an addressable named return value, would up
277    on the stack, this variable holds the named return value's
278    original location.  */
279
280 #define original_result_rtx cp_function_chain->x_result_rtx
281
282 struct named_label_list
283 {
284   struct binding_level *binding_level;
285   tree names_in_scope;
286   tree label_decl;
287   const char *filename_o_goto;
288   int lineno_o_goto;
289   struct named_label_list *next;
290 };
291
292 /* Used only for jumps to as-yet undefined labels, since jumps to
293    defined labels can have their validity checked by stmt.c.  */
294
295 #define named_label_uses cp_function_chain->x_named_label_uses
296
297 /* A list of objects which have constructors or destructors
298    which reside in the global scope.  The decl is stored in
299    the TREE_VALUE slot and the initializer is stored
300    in the TREE_PURPOSE slot.  */
301 tree static_aggregates;
302
303 /* -- end of C++ */
304
305 /* A node for the integer constants 2, and 3.  */
306
307 tree integer_two_node, integer_three_node;
308
309 /* While defining an enum type, this is 1 plus the last enumerator
310    constant value.  */
311
312 static tree enum_next_value;
313
314 /* Nonzero means that there was overflow computing enum_next_value.  */
315
316 static int enum_overflow;
317
318 /* Parsing a function declarator leaves here a chain of structure
319    and enum types declared in the parmlist.  */
320
321 static tree last_function_parm_tags;
322
323 /* Similar, for last_function_parm_tags.  */
324 tree last_function_parms;
325 static tree current_function_parm_tags;
326
327 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
328    that have names.  Here so we can clear out their names' definitions
329    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
330    TREE_PURPOSE is the previous binding of the label.  */
331
332 #define named_labels cp_function_chain->x_named_labels
333
334 /* The FUNCTION_DECL for the function currently being compiled,
335    or 0 if between functions.  */
336 tree current_function_decl;
337
338 /* Set to 0 at beginning of a function definition, and whenever
339    a label (case or named) is defined.  Set to value of expression
340    returned from function when that value can be transformed into
341    a named return value.  */
342
343 tree current_function_return_value;
344
345 /* Nonzero means give `double' the same size as `float'.  */
346
347 extern int flag_short_double;
348
349 /* Nonzero means don't recognize any builtin functions.  */
350
351 extern int flag_no_builtin;
352
353 /* Nonzero means don't recognize the non-ANSI builtin functions.
354    -ansi sets this.  */
355
356 extern int flag_no_nonansi_builtin;
357
358 /* Nonzero means enable obscure ANSI features and disable GNU extensions
359    that might cause ANSI-compliant code to be miscompiled.  */
360
361 extern int flag_ansi;
362
363 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
364    objects.  */
365 extern int flag_huge_objects;
366
367 /* Nonzero if we want to conserve space in the .o files.  We do this
368    by putting uninitialized data and runtime initialized data into
369    .common instead of .data at the expense of not flagging multiple
370    definitions.  */
371 extern int flag_conserve_space;
372 \f
373 /* C and C++ flags are in decl2.c.  */
374
375 /* Flag used when debugging spew.c */
376
377 extern int spew_debug;
378
379 /* A expression of value 0 with the same precision as a sizetype
380    node, but signed.  */
381 tree signed_size_zero_node;
382
383 /* The name of the anonymous namespace, throughout this translation
384    unit.  */
385 tree anonymous_namespace_name;
386
387 \f
388 /* Allocate a level of searching.  */
389
390 static
391 struct stack_level *
392 push_decl_level (stack, obstack)
393      struct stack_level *stack;
394      struct obstack *obstack;
395 {
396   struct stack_level tem;
397   tem.prev = stack;
398
399   return push_stack_level (obstack, (char *)&tem, sizeof (tem));
400 }
401 \f
402 /* For each binding contour we allocate a binding_level structure
403    which records the names defined in that contour.
404    Contours include:
405     0) the global one
406     1) one for each function definition,
407        where internal declarations of the parameters appear.
408     2) one for each compound statement,
409        to record its declarations.
410
411    The current meaning of a name can be found by searching the levels
412    from the current one out to the global one.
413
414    Off to the side, may be the class_binding_level.  This exists only
415    to catch class-local declarations.  It is otherwise nonexistent.
416
417    Also there may be binding levels that catch cleanups that must be
418    run when exceptions occur.  Thus, to see whether a name is bound in
419    the current scope, it is not enough to look in the
420    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
421    instead.  */
422
423 /* Note that the information in the `names' component of the global contour
424    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
425
426 struct binding_level
427   {
428     /* A chain of _DECL nodes for all variables, constants, functions,
429        and typedef types.  These are in the reverse of the order
430        supplied.  There may be OVERLOADs on this list, too, but they
431        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
432     tree names;
433
434     /* A list of structure, union and enum definitions, for looking up
435        tag names.
436        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
437        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
438        or ENUMERAL_TYPE node.
439
440        C++: the TREE_VALUE nodes can be simple types for
441        component_bindings.  */
442     tree tags;
443
444     /* A list of USING_DECL nodes. */
445     tree usings;
446
447     /* A list of used namespaces. PURPOSE is the namespace,
448        VALUE the common ancestor with this binding_level's namespace. */
449     tree using_directives;
450
451     /* If this binding level is the binding level for a class, then
452        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
453        is the name of an entity bound in the class; the TREE_VALUE is
454        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
455        when leaving class scope, we can restore the
456        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
457        the DECL bound by this name in the class.  */
458     tree class_shadowed;
459
460     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
461        is used for all binding levels.  */
462     tree type_shadowed;
463
464     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
465        label in this scope.  The TREE_PURPOSE is the previous value of
466        the IDENTIFIER_LABEL VALUE.  */
467     tree shadowed_labels;
468
469     /* For each level (except not the global one),
470        a chain of BLOCK nodes for all the levels
471        that were entered and exited one level down.  */
472     tree blocks;
473
474     /* The BLOCK node for this level, if one has been preallocated.
475        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
476     tree this_block;
477
478     /* The binding level which this one is contained in (inherits from).  */
479     struct binding_level *level_chain;
480
481     /* List of decls in `names' that have incomplete
482        structure or union types.  */
483     tree incomplete;
484
485     /* List of VAR_DECLS saved from a previous for statement.
486        These would be dead in ANSI-conforming code, but might
487        be referenced in ARM-era code.  These are stored in a
488        TREE_LIST; the TREE_VALUE is the actual declaration.  */
489     tree dead_vars_from_for;
490
491     /* 1 for the level that holds the parameters of a function.
492        2 for the level that holds a class declaration.
493        3 for levels that hold parameter declarations.  */
494     unsigned parm_flag : 4;
495
496     /* 1 means make a BLOCK for this level regardless of all else.
497        2 for temporary binding contours created by the compiler.  */
498     unsigned keep : 3;
499
500     /* Nonzero if this level "doesn't exist" for tags.  */
501     unsigned tag_transparent : 1;
502
503     /* Nonzero if this level can safely have additional
504        cleanup-needing variables added to it.  */
505     unsigned more_cleanups_ok : 1;
506     unsigned have_cleanups : 1;
507
508     /* Nonzero if this level is for storing the decls for template
509        parameters and generic decls; these decls will be discarded and
510        replaced with a TEMPLATE_DECL.  */
511     unsigned pseudo_global : 1;
512
513     /* This is set for a namespace binding level.  */
514     unsigned namespace_p : 1;
515
516     /* True if this level is that of a for-statement where we need to
517        worry about ambiguous (ARM or ANSI) scope rules.  */
518     unsigned is_for_scope : 1;
519
520     /* True if this level corresponds to an EH region, as for a try block.  */
521     unsigned eh_region : 1;
522
523     /* One bit left for this word.  */
524
525 #if defined(DEBUG_CP_BINDING_LEVELS)
526     /* Binding depth at which this level began.  */
527     unsigned binding_depth;
528 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
529   };
530
531 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
532   
533 /* The binding level currently in effect.  */
534
535 #define current_binding_level                   \
536   (current_function                             \
537    ? cp_function_chain->bindings                \
538    : scope_chain->bindings)
539
540 /* The binding level of the current class, if any.  */
541
542 #define class_binding_level scope_chain->class_bindings
543
544 /* A chain of binding_level structures awaiting reuse.  */
545
546 static struct binding_level *free_binding_level;
547
548 /* The outermost binding level, for names of file scope.
549    This is created when the compiler is started and exists
550    through the entire run.  */
551
552 static struct binding_level *global_binding_level;
553
554 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
555
556 static int keep_next_level_flag;
557
558 #if defined(DEBUG_CP_BINDING_LEVELS)
559 static int binding_depth = 0;
560 static int is_class_level = 0;
561
562 static void
563 indent ()
564 {
565   register unsigned i;
566
567   for (i = 0; i < binding_depth*2; i++)
568     putc (' ', stderr);
569 }
570 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
571
572 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
573
574 static void
575 push_binding_level (newlevel, tag_transparent, keep)
576      struct binding_level *newlevel;
577      int tag_transparent, keep;
578 {
579   /* Add this level to the front of the chain (stack) of levels that
580      are active.  */
581   bzero ((char*) newlevel, sizeof (struct binding_level));
582   newlevel->level_chain = current_binding_level;
583   current_binding_level = newlevel;
584   newlevel->tag_transparent = tag_transparent;
585   newlevel->more_cleanups_ok = 1;
586
587   /* We are called before expand_start_bindings, but after
588      expand_eh_region_start for a try block; so we check this now,
589      before the EH block is covered up.  */
590   newlevel->eh_region = is_eh_region ();
591
592   newlevel->keep = keep;
593 #if defined(DEBUG_CP_BINDING_LEVELS)
594   newlevel->binding_depth = binding_depth;
595   indent ();
596   fprintf (stderr, "push %s level 0x%08x line %d\n",
597            (is_class_level) ? "class" : "block", newlevel, lineno);
598   is_class_level = 0;
599   binding_depth++;
600 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
601 }
602
603 /* Find the innermost enclosing class scope, and reset
604    CLASS_BINDING_LEVEL appropriately.  */
605
606 static void
607 find_class_binding_level ()
608 {
609   struct binding_level *level = current_binding_level;
610
611   while (level && level->parm_flag != 2)
612     level = level->level_chain;
613   if (level && level->parm_flag == 2)
614     class_binding_level = level;
615   else
616     class_binding_level = 0;
617 }
618
619 static void
620 pop_binding_level ()
621 {
622   if (global_binding_level)
623     {
624       /* Cannot pop a level, if there are none left to pop.  */
625       if (current_binding_level == global_binding_level)
626         my_friendly_abort (123);
627     }
628   /* Pop the current level, and free the structure for reuse.  */
629 #if defined(DEBUG_CP_BINDING_LEVELS)
630   binding_depth--;
631   indent ();
632   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
633           (is_class_level) ? "class" : "block",
634           current_binding_level, lineno);
635   if (is_class_level != (current_binding_level == class_binding_level))
636     {
637       indent ();
638       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
639     }
640   is_class_level = 0;
641 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
642   {
643     register struct binding_level *level = current_binding_level;
644     current_binding_level = current_binding_level->level_chain;
645     level->level_chain = free_binding_level;
646 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
647     if (level->binding_depth != binding_depth)
648       abort ();
649 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
650     free_binding_level = level;
651     find_class_binding_level ();
652   }
653 }
654
655 static void
656 suspend_binding_level ()
657 {
658   if (class_binding_level)
659     current_binding_level = class_binding_level;
660
661   if (global_binding_level)
662     {
663       /* Cannot suspend a level, if there are none left to suspend.  */
664       if (current_binding_level == global_binding_level)
665         my_friendly_abort (123);
666     }
667   /* Suspend the current level.  */
668 #if defined(DEBUG_CP_BINDING_LEVELS)
669   binding_depth--;
670   indent ();
671   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
672           (is_class_level) ? "class" : "block",
673           current_binding_level, lineno);
674   if (is_class_level != (current_binding_level == class_binding_level))
675     {
676       indent ();
677       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
678     }
679   is_class_level = 0;
680 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
681   current_binding_level = current_binding_level->level_chain;
682   find_class_binding_level ();
683 }
684
685 static void
686 resume_binding_level (b)
687      struct binding_level *b;
688 {
689   /* Resuming binding levels is meant only for namespaces,
690      and those cannot nest into classes. */
691   my_friendly_assert(!class_binding_level, 386);
692   /* Also, resuming a non-directly nested namespace is a no-no.  */
693   my_friendly_assert(b->level_chain == current_binding_level, 386);
694   current_binding_level = b;
695 #if defined(DEBUG_CP_BINDING_LEVELS)
696   b->binding_depth = binding_depth;
697   indent ();
698   fprintf (stderr, "resume %s level 0x%08x line %d\n",
699            (is_class_level) ? "class" : "block", b, lineno);
700   is_class_level = 0;
701   binding_depth++;
702 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
703 }
704 \f
705 /* Create a new `struct binding_level'.  */
706
707 static
708 struct binding_level *
709 make_binding_level ()
710 {
711   /* NOSTRICT */
712   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
713 }
714
715 /* Nonzero if we are currently in the global binding level.  */
716
717 int
718 global_bindings_p ()
719 {
720   return current_binding_level == global_binding_level;
721 }
722
723 /* Return the innermost binding level that is not for a class scope.  */
724
725 static struct binding_level *
726 innermost_nonclass_level ()
727 {
728   struct binding_level *b;
729
730   b = current_binding_level;
731   while (b->parm_flag == 2)
732     b = b->level_chain;
733
734   return b;
735 }
736
737 /* Nonzero if we are currently in a toplevel binding level.  This
738    means either the global binding level or a namespace in a toplevel
739    binding level.  Since there are no non-toplevel namespace levels,
740    this really means any namespace or pseudo-global level.  We also
741    include a class whose context is toplevel.  */
742
743 int
744 toplevel_bindings_p ()
745 {
746   struct binding_level *b = innermost_nonclass_level ();
747
748   return b->namespace_p || b->pseudo_global;
749 }
750
751 /* Nonzero if this is a namespace scope, or if we are defining a class
752    which is itself at namespace scope, or whose enclosing class is
753    such a class, etc.  */
754
755 int
756 namespace_bindings_p ()
757 {
758   struct binding_level *b = innermost_nonclass_level ();
759
760   return b->namespace_p;
761 }
762
763 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
764    unconditionally.  Otherwise, use the normal logic to decide whether
765    or not to create a BLOCK.  */
766
767 void
768 keep_next_level (keep)
769      int keep;
770 {
771   keep_next_level_flag = keep;
772 }
773
774 /* Nonzero if the current level needs to have a BLOCK made.  */
775
776 int
777 kept_level_p ()
778 {
779   return (current_binding_level->blocks != NULL_TREE
780           || current_binding_level->keep
781           || current_binding_level->names != NULL_TREE
782           || (current_binding_level->tags != NULL_TREE
783               && !current_binding_level->tag_transparent));
784 }
785
786 void
787 declare_pseudo_global_level ()
788 {
789   current_binding_level->pseudo_global = 1;
790 }
791
792 static void
793 declare_namespace_level ()
794 {
795   current_binding_level->namespace_p = 1;
796 }
797
798 int
799 pseudo_global_level_p ()
800 {
801   return current_binding_level->pseudo_global;
802 }
803
804 void
805 set_class_shadows (shadows)
806      tree shadows;
807 {
808   class_binding_level->class_shadowed = shadows;
809 }
810
811 /* Enter a new binding level.
812    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
813    not for that of tags.  */
814
815 void
816 pushlevel (tag_transparent)
817      int tag_transparent;
818 {
819   struct binding_level *newlevel;
820
821   if (current_function && !doing_semantic_analysis_p ())
822     return;
823
824   /* Reuse or create a struct for this binding level.  */
825 #if defined(DEBUG_CP_BINDING_LEVELS)
826   if (0)
827 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
828   if (free_binding_level)
829 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
830     {
831       newlevel = free_binding_level;
832       free_binding_level = free_binding_level->level_chain;
833     }
834   else
835     newlevel = make_binding_level ();
836
837   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
838   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
839   keep_next_level_flag = 0;
840 }
841
842 void
843 note_level_for_for ()
844 {
845   current_binding_level->is_for_scope = 1;
846 }
847
848 void
849 pushlevel_temporary (tag_transparent)
850      int tag_transparent;
851 {
852   pushlevel (tag_transparent);
853   current_binding_level->keep = 2;
854   clear_last_expr ();
855
856   /* Note we don't call push_momentary() here.  Otherwise, it would cause
857      cleanups to be allocated on the momentary obstack, and they will be
858      overwritten by the next statement.  */
859
860   expand_start_bindings (0);
861 }
862
863 /* For a binding between a name and an entity at a block scope,
864    this is the `struct binding_level' for the block.  */
865 #define BINDING_LEVEL(NODE) \
866    (((struct tree_binding*)NODE)->scope.level)
867
868 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
869    level at which this declaration is being bound.  */
870
871 static void
872 push_binding (id, decl, level)
873      tree id;
874      tree decl;
875      struct binding_level* level;
876 {
877   tree binding;
878
879   binding = make_node (CPLUS_BINDING);
880
881   /* Now, fill in the binding information.  */
882   BINDING_VALUE (binding) = decl;
883   BINDING_TYPE (binding) = NULL_TREE;
884   BINDING_LEVEL (binding) = level;
885   INHERITED_VALUE_BINDING_P (binding) = 0;
886   LOCAL_BINDING_P (binding) = (level != class_binding_level);
887   BINDING_HAS_LEVEL_P (binding) = 1;
888
889   /* And put it on the front of the list of bindings for ID.  */
890   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
891   IDENTIFIER_BINDING (id) = binding;
892 }
893
894 /* ID is already bound in the current scope.  But, DECL is an
895    additional binding for ID in the same scope.  This is the `struct
896    stat' hack whereby a non-typedef class-name or enum-name can be
897    bound at the same level as some other kind of entity.  It's the
898    responsibility of the caller to check that inserting this name is
899    legal here.  Returns nonzero if the new binding was successful.  */
900 static int
901 add_binding (id, decl)
902      tree id;
903      tree decl;
904 {
905   tree binding = IDENTIFIER_BINDING (id);
906   int ok = 1;
907
908   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
909     /* The new name is the type name.  */
910     BINDING_TYPE (binding) = decl;
911   else if (!BINDING_VALUE (binding))
912     /* This situation arises when push_class_level_binding moves an
913        inherited type-binding out of the way to make room for a new
914        value binding.  */
915     BINDING_VALUE (binding) = decl;
916   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
917            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
918     {
919       /* The old binding was a type name.  It was placed in
920          BINDING_VALUE because it was thought, at the point it was
921          declared, to be the only entity with such a name.  Move the
922          type name into the type slot; it is now hidden by the new
923          binding.  */
924       BINDING_TYPE (binding) = BINDING_VALUE (binding);
925       BINDING_VALUE (binding) = decl;
926       INHERITED_VALUE_BINDING_P (binding) = 0;
927     }
928   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
929            && TREE_CODE (decl) == TYPE_DECL
930            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
931            && same_type_p (TREE_TYPE (decl),
932                            TREE_TYPE (BINDING_VALUE (binding))))
933     /* We have two typedef-names, both naming the same type to have
934        the same name.  This is OK because of:
935
936          [dcl.typedef]
937
938          In a given scope, a typedef specifier can be used to redefine
939          the name of any type declared in that scope to refer to the
940          type to which it already refers.  */
941     ok = 0;
942   else
943     {
944       cp_error ("declaration of `%#D'", decl);
945       cp_error_at ("conflicts with previous declaration `%#D'",
946                    BINDING_VALUE (binding));
947       ok = 0;
948     }
949
950   return ok;
951 }
952
953 /* Add DECL to the list of things declared in B.  */
954
955 static void
956 add_decl_to_level (decl, b)
957      tree decl;
958      struct binding_level *b;
959 {
960   /* We build up the list in reverse order, and reverse it later if
961      necessary.  */
962   TREE_CHAIN (decl) = b->names;
963   b->names = decl;
964 }
965
966 /* Bind DECL to ID in the current_binding_level, assumed to be a local
967    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
968    doesn't really belong to this binding level, that it got here
969    through a using-declaration.  */
970
971 void
972 push_local_binding (id, decl, flags)
973      tree id;
974      tree decl;
975      int flags;
976 {
977   struct binding_level *b;
978
979   /* Skip over any local classes.  This makes sense if we call
980      push_local_binding with a friend decl of a local class.  */
981   b = current_binding_level;
982   while (b->parm_flag == 2)
983     b = b->level_chain;
984
985   if (lookup_name_current_level (id))
986     {
987       /* Supplement the existing binding.  */
988       if (!add_binding (id, decl))
989         /* It didn't work.  Something else must be bound at this
990            level.  Do not add DECL to the list of things to pop
991            later.  */
992         return;
993     }
994   else
995     /* Create a new binding.  */
996     push_binding (id, decl, b);
997
998   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
999     /* We must put the OVERLOAD into a TREE_LIST since the
1000        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1001        decls that got here through a using-declaration.  */
1002     decl = build_tree_list (NULL_TREE, decl);
1003
1004   /* And put DECL on the list of things declared by the current
1005      binding level.  */
1006   add_decl_to_level (decl, b);
1007 }
1008
1009 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1010    binding was successful.  */
1011
1012 int
1013 push_class_binding (id, decl)
1014      tree id;
1015      tree decl;
1016 {
1017   int result = 1;
1018   tree binding = IDENTIFIER_BINDING (id);
1019   tree context;
1020
1021   /* Note that we declared this value so that we can issue an error if
1022      this an illegal redeclaration of a name already used for some
1023      other purpose.  */
1024   note_name_declared_in_class (id, decl);
1025
1026   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1027     /* Supplement the existing binding.  */
1028     result = add_binding (id, decl);
1029   else
1030     /* Create a new binding.  */
1031     push_binding (id, decl, class_binding_level);
1032
1033   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1034      class-level declaration.  Note that we do not use DECL here
1035      because of the possibility of the `struct stat' hack; if DECL is
1036      a class-name or enum-name we might prefer a field-name, or some
1037      such.  */
1038   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1039
1040   /* If this is a binding from a base class, mark it as such.  */
1041   binding = IDENTIFIER_BINDING (id);
1042   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1043     {
1044       /* Any implicit typename must be from a base-class.  The
1045          context for an implicit typename declaration is always
1046          the derived class in which the lookup was done, so the checks
1047          based on the context of DECL below will not trigger.  */
1048       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1049         INHERITED_VALUE_BINDING_P (binding) = 1;
1050       else
1051         {
1052           if (TREE_CODE (decl) == OVERLOAD)
1053             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1054           else
1055             {
1056               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1057                                   0);
1058               context = DECL_REAL_CONTEXT (decl);
1059             }
1060
1061           if (is_properly_derived_from (current_class_type, context))
1062             INHERITED_VALUE_BINDING_P (binding) = 1;
1063           else
1064             INHERITED_VALUE_BINDING_P (binding) = 0;
1065         }
1066     }
1067   else if (BINDING_VALUE (binding) == decl)
1068     /* We only encounter a TREE_LIST when push_class_decls detects an
1069        ambiguity.  Such an ambiguity can be overridden by a definition
1070        in this class.  */
1071     INHERITED_VALUE_BINDING_P (binding) = 1;
1072
1073   return result;
1074 }
1075
1076 /* Remove the binding for DECL which should be the innermost binding
1077    for ID.  */
1078
1079 static void 
1080 pop_binding (id, decl) 
1081      tree id;
1082      tree decl;
1083 {
1084   tree binding;
1085     
1086   if (id == NULL_TREE)
1087     /* It's easiest to write the loops that call this function without
1088        checking whether or not the entities involved have names.  We
1089        get here for such an entity.  */
1090     return;
1091
1092   /* Get the innermost binding for ID.  */
1093   binding = IDENTIFIER_BINDING (id);
1094
1095   /* The name should be bound.  */
1096   my_friendly_assert (binding != NULL_TREE, 0);
1097
1098   /* The DECL will be either the ordinary binding or the type
1099      binding for this identifier.  Remove that binding.  */
1100   if (BINDING_VALUE (binding) == decl)
1101     BINDING_VALUE (binding) = NULL_TREE;
1102   else if (BINDING_TYPE (binding) == decl)
1103     BINDING_TYPE (binding) = NULL_TREE;
1104   else
1105     my_friendly_abort (0);
1106
1107   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1108     /* We're completely done with the innermost binding for this
1109        identifier.  Unhook it from the list of bindings.  */
1110     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1111 }
1112
1113 /* When a label goes out of scope, check to see if that label was used
1114    in a valid manner, and issue any appropriate warnings or errors.  */
1115
1116 static void
1117 pop_label (link)
1118      tree link;
1119 {
1120   tree label = TREE_VALUE (link);
1121
1122   if (!processing_template_decl && doing_semantic_analysis_p ())
1123     {
1124       if (DECL_INITIAL (label) == NULL_TREE)
1125         {
1126           cp_error_at ("label `%D' used but not defined", label);
1127           /* Avoid crashing later.  */
1128           define_label (input_filename, 1, DECL_NAME (label));
1129         }
1130       else if (warn_unused && !TREE_USED (label))
1131         cp_warning_at ("label `%D' defined but not used", label);
1132     }
1133
1134   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1135 }
1136
1137 /* At the end of a function, all labels declared within the fucntion
1138    go out of scope.  BLOCK is the top-level block for the 
1139    function.  */
1140
1141 static void
1142 pop_labels (block)
1143      tree block;
1144 {
1145   tree link;
1146
1147   /* Clear out the definitions of all label names, since their scopes
1148      end here.  */
1149   for (link = named_labels; link; link = TREE_CHAIN (link))
1150     {
1151       pop_label (link);
1152       /* Put the labels into the "variables" of the top-level block,
1153          so debugger can see them.  */
1154       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1155       BLOCK_VARS (block) = TREE_VALUE (link);
1156     }
1157
1158   named_labels = NULL_TREE;
1159 }
1160
1161 /* Exit a binding level.
1162    Pop the level off, and restore the state of the identifier-decl mappings
1163    that were in effect when this level was entered.
1164
1165    If KEEP == 1, this level had explicit declarations, so
1166    and create a "block" (a BLOCK node) for the level
1167    to record its declarations and subblocks for symbol table output.
1168
1169    If FUNCTIONBODY is nonzero, this level is the body of a function,
1170    so create a block as if KEEP were set and also clear out all
1171    label names.
1172
1173    If REVERSE is nonzero, reverse the order of decls before putting
1174    them into the BLOCK.  */
1175
1176 tree
1177 poplevel (keep, reverse, functionbody)
1178      int keep;
1179      int reverse;
1180      int functionbody;
1181 {
1182   register tree link;
1183   /* The chain of decls was accumulated in reverse order.
1184      Put it into forward order, just for cleanliness.  */
1185   tree decls;
1186   int tmp = functionbody;
1187   int real_functionbody;
1188   tree tags;
1189   tree subblocks;
1190   tree block = NULL_TREE;
1191   tree decl;
1192   int block_previously_created;
1193   int leaving_for_scope;
1194
1195   if (current_function && !doing_semantic_analysis_p ())
1196     return NULL_TREE;
1197
1198   my_friendly_assert (current_binding_level->parm_flag != 2,
1199                       19990916);
1200
1201   real_functionbody = (current_binding_level->keep == 2
1202                        ? ((functionbody = 0), tmp) : functionbody);
1203   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1204   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1205
1206   my_friendly_assert (!current_binding_level->class_shadowed,
1207                       19990414);
1208
1209   /* We used to use KEEP == 2 to indicate that the new block should go
1210      at the beginning of the list of blocks at this binding level,
1211      rather than the end.  This hack is no longer used.  */
1212   my_friendly_assert (keep == 0 || keep == 1, 0);
1213
1214   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1215                       (HOST_WIDE_INT) current_binding_level->level_chain,
1216                       current_binding_level->parm_flag,
1217                       current_binding_level->keep);
1218
1219   if (current_binding_level->keep == 1)
1220     keep = 1;
1221
1222   /* Get the decls in the order they were written.
1223      Usually current_binding_level->names is in reverse order.
1224      But parameter decls were previously put in forward order.  */
1225
1226   if (reverse)
1227     current_binding_level->names
1228       = decls = nreverse (current_binding_level->names);
1229   else
1230     decls = current_binding_level->names;
1231
1232   /* Output any nested inline functions within this block
1233      if they weren't already output.  */
1234
1235   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1236     if (TREE_CODE (decl) == FUNCTION_DECL
1237         && ! TREE_ASM_WRITTEN (decl)
1238         && DECL_INITIAL (decl) != NULL_TREE
1239         && TREE_ADDRESSABLE (decl)
1240         && decl_function_context (decl) == current_function_decl)
1241       {
1242         /* If this decl was copied from a file-scope decl
1243            on account of a block-scope extern decl,
1244            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1245         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1246           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1247         else
1248           {
1249             push_function_context ();
1250             output_inline_function (decl);
1251             pop_function_context ();
1252           }
1253       }
1254
1255   /* If there were any declarations or structure tags in that level,
1256      or if this level is a function body,
1257      create a BLOCK to record them for the life of this function.  */
1258
1259   block = NULL_TREE;
1260   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1261   if (block_previously_created)
1262     block = current_binding_level->this_block;
1263   else if (keep == 1 || functionbody)
1264     block = make_node (BLOCK);
1265   if (block != NULL_TREE)
1266     {
1267       if (block_previously_created)
1268         {
1269           if (decls || tags || subblocks)
1270             {
1271               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1272                 warning ("internal compiler error: debugging info corrupted");
1273
1274               BLOCK_VARS (block) = decls;
1275               BLOCK_TYPE_TAGS (block) = tags;
1276
1277               /* We can have previous subblocks and new subblocks when
1278                  doing fixup_gotos with complex cleanups.  We chain the new
1279                  subblocks onto the end of any pre-existing subblocks.  */
1280               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1281                                                  subblocks);
1282             }
1283           /* If we created the block earlier on, and we are just
1284              diddling it now, then it already should have a proper
1285              BLOCK_END_NOTE value associated with it.  */
1286         }
1287       else
1288         {
1289           BLOCK_VARS (block) = decls;
1290           BLOCK_TYPE_TAGS (block) = tags;
1291           BLOCK_SUBBLOCKS (block) = subblocks;
1292           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1293              value.  */ 
1294           remember_end_note (block);
1295         }
1296     }
1297
1298   /* In each subblock, record that this is its superior.  */
1299
1300   if (keep >= 0)
1301     for (link = subblocks; link; link = TREE_CHAIN (link))
1302       BLOCK_SUPERCONTEXT (link) = block;
1303
1304   /* We still support the old for-scope rules, whereby the variables
1305      in a for-init statement were in scope after the for-statement
1306      ended.  We only use the new rules in flag_new_for_scope is
1307      nonzero.  */
1308   leaving_for_scope 
1309     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1310
1311   /* Remove declarations for all the DECLs in this level.  */
1312   for (link = decls; link; link = TREE_CHAIN (link))
1313     {
1314       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1315         {
1316           tree outer_binding 
1317             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1318           tree ns_binding;
1319
1320           if (!outer_binding)
1321             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1322           else
1323             ns_binding = NULL_TREE;
1324
1325           if (outer_binding 
1326               && (BINDING_LEVEL (outer_binding) 
1327                   == current_binding_level->level_chain))
1328             /* We have something like:
1329                
1330                  int i;
1331                  for (int i; ;);
1332                  
1333                and we are leaving the `for' scope.  There's no reason to
1334                keep the binding of the inner `i' in this case.  */
1335             pop_binding (DECL_NAME (link), link);
1336           else if ((outer_binding 
1337                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1338                         == TYPE_DECL))
1339                    || (ns_binding 
1340                        && TREE_CODE (ns_binding) == TYPE_DECL))
1341             /* Here, we have something like:
1342
1343                  typedef int I;
1344
1345                  void f () {
1346                    for (int I; ;);
1347                  }
1348
1349                We must pop the for-scope binding so we know what's a
1350                type and what isn't.  */
1351             pop_binding (DECL_NAME (link), link);
1352           else
1353             {
1354               /* Mark this VAR_DECL as dead so that we can tell we left it
1355                  there only for backward compatibility.  */
1356               DECL_DEAD_FOR_LOCAL (link) = 1;
1357               
1358               /* Keep track of what should of have happenned when we
1359                  popped the binding.  */
1360               if (outer_binding && BINDING_VALUE (outer_binding))
1361                 DECL_SHADOWED_FOR_VAR (link) 
1362                   = BINDING_VALUE (outer_binding);
1363
1364               /* Add it to the list of dead variables in the next
1365                  outermost binding to that we can remove these when we
1366                  leave that binding.  */
1367               current_binding_level->level_chain->dead_vars_from_for
1368                 = tree_cons (NULL_TREE, link,
1369                              current_binding_level->level_chain->
1370                              dead_vars_from_for);
1371
1372               /* Although we don't pop the CPLUS_BINDING, we do clear
1373                  its BINDING_LEVEL since the level is going away now.  */
1374               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1375                 = 0;
1376             }
1377         }
1378       else 
1379         {
1380           /* Remove the binding.  */
1381           decl = link;
1382           if (TREE_CODE (decl) == TREE_LIST)
1383             decl = TREE_VALUE (decl);
1384           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1385             pop_binding (DECL_NAME (decl), decl);
1386           else if (TREE_CODE (decl) == OVERLOAD)
1387             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1388           else 
1389             my_friendly_abort (0);
1390         }
1391     }
1392
1393   /* Remove declarations for any `for' variables from inner scopes
1394      that we kept around.  */
1395   for (link = current_binding_level->dead_vars_from_for;
1396        link; link = TREE_CHAIN (link))
1397     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1398
1399   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1400   for (link = current_binding_level->type_shadowed;
1401        link; link = TREE_CHAIN (link))
1402     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1403
1404   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1405   for (link = current_binding_level->shadowed_labels;
1406        link; 
1407        link = TREE_CHAIN (link))
1408     pop_label (link);
1409
1410   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1411      list if a `using' declaration put them there.  The debugging
1412      back-ends won't understand OVERLOAD, so we remove them here.
1413      Because the BLOCK_VARS are (temporarily) shared with
1414      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1415      popped all the bindings.  */
1416   if (block)
1417     {
1418       tree* d;
1419
1420       for (d = &BLOCK_VARS (block); *d; )
1421         {
1422           if (TREE_CODE (*d) == TREE_LIST)
1423             *d = TREE_CHAIN (*d);
1424           else
1425             d = &TREE_CHAIN (*d);
1426         }
1427     }
1428
1429   /* If the level being exited is the top level of a function,
1430      check over all the labels.  */
1431   if (functionbody)
1432     {
1433       /* Since this is the top level block of a function, the vars are
1434          the function's parameters.  Don't leave them in the BLOCK
1435          because they are found in the FUNCTION_DECL instead.  */
1436       BLOCK_VARS (block) = 0;
1437       pop_labels (block);
1438     }
1439
1440   /* Any uses of undefined labels now operate under constraints
1441      of next binding contour.  */
1442   if (current_function)
1443     {
1444       struct binding_level *level_chain;
1445       level_chain = current_binding_level->level_chain;
1446       if (level_chain)
1447         {
1448           struct named_label_list *labels;
1449           for (labels = named_label_uses; labels; labels = labels->next)
1450             if (labels->binding_level == current_binding_level)
1451               {
1452                 labels->binding_level = level_chain;
1453                 labels->names_in_scope = level_chain->names;
1454               }
1455         }
1456     }
1457
1458   tmp = current_binding_level->keep;
1459
1460   pop_binding_level ();
1461   if (functionbody)
1462     DECL_INITIAL (current_function_decl) = block;
1463   else if (block)
1464     {
1465       if (!block_previously_created)
1466         current_binding_level->blocks
1467           = chainon (current_binding_level->blocks, block);
1468     }
1469   /* If we did not make a block for the level just exited,
1470      any blocks made for inner levels
1471      (since they cannot be recorded as subblocks in that level)
1472      must be carried forward so they will later become subblocks
1473      of something else.  */
1474   else if (subblocks)
1475     current_binding_level->blocks
1476       = chainon (current_binding_level->blocks, subblocks);
1477
1478   /* Take care of compiler's internal binding structures.  */
1479   if (tmp == 2)
1480     {
1481       expand_end_bindings (getdecls (), keep, 1);
1482       /* Each and every BLOCK node created here in `poplevel' is important
1483          (e.g. for proper debugging information) so if we created one
1484          earlier, mark it as "used".  */
1485       if (block)
1486         TREE_USED (block) = 1;
1487       block = poplevel (keep, reverse, real_functionbody);
1488     }
1489
1490   /* Each and every BLOCK node created here in `poplevel' is important
1491      (e.g. for proper debugging information) so if we created one
1492      earlier, mark it as "used".  */
1493   if (block)
1494     TREE_USED (block) = 1;
1495   return block;
1496 }
1497
1498 /* Delete the node BLOCK from the current binding level.
1499    This is used for the block inside a stmt expr ({...})
1500    so that the block can be reinserted where appropriate.  */
1501
1502 void
1503 delete_block (block)
1504      tree block;
1505 {
1506   tree t;
1507   if (current_binding_level->blocks == block)
1508     current_binding_level->blocks = TREE_CHAIN (block);
1509   for (t = current_binding_level->blocks; t;)
1510     {
1511       if (TREE_CHAIN (t) == block)
1512         TREE_CHAIN (t) = TREE_CHAIN (block);
1513       else
1514         t = TREE_CHAIN (t);
1515     }
1516   TREE_CHAIN (block) = NULL_TREE;
1517   /* Clear TREE_USED which is always set by poplevel.
1518      The flag is set again if insert_block is called.  */
1519   TREE_USED (block) = 0;
1520 }
1521
1522 /* Insert BLOCK at the end of the list of subblocks of the
1523    current binding level.  This is used when a BIND_EXPR is expanded,
1524    to handle the BLOCK node inside the BIND_EXPR.  */
1525
1526 void
1527 insert_block (block)
1528      tree block;
1529 {
1530   TREE_USED (block) = 1;
1531   current_binding_level->blocks
1532     = chainon (current_binding_level->blocks, block);
1533 }
1534
1535 /* Set the BLOCK node for the innermost scope
1536    (the one we are currently in).  */
1537
1538 void
1539 set_block (block)
1540     register tree block;
1541 {
1542   current_binding_level->this_block = block;
1543 }
1544
1545 /* Do a pushlevel for class declarations.  */
1546
1547 void
1548 pushlevel_class ()
1549 {
1550   register struct binding_level *newlevel;
1551
1552   /* Reuse or create a struct for this binding level.  */
1553 #if defined(DEBUG_CP_BINDING_LEVELS)
1554   if (0)
1555 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1556   if (free_binding_level)
1557 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1558     {
1559       newlevel = free_binding_level;
1560       free_binding_level = free_binding_level->level_chain;
1561     }
1562   else
1563     newlevel = make_binding_level ();
1564
1565 #if defined(DEBUG_CP_BINDING_LEVELS)
1566   is_class_level = 1;
1567 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1568
1569   push_binding_level (newlevel, 0, 0);
1570
1571   decl_stack = push_decl_level (decl_stack, &decl_obstack);
1572   class_binding_level = current_binding_level;
1573   class_binding_level->parm_flag = 2;
1574 }
1575
1576 /* ...and a poplevel for class declarations.  */
1577
1578 void
1579 poplevel_class ()
1580 {
1581   register struct binding_level *level = class_binding_level;
1582   tree shadowed;
1583
1584   my_friendly_assert (level != 0, 354);
1585   
1586   decl_stack = pop_stack_level (decl_stack);
1587   /* If we're leaving a toplevel class, don't bother to do the setting
1588      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1589      shouldn't even be used when current_class_type isn't set, and second,
1590      if we don't touch it here, we're able to use the cache effect if the
1591      next time we're entering a class scope, it is the same class.  */
1592   if (current_class_depth != 1)
1593     {
1594       struct binding_level* b;
1595
1596       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1597       for (shadowed = level->class_shadowed;
1598            shadowed;
1599            shadowed = TREE_CHAIN (shadowed))
1600         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1601         
1602       /* Find the next enclosing class, and recreate
1603          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1604       b = level->level_chain;
1605       while (b && b->parm_flag != 2)
1606         b = b->level_chain;
1607
1608       if (b)
1609         for (shadowed = b->class_shadowed; 
1610              shadowed; 
1611              shadowed = TREE_CHAIN (shadowed))
1612           {
1613             tree t;
1614
1615             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1616             while (t && BINDING_LEVEL (t) != b)
1617               t = TREE_CHAIN (t);
1618       
1619             if (t)
1620               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1621                 = BINDING_VALUE (t);
1622           }
1623     }
1624   else
1625     /* Remember to save what IDENTIFIER's were bound in this scope so we
1626        can recover from cache misses.  */
1627     {
1628       previous_class_type = current_class_type;
1629       previous_class_values = class_binding_level->class_shadowed;
1630     }
1631   for (shadowed = level->type_shadowed;
1632        shadowed;
1633        shadowed = TREE_CHAIN (shadowed))
1634     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1635
1636   /* Remove the bindings for all of the class-level declarations.  */
1637   for (shadowed = level->class_shadowed; 
1638        shadowed; 
1639        shadowed = TREE_CHAIN (shadowed))
1640     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1641
1642   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1643                       (HOST_WIDE_INT) class_binding_level->level_chain,
1644                       class_binding_level->parm_flag,
1645                       class_binding_level->keep);
1646
1647   /* Now, pop out of the binding level which we created up in the
1648      `pushlevel_class' routine.  */
1649 #if defined(DEBUG_CP_BINDING_LEVELS)
1650   is_class_level = 1;
1651 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1652
1653   pop_binding_level ();
1654 }
1655
1656 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1657    for any names in enclosing classes.  */
1658
1659 void
1660 clear_identifier_class_values ()
1661 {
1662   tree t;
1663
1664   if (!class_binding_level)
1665     return;
1666
1667   for (t = class_binding_level->class_shadowed;
1668        t;
1669        t = TREE_CHAIN (t))
1670     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1671 }
1672
1673 /* Returns non-zero if T is a virtual function table.  */
1674
1675 int
1676 vtable_decl_p (t, data)
1677      tree t;
1678      void *data ATTRIBUTE_UNUSED;
1679 {
1680   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1681 }
1682
1683 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1684    functions.  */
1685
1686 int
1687 vtype_decl_p (t, data)
1688      tree t;
1689      void *data ATTRIBUTE_UNUSED;
1690 {
1691   return (TREE_CODE (t) == TYPE_DECL
1692           && TREE_TYPE (t) != error_mark_node
1693           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1694           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1695 }
1696
1697 /* Return the declarations that are members of the namespace NS.  */
1698
1699 tree
1700 cp_namespace_decls (ns)
1701      tree ns;
1702 {
1703   return NAMESPACE_LEVEL (ns)->names;
1704 }
1705
1706 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1707    itself, calling F for each.  The DATA is passed to F as well.  */
1708
1709 static int
1710 walk_namespaces_r (namespace, f, data)
1711      tree namespace;
1712      walk_namespaces_fn f;
1713      void *data;
1714 {
1715   tree current;
1716   int result = 0;
1717
1718   result |= (*f) (namespace, data);
1719
1720   for (current = cp_namespace_decls (namespace);
1721        current;
1722        current = TREE_CHAIN (current))
1723     {
1724       if (TREE_CODE (current) != NAMESPACE_DECL
1725           || DECL_NAMESPACE_ALIAS (current))
1726         continue;
1727       if (!DECL_LANG_SPECIFIC (current))
1728         {
1729           /* Hmm. std. */
1730           my_friendly_assert (current == std_node, 393);
1731           continue;
1732         }
1733
1734       /* We found a namespace.  */
1735       result |= walk_namespaces_r (current, f, data);
1736     }
1737
1738   return result;
1739 }
1740
1741 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1742    F as well.  */
1743
1744 int
1745 walk_namespaces (f, data)
1746      walk_namespaces_fn f;
1747      void *data;
1748 {
1749   return walk_namespaces_r (global_namespace, f, data);
1750 }
1751
1752 struct walk_globals_data {
1753   walk_globals_pred p;
1754   walk_globals_fn f;
1755   void *data;
1756 };
1757
1758 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1759    for which P returns non-zero, call F with its address.  If any call
1760    to F returns a non-zero value, return a non-zero value.  */
1761
1762 static int 
1763 walk_globals_r (namespace, data)
1764      tree namespace;
1765      void *data;
1766 {
1767   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1768   walk_globals_pred p = wgd->p;
1769   walk_globals_fn f = wgd->f;
1770   void *d = wgd->data;
1771   tree *t;
1772   int result = 0;
1773
1774   t = &NAMESPACE_LEVEL (namespace)->names;
1775
1776   while (*t)
1777     {
1778       tree glbl = *t;
1779
1780       if ((*p) (glbl, d))
1781         result |= (*f) (t, d);
1782
1783       /* If F changed *T, then *T still points at the next item to
1784          examine.  */
1785       if (*t == glbl)
1786         t = &TREE_CHAIN (*t);
1787     }
1788
1789   return result;
1790 }
1791
1792 /* Walk the global declarations.  Whenever one is found for which P
1793    returns non-zero, call F with its address.  If any call to F
1794    returns a non-zero value, return a non-zero value.  */
1795
1796 int
1797 walk_globals (p, f, data)
1798      walk_globals_pred p;
1799      walk_globals_fn f;
1800      void *data;
1801 {
1802   struct walk_globals_data wgd;
1803   wgd.p = p;
1804   wgd.f = f;
1805   wgd.data = data;
1806
1807   return walk_namespaces (walk_globals_r, &wgd);
1808 }
1809
1810 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1811    DATA is non-NULL, this is the last time we will call
1812    wrapup_global_declarations for this NAMESPACE.  */
1813
1814 int
1815 wrapup_globals_for_namespace (namespace, data)
1816      tree namespace;
1817      void *data;
1818 {
1819   tree globals = cp_namespace_decls (namespace);
1820   int len = list_length (globals);
1821   tree *vec = (tree *) alloca (sizeof (tree) * len);
1822   int i;
1823   int result;
1824   tree decl;
1825   int last_time = (data != 0);
1826
1827   if (last_time && namespace == global_namespace)
1828     /* Let compile_file handle the global namespace.  */
1829     return 0;
1830
1831   /* Process the decls in reverse order--earliest first.
1832      Put them into VEC from back to front, then take out from front.  */
1833   
1834   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1835     vec[len - i - 1] = decl;
1836   
1837   if (last_time)
1838     {
1839       check_global_declarations (vec, len);
1840       return 0;
1841     }
1842
1843   /* Temporarily mark vtables as external.  That prevents
1844      wrapup_global_declarations from writing them out; we must process
1845      them ourselves in finish_vtable_vardecl.  */
1846   for (i = 0; i < len; ++i)
1847     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1848       {
1849         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1850         DECL_EXTERNAL (vec[i]) = 1;
1851       }
1852
1853   /* Write out any globals that need to be output.  */
1854   result = wrapup_global_declarations (vec, len);
1855
1856   /* Undo the hack to DECL_EXTERNAL above.  */
1857   for (i = 0; i < len; ++i)
1858     if (vtable_decl_p (vec[i], /*data=*/0)
1859         && DECL_NOT_REALLY_EXTERN (vec[i]))
1860       {
1861         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1862         DECL_EXTERNAL (vec[i]) = 0;
1863       }
1864
1865   return result;
1866 }
1867
1868 \f
1869 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1870
1871 static void
1872 mark_binding_level (arg)
1873      void *arg;
1874 {
1875   struct binding_level *lvl = *(struct binding_level **)arg;
1876
1877   while (lvl)
1878     {
1879       ggc_mark_tree (lvl->names);
1880       ggc_mark_tree (lvl->tags);
1881       ggc_mark_tree (lvl->usings);
1882       ggc_mark_tree (lvl->using_directives);
1883       ggc_mark_tree (lvl->class_shadowed);
1884       ggc_mark_tree (lvl->type_shadowed);
1885       ggc_mark_tree (lvl->shadowed_labels);
1886       ggc_mark_tree (lvl->blocks);
1887       ggc_mark_tree (lvl->this_block);
1888       ggc_mark_tree (lvl->incomplete);
1889       ggc_mark_tree (lvl->dead_vars_from_for);
1890
1891       lvl = lvl->level_chain;
1892     }
1893 }
1894 \f
1895 /* For debugging.  */
1896 static int no_print_functions = 0;
1897 static int no_print_builtins = 0;
1898
1899 void
1900 print_binding_level (lvl)
1901      struct binding_level *lvl;
1902 {
1903   tree t;
1904   int i = 0, len;
1905   fprintf (stderr, " blocks=");
1906   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1907   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1908            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1909   if (lvl->tag_transparent)
1910     fprintf (stderr, " tag-transparent");
1911   if (lvl->more_cleanups_ok)
1912     fprintf (stderr, " more-cleanups-ok");
1913   if (lvl->have_cleanups)
1914     fprintf (stderr, " have-cleanups");
1915   fprintf (stderr, "\n");
1916   if (lvl->names)
1917     {
1918       fprintf (stderr, " names:\t");
1919       /* We can probably fit 3 names to a line?  */
1920       for (t = lvl->names; t; t = TREE_CHAIN (t))
1921         {
1922           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1923             continue;
1924           if (no_print_builtins
1925               && (TREE_CODE (t) == TYPE_DECL)
1926               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1927             continue;
1928
1929           /* Function decls tend to have longer names.  */
1930           if (TREE_CODE (t) == FUNCTION_DECL)
1931             len = 3;
1932           else
1933             len = 2;
1934           i += len;
1935           if (i > 6)
1936             {
1937               fprintf (stderr, "\n\t");
1938               i = len;
1939             }
1940           print_node_brief (stderr, "", t, 0);
1941           if (t == error_mark_node)
1942             break;
1943         }
1944       if (i)
1945         fprintf (stderr, "\n");
1946     }
1947   if (lvl->tags)
1948     {
1949       fprintf (stderr, " tags:\t");
1950       i = 0;
1951       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1952         {
1953           if (TREE_PURPOSE (t) == NULL_TREE)
1954             len = 3;
1955           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1956             len = 2;
1957           else
1958             len = 4;
1959           i += len;
1960           if (i > 5)
1961             {
1962               fprintf (stderr, "\n\t");
1963               i = len;
1964             }
1965           if (TREE_PURPOSE (t) == NULL_TREE)
1966             {
1967               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1968               fprintf (stderr, ">");
1969             }
1970           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1971             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1972           else
1973             {
1974               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1975               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1976               fprintf (stderr, ">");
1977             }
1978         }
1979       if (i)
1980         fprintf (stderr, "\n");
1981     }
1982   if (lvl->class_shadowed)
1983     {
1984       fprintf (stderr, " class-shadowed:");
1985       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1986         {
1987           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1988         }
1989       fprintf (stderr, "\n");
1990     }
1991   if (lvl->type_shadowed)
1992     {
1993       fprintf (stderr, " type-shadowed:");
1994       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1995         {
1996           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1997         }
1998       fprintf (stderr, "\n");
1999     }
2000 }
2001
2002 void
2003 print_other_binding_stack (stack)
2004      struct binding_level *stack;
2005 {
2006   struct binding_level *level;
2007   for (level = stack; level != global_binding_level; level = level->level_chain)
2008     {
2009       fprintf (stderr, "binding level ");
2010       fprintf (stderr, HOST_PTR_PRINTF, level);
2011       fprintf (stderr, "\n");
2012       print_binding_level (level);
2013     }
2014 }
2015
2016 void
2017 print_binding_stack ()
2018 {
2019   struct binding_level *b;
2020   fprintf (stderr, "current_binding_level=");
2021   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2022   fprintf (stderr, "\nclass_binding_level=");
2023   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2024   fprintf (stderr, "\nglobal_binding_level=");
2025   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2026   fprintf (stderr, "\n");
2027   if (class_binding_level)
2028     {
2029       for (b = class_binding_level; b; b = b->level_chain)
2030         if (b == current_binding_level)
2031           break;
2032       if (b)
2033         b = class_binding_level;
2034       else
2035         b = current_binding_level;
2036     }
2037   else
2038     b = current_binding_level;
2039   print_other_binding_stack (b);
2040   fprintf (stderr, "global:\n");
2041   print_binding_level (global_binding_level);
2042 }
2043
2044 /* Namespace binding access routines: The namespace_bindings field of
2045    the identifier is polymorphic, with three possible values:
2046    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2047    indicating the BINDING_VALUE of global_namespace. */
2048
2049 /* Check whether the a binding for the name to scope is known.
2050    Assumes that the bindings of the name are already a list
2051    of bindings. Returns the binding found, or NULL_TREE. */
2052
2053 static tree
2054 find_binding (name, scope)
2055      tree name;
2056      tree scope;
2057 {
2058   tree iter, prev = NULL_TREE;
2059
2060   scope = ORIGINAL_NAMESPACE (scope);
2061   
2062   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2063        iter = TREE_CHAIN (iter))
2064     {
2065       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2066       if (BINDING_SCOPE (iter) == scope)
2067         {
2068           /* Move binding found to the front of the list, so
2069              subsequent lookups will find it faster. */
2070           if (prev)
2071             {
2072               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2073               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2074               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2075             }
2076           return iter;
2077         }
2078       prev = iter;
2079     }
2080   return NULL_TREE;
2081 }
2082
2083 /* Always returns a binding for name in scope. If the
2084    namespace_bindings is not a list, convert it to one first.
2085    If no binding is found, make a new one. */
2086
2087 tree
2088 binding_for_name (name, scope)
2089      tree name;
2090      tree scope;
2091 {
2092   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2093   tree result;
2094
2095   scope = ORIGINAL_NAMESPACE (scope);
2096   
2097   if (b && TREE_CODE (b) != CPLUS_BINDING)
2098     {
2099       /* Get rid of optimization for global scope. */
2100       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2101       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2102       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2103     }
2104   if (b && (result = find_binding (name, scope)))
2105     return result;
2106   /* Not found, make a new permanent one. */
2107   push_obstacks (&permanent_obstack, &permanent_obstack);
2108   result = make_node (CPLUS_BINDING);
2109   TREE_CHAIN (result) = b;
2110   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2111   BINDING_SCOPE (result) = scope;
2112   BINDING_TYPE (result) = NULL_TREE;
2113   BINDING_VALUE (result) = NULL_TREE;
2114   pop_obstacks ();
2115   return result;
2116 }
2117
2118 /* Return the binding value for name in scope, considering that
2119    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2120
2121 tree
2122 namespace_binding (name, scope)
2123      tree name;
2124      tree scope;
2125 {
2126   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2127   if (b == NULL_TREE)
2128     return NULL_TREE;
2129   if (scope == NULL_TREE)
2130     scope = global_namespace;
2131   if (TREE_CODE (b) != CPLUS_BINDING)
2132     return (scope == global_namespace) ? b : NULL_TREE;
2133   name = find_binding (name,scope);
2134   if (name == NULL_TREE)
2135     return name;
2136   return BINDING_VALUE (name);
2137 }
2138
2139 /* Set the binding value for name in scope. If modifying the binding
2140    of global_namespace is attempted, try to optimize it. */
2141
2142 void
2143 set_namespace_binding (name, scope, val)
2144      tree name;
2145      tree scope;
2146      tree val;
2147 {
2148   tree b;
2149
2150   if (scope == NULL_TREE)
2151     scope = global_namespace;
2152   
2153   if (scope == global_namespace)
2154     {
2155       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2156       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2157         {
2158           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2159           return;
2160         }
2161     }
2162   b = binding_for_name (name, scope);
2163   BINDING_VALUE (b) = val;
2164 }
2165
2166 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2167    select a name that is unique to this compilation unit.  */
2168
2169 void
2170 push_namespace (name)
2171      tree name;
2172 {
2173   tree d = NULL_TREE;
2174   int need_new = 1;
2175   int implicit_use = 0;
2176   int global = 0;
2177   if (!global_namespace)
2178     {
2179       /* This must be ::. */
2180       my_friendly_assert (name == get_identifier ("::"), 377);
2181       global = 1;
2182     }
2183   else if (!name)
2184     {
2185       /* The name of anonymous namespace is unique for the translation
2186          unit.  */
2187       if (!anonymous_namespace_name)
2188         anonymous_namespace_name = get_file_function_name ('N');
2189       name = anonymous_namespace_name;
2190       d = IDENTIFIER_NAMESPACE_VALUE (name);
2191       if (d)
2192         /* Reopening anonymous namespace.  */
2193         need_new = 0;
2194       implicit_use = 1;
2195     }
2196   else if (current_namespace == global_namespace
2197            && name == DECL_NAME (std_node))
2198     {
2199       in_std++;
2200       return;
2201     }
2202   else
2203     {
2204       /* Check whether this is an extended namespace definition. */
2205       d = IDENTIFIER_NAMESPACE_VALUE (name);
2206       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2207         {
2208           need_new = 0;
2209           if (DECL_NAMESPACE_ALIAS (d))
2210             {
2211               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2212                         d, DECL_NAMESPACE_ALIAS (d));
2213               d = DECL_NAMESPACE_ALIAS (d);
2214             }
2215         }
2216     }
2217   
2218   if (need_new)
2219     {
2220       /* Make a new namespace, binding the name to it. */
2221       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2222       /* The global namespace is not pushed, and the global binding
2223          level is set elsewhere.  */
2224       if (!global)
2225         {
2226           d = pushdecl (d);
2227           pushlevel (0);
2228           declare_namespace_level ();
2229           NAMESPACE_LEVEL (d) = current_binding_level;
2230         }
2231     }
2232   else
2233     resume_binding_level (NAMESPACE_LEVEL (d));
2234
2235   if (implicit_use)
2236     do_using_directive (d);
2237   /* Enter the name space. */
2238   current_namespace = d;
2239 }
2240
2241 /* Pop from the scope of the current namespace.  */
2242
2243 void
2244 pop_namespace ()
2245 {
2246   if (current_namespace == global_namespace)
2247     {
2248       my_friendly_assert (in_std>0, 980421);
2249       in_std--;
2250       return;
2251     }
2252   current_namespace = CP_DECL_CONTEXT (current_namespace);
2253   /* The binding level is not popped, as it might be re-opened later.  */
2254   suspend_binding_level ();
2255 }
2256
2257 /* Push into the scope of the namespace NS, even if it is deeply
2258    nested within another namespace.  */
2259
2260 void
2261 push_nested_namespace (ns)
2262      tree ns;
2263 {
2264   if (ns == global_namespace)
2265     push_to_top_level ();
2266   else
2267     {
2268       push_nested_namespace (CP_DECL_CONTEXT (ns));
2269       push_namespace (DECL_NAME (ns));
2270     }
2271 }
2272
2273 /* Pop back from the scope of the namespace NS, which was previously
2274    entered with push_nested_namespace.  */
2275      
2276 void
2277 pop_nested_namespace (ns)
2278      tree ns;
2279 {
2280   while (ns != global_namespace)
2281     {
2282       pop_namespace ();
2283       ns = CP_DECL_CONTEXT (ns);
2284     }
2285
2286   pop_from_top_level ();
2287 }
2288
2289 \f
2290 /* Subroutines for reverting temporarily to top-level for instantiation
2291    of templates and such.  We actually need to clear out the class- and
2292    local-value slots of all identifiers, so that only the global values
2293    are at all visible.  Simply setting current_binding_level to the global
2294    scope isn't enough, because more binding levels may be pushed.  */
2295 struct saved_scope *scope_chain;
2296
2297 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2298
2299 static void
2300 mark_saved_scope (arg)
2301      void *arg;
2302 {
2303   struct saved_scope *t = *(struct saved_scope **)arg;
2304   while (t)
2305     {
2306       mark_binding_level (&t->class_bindings);
2307       ggc_mark_tree (t->old_bindings);
2308       ggc_mark_tree (t->old_namespace);
2309       ggc_mark_tree (t->class_name);
2310       ggc_mark_tree (t->class_type);
2311       ggc_mark_tree (t->access_specifier);
2312       ggc_mark_tree (t->function_decl);
2313       if (t->lang_base)
2314         ggc_mark_tree_varray (t->lang_base);
2315       ggc_mark_tree (t->lang_name);
2316       ggc_mark_tree (t->x_function_parms);
2317       ggc_mark_tree (t->template_parms);
2318       ggc_mark_tree (t->x_previous_class_type);
2319       ggc_mark_tree (t->x_previous_class_values);
2320       mark_binding_level (&t->bindings);
2321       t = t->prev;
2322     }
2323 }
2324
2325 static tree
2326 store_bindings (names, old_bindings)
2327      tree names, old_bindings;
2328 {
2329   tree t;
2330   for (t = names; t; t = TREE_CHAIN (t))
2331     {
2332       tree binding, t1, id;
2333
2334       if (TREE_CODE (t) == TREE_LIST)
2335         id = TREE_PURPOSE (t);
2336       else
2337         id = DECL_NAME (t);
2338
2339       if (!id 
2340           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2341              we have no IDENTIFIER_BINDING if we have left the class
2342              scope, but cached the class-level declarations.  */
2343           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2344         continue;
2345
2346       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2347         if (TREE_VEC_ELT (t1, 0) == id)
2348           goto skip_it;
2349
2350       binding = make_tree_vec (4);
2351
2352       if (id)
2353         {
2354           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2355           TREE_VEC_ELT (binding, 0) = id;
2356           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2357           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2358           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2359           IDENTIFIER_BINDING (id) = NULL_TREE;
2360           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2361         }
2362       TREE_CHAIN (binding) = old_bindings;
2363       old_bindings = binding;
2364     skip_it:
2365       ;
2366     }
2367   return old_bindings;
2368 }
2369
2370 void
2371 maybe_push_to_top_level (pseudo)
2372      int pseudo;
2373 {
2374   struct saved_scope *s;
2375   struct binding_level *b;
2376   tree old_bindings;
2377   int need_pop;
2378
2379   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2380
2381   b = scope_chain ? current_binding_level : 0;
2382
2383   /* If we're in the middle of some function, save our state.  */
2384   if (current_function)
2385     {
2386       need_pop = 1;
2387       push_function_context_to (NULL_TREE);
2388     }
2389   else
2390     need_pop = 0;
2391
2392   old_bindings = NULL_TREE;
2393   if (scope_chain && previous_class_type)
2394     old_bindings = store_bindings (previous_class_values, old_bindings);
2395
2396   /* Have to include global_binding_level, because class-level decls
2397      aren't listed anywhere useful.  */
2398   for (; b; b = b->level_chain)
2399     {
2400       tree t;
2401
2402       /* Template IDs are inserted into the global level. If they were
2403          inserted into namespace level, finish_file wouldn't find them
2404          when doing pending instantiations. Therefore, don't stop at
2405          namespace level, but continue until :: .  */
2406       if (b == global_binding_level || (pseudo && b->pseudo_global))
2407         break;
2408
2409       old_bindings = store_bindings (b->names, old_bindings);
2410       /* We also need to check class_shadowed to save class-level type
2411          bindings, since pushclass doesn't fill in b->names.  */
2412       if (b->parm_flag == 2)
2413         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2414
2415       /* Unwind type-value slots back to top level.  */
2416       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2417         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2418     }
2419   s->prev = scope_chain;
2420   s->old_bindings = old_bindings;
2421   s->bindings = b;
2422   s->need_pop_function_context = need_pop;
2423   s->function_decl = current_function_decl;
2424
2425   scope_chain = s;
2426   current_function_decl = NULL_TREE;
2427   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2428   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2429   current_lang_name = lang_name_cplusplus;
2430   strict_prototype = strict_prototypes_lang_cplusplus;
2431   current_namespace = global_namespace;
2432
2433   push_obstacks (&permanent_obstack, &permanent_obstack);
2434 }
2435
2436 void
2437 push_to_top_level ()
2438 {
2439   maybe_push_to_top_level (0);
2440 }
2441
2442 void
2443 pop_from_top_level ()
2444 {
2445   struct saved_scope *s = scope_chain;
2446   tree t;
2447
2448   /* Clear out class-level bindings cache.  */
2449   if (previous_class_type)
2450     invalidate_class_lookup_cache ();
2451
2452   pop_obstacks ();
2453
2454   VARRAY_FREE (current_lang_base);
2455
2456   scope_chain = s->prev;
2457   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2458     {
2459       tree id = TREE_VEC_ELT (t, 0);
2460       if (id)
2461         {
2462           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2463           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2464           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2465         }
2466     }
2467
2468   if (current_lang_name == lang_name_cplusplus)
2469     strict_prototype = strict_prototypes_lang_cplusplus;
2470   else if (current_lang_name == lang_name_c)
2471     strict_prototype = strict_prototypes_lang_c;
2472
2473   /* If we were in the middle of compiling a function, restore our
2474      state.  */
2475   if (s->need_pop_function_context)
2476     pop_function_context_from (NULL_TREE);
2477   current_function_decl = s->function_decl;
2478
2479   free (s);
2480 }
2481 \f
2482 /* Push a definition of struct, union or enum tag "name".
2483    into binding_level "b".   "type" should be the type node, 
2484    We assume that the tag "name" is not already defined.
2485
2486    Note that the definition may really be just a forward reference.
2487    In that case, the TYPE_SIZE will be a NULL_TREE.
2488
2489    C++ gratuitously puts all these tags in the name space.  */
2490
2491 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2492    record the shadowed value for this binding contour.  TYPE is
2493    the type that ID maps to.  */
2494
2495 static void
2496 set_identifier_type_value_with_scope (id, type, b)
2497      tree id;
2498      tree type;
2499      struct binding_level *b;
2500 {
2501   if (!b->namespace_p)
2502     {
2503       /* Shadow the marker, not the real thing, so that the marker
2504          gets restored later. */
2505       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2506       b->type_shadowed
2507         = tree_cons (id, old_type_value, b->type_shadowed);
2508     }
2509   else
2510     {
2511       tree binding = binding_for_name (id, current_namespace);
2512       BINDING_TYPE (binding) = type;
2513       /* Store marker instead of real type. */
2514       type = global_type_node;
2515     }
2516   SET_IDENTIFIER_TYPE_VALUE (id, type);
2517 }
2518
2519 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2520
2521 void
2522 set_identifier_type_value (id, type)
2523      tree id;
2524      tree type;
2525 {
2526   set_identifier_type_value_with_scope (id, type, current_binding_level);
2527 }
2528
2529 /* Return the type associated with id. */
2530
2531 tree
2532 identifier_type_value (id)
2533      tree id;
2534 {
2535   /* There is no type with that name, anywhere. */
2536   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2537     return NULL_TREE;
2538   /* This is not the type marker, but the real thing. */
2539   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2540     return REAL_IDENTIFIER_TYPE_VALUE (id);
2541   /* Have to search for it. It must be on the global level, now.
2542      Ask lookup_name not to return non-types. */
2543   id = lookup_name_real (id, 2, 1, 0);
2544   if (id)
2545     return TREE_TYPE (id);
2546   return NULL_TREE;
2547 }
2548
2549 /* Pop off extraneous binding levels left over due to syntax errors.
2550
2551    We don't pop past namespaces, as they might be valid.  */
2552
2553 void
2554 pop_everything ()
2555 {
2556 #ifdef DEBUG_CP_BINDING_LEVELS
2557   fprintf (stderr, "XXX entering pop_everything ()\n");
2558 #endif
2559   while (!toplevel_bindings_p ())
2560     {
2561       if (current_binding_level->parm_flag == 2)
2562         pop_nested_class ();
2563       else
2564         poplevel (0, 0, 0);
2565     }
2566 #ifdef DEBUG_CP_BINDING_LEVELS
2567   fprintf (stderr, "XXX leaving pop_everything ()\n");
2568 #endif
2569 }
2570
2571 /* The type TYPE is being declared.  If it is a class template, or a
2572    specialization of a class template, do any processing required and
2573    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2574    being declared a friend.  B is the binding level at which this TYPE
2575    should be bound.
2576
2577    Returns the TYPE_DECL for TYPE, which may have been altered by this
2578    processing.  */
2579
2580 static tree 
2581 maybe_process_template_type_declaration (type, globalize, b)
2582      tree type;
2583      int globalize;
2584      struct binding_level* b;
2585 {
2586   tree decl = TYPE_NAME (type);
2587  
2588   if (processing_template_parmlist)
2589     /* You can't declare a new template type in a template parameter
2590        list.  But, you can declare a non-template type:
2591        
2592          template <class A*> struct S;
2593        
2594        is a forward-declaration of `A'.  */
2595     ;
2596   else 
2597     {
2598       maybe_check_template_type (type);
2599
2600       my_friendly_assert (IS_AGGR_TYPE (type) 
2601                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2602                           
2603                           
2604       if (processing_template_decl)
2605         {
2606           /* This may change after the call to
2607              push_template_decl_real, but we want the original value.  */
2608           tree name = DECL_NAME (decl);
2609
2610           decl = push_template_decl_real (decl, globalize);
2611           /* If the current binding level is the binding level for the
2612              template parameters (see the comment in
2613              begin_template_parm_list) and the enclosing level is a class
2614              scope, and we're not looking at a friend, push the
2615              declaration of the member class into the class scope.  In the
2616              friend case, push_template_decl will already have put the
2617              friend into global scope, if appropriate.  */
2618           if (TREE_CODE (type) != ENUMERAL_TYPE
2619               && !globalize && b->pseudo_global
2620               && b->level_chain->parm_flag == 2)
2621             {
2622               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2623               /* Put this tag on the list of tags for the class, since
2624                  that won't happen below because B is not the class
2625                  binding level, but is instead the pseudo-global level.  */
2626               b->level_chain->tags = 
2627                 tree_cons (name, type, b->level_chain->tags);
2628               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2629                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2630             }
2631         }
2632     }
2633
2634   return decl;
2635 }
2636
2637 /* In C++, you don't have to write `struct S' to refer to `S'; you
2638    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2639    if the user had written `typedef struct S S'.  Create and return
2640    the TYPE_DECL for TYPE.  */
2641
2642 tree
2643 create_implicit_typedef (name, type)
2644      tree name;
2645      tree type;
2646 {
2647   tree decl;
2648
2649   decl = build_decl (TYPE_DECL, name, type);
2650   SET_DECL_ARTIFICIAL (decl);
2651   /* There are other implicit type declarations, like the one *within*
2652      a class that allows you to write `S::S'.  We must distinguish
2653      amongst these.  */
2654   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2655   TYPE_NAME (type) = decl;
2656
2657   return decl;
2658 }
2659
2660 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2661    Normally put it into the inner-most non-tag-transparent scope,
2662    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2663    The latter is needed for implicit declarations.  */
2664
2665 void
2666 pushtag (name, type, globalize)
2667      tree name, type;
2668      int globalize;
2669 {
2670   register struct binding_level *b;
2671
2672   b = current_binding_level;
2673   while (b->tag_transparent
2674          || (globalize && b->parm_flag == 2))
2675     b = b->level_chain;
2676
2677   b->tags = tree_cons (name, type, b->tags);
2678
2679   if (name)
2680     {
2681       /* Do C++ gratuitous typedefing.  */
2682       if (IDENTIFIER_TYPE_VALUE (name) != type)
2683         {
2684           register tree d = NULL_TREE;
2685           int in_class = 0;
2686           tree context = TYPE_CONTEXT (type);
2687
2688           if (! context)
2689             {
2690               tree cs = current_scope ();
2691
2692               if (! globalize)
2693                 context = cs;
2694               else if (cs != NULL_TREE 
2695                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2696                 /* When declaring a friend class of a local class, we want
2697                    to inject the newly named class into the scope
2698                    containing the local class, not the namespace scope.  */
2699                 context = hack_decl_function_context (get_type_decl (cs));
2700             }
2701           if (!context)
2702             context = current_namespace;
2703
2704           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2705               || b->parm_flag == 2)
2706             in_class = 1;
2707
2708           if (current_lang_name == lang_name_java)
2709             TYPE_FOR_JAVA (type) = 1;
2710
2711           d = create_implicit_typedef (name, type);
2712           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2713           if (! in_class)
2714             set_identifier_type_value_with_scope (name, type, b);
2715
2716           d = maybe_process_template_type_declaration (type,
2717                                                        globalize, b);
2718
2719           if (b->parm_flag == 2)
2720             {
2721               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2722                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2723                    class.  But if it's a member template class, we
2724                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2725                    is done later.  */
2726                 finish_member_declaration (d);
2727               else
2728                 pushdecl_class_level (d);
2729             }
2730           else
2731             d = pushdecl_with_scope (d, b);
2732
2733           if (ANON_AGGRNAME_P (name))
2734             DECL_IGNORED_P (d) = 1;
2735
2736           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2737           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2738           if (!uses_template_parms (type))
2739             DECL_ASSEMBLER_NAME (d)
2740               = get_identifier (build_overload_name (type, 1, 1));
2741         }
2742       if (b->parm_flag == 2)
2743         {
2744           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2745             CLASSTYPE_TAGS (current_class_type) = b->tags;
2746         }
2747     }
2748
2749   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2750     /* Use the canonical TYPE_DECL for this node.  */
2751     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2752   else
2753     {
2754       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2755          will be the tagged type we just added to the current
2756          binding level.  This fake NULL-named TYPE_DECL node helps
2757          dwarfout.c to know when it needs to output a
2758          representation of a tagged type, and it also gives us a
2759          convenient place to record the "scope start" address for
2760          the tagged type.  */
2761
2762       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2763       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2764     }
2765 }
2766
2767 /* Counter used to create anonymous type names.  */
2768
2769 static int anon_cnt = 0;
2770
2771 /* Return an IDENTIFIER which can be used as a name for
2772    anonymous structs and unions.  */
2773
2774 tree
2775 make_anon_name ()
2776 {
2777   char buf[32];
2778
2779   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2780   return get_identifier (buf);
2781 }
2782
2783 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2784    This keeps dbxout from getting confused.  */
2785
2786 void
2787 clear_anon_tags ()
2788 {
2789   register struct binding_level *b;
2790   register tree tags;
2791   static int last_cnt = 0;
2792
2793   /* Fast out if no new anon names were declared.  */
2794   if (last_cnt == anon_cnt)
2795     return;
2796
2797   b = current_binding_level;
2798   while (b->tag_transparent)
2799     b = b->level_chain;
2800   tags = b->tags;
2801   while (tags)
2802     {
2803       /* A NULL purpose means we have already processed all tags
2804          from here to the end of the list.  */
2805       if (TREE_PURPOSE (tags) == NULL_TREE)
2806         break;
2807       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2808         TREE_PURPOSE (tags) = NULL_TREE;
2809       tags = TREE_CHAIN (tags);
2810     }
2811   last_cnt = anon_cnt;
2812 }
2813 \f
2814 /* Subroutine of duplicate_decls: return truthvalue of whether
2815    or not types of these decls match.
2816
2817    For C++, we must compare the parameter list so that `int' can match
2818    `int&' in a parameter position, but `int&' is not confused with
2819    `const int&'.  */
2820
2821 int
2822 decls_match (newdecl, olddecl)
2823      tree newdecl, olddecl;
2824 {
2825   int types_match;
2826
2827   if (newdecl == olddecl)
2828     return 1;
2829
2830   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2831     /* If the two DECLs are not even the same kind of thing, we're not
2832        interested in their types.  */
2833     return 0;
2834
2835   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2836     {
2837       tree f1 = TREE_TYPE (newdecl);
2838       tree f2 = TREE_TYPE (olddecl);
2839       tree p1 = TYPE_ARG_TYPES (f1);
2840       tree p2 = TYPE_ARG_TYPES (f2);
2841
2842       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2843           && ! (DECL_LANGUAGE (newdecl) == lang_c
2844                 && DECL_LANGUAGE (olddecl) == lang_c))
2845         return 0;
2846
2847       /* When we parse a static member function definition,
2848          we put together a FUNCTION_DECL which thinks its type
2849          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2850          proceed.  */
2851       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2852         revert_static_member_fn (&newdecl, &f1, &p1);
2853       else if (TREE_CODE (f2) == METHOD_TYPE
2854                && DECL_STATIC_FUNCTION_P (newdecl))
2855         revert_static_member_fn (&olddecl, &f2, &p2);
2856
2857       /* Here we must take care of the case where new default
2858          parameters are specified.  Also, warn if an old
2859          declaration becomes ambiguous because default
2860          parameters may cause the two to be ambiguous.  */
2861       if (TREE_CODE (f1) != TREE_CODE (f2))
2862         {
2863           if (TREE_CODE (f1) == OFFSET_TYPE)
2864             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2865           else
2866             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2867           return 0;
2868         }
2869
2870       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2871         {
2872           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2873               && p2 == NULL_TREE)
2874             {
2875               types_match = self_promoting_args_p (p1);
2876               if (p1 == void_list_node)
2877                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2878             }
2879           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2880                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2881             {
2882               types_match = self_promoting_args_p (p2);
2883               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2884             }
2885           else
2886             types_match = compparms (p1, p2);
2887         }
2888       else
2889         types_match = 0;
2890     }
2891   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2892     {
2893       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2894                                 DECL_TEMPLATE_PARMS (olddecl)))
2895         return 0;
2896       
2897       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2898         types_match = 1;
2899       else
2900         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2901                                    DECL_TEMPLATE_RESULT (newdecl));
2902     }
2903   else
2904     {
2905       if (TREE_TYPE (newdecl) == error_mark_node)
2906         types_match = TREE_TYPE (olddecl) == error_mark_node;
2907       else if (TREE_TYPE (olddecl) == NULL_TREE)
2908         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2909       else if (TREE_TYPE (newdecl) == NULL_TREE)
2910         types_match = 0;
2911       else
2912         types_match = comptypes (TREE_TYPE (newdecl),
2913                                  TREE_TYPE (olddecl),
2914                                  COMPARE_REDECLARATION);
2915     }
2916
2917   return types_match;
2918 }
2919
2920 /* If NEWDECL is `static' and an `extern' was seen previously,
2921    warn about it.  OLDDECL is the previous declaration.
2922
2923    Note that this does not apply to the C++ case of declaring
2924    a variable `extern const' and then later `const'.
2925
2926    Don't complain about built-in functions, since they are beyond
2927    the user's control.  */
2928
2929 static void
2930 warn_extern_redeclared_static (newdecl, olddecl)
2931      tree newdecl, olddecl;
2932 {
2933   static const char *explicit_extern_static_warning
2934     = "`%D' was declared `extern' and later `static'";
2935   static const char *implicit_extern_static_warning
2936     = "`%D' was declared implicitly `extern' and later `static'";
2937
2938   tree name;
2939
2940   if (TREE_CODE (newdecl) == TYPE_DECL)
2941     return;
2942   
2943   /* Don't get confused by static member functions; that's a different
2944      use of `static'.  */
2945   if (TREE_CODE (newdecl) == FUNCTION_DECL
2946       && DECL_STATIC_FUNCTION_P (newdecl))
2947     return;
2948
2949   /* If the old declaration was `static', or the new one isn't, then
2950      then everything is OK.  */
2951   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2952     return;
2953
2954   /* It's OK to declare a builtin function as `static'.  */
2955   if (TREE_CODE (olddecl) == FUNCTION_DECL
2956       && DECL_ARTIFICIAL (olddecl))
2957     return;
2958
2959   name = DECL_ASSEMBLER_NAME (newdecl);
2960   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2961               ? implicit_extern_static_warning
2962               : explicit_extern_static_warning, newdecl);
2963   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2964 }
2965
2966 /* Handle when a new declaration NEWDECL has the same name as an old
2967    one OLDDECL in the same binding contour.  Prints an error message
2968    if appropriate.
2969
2970    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2971    Otherwise, return 0.  */
2972
2973 int
2974 duplicate_decls (newdecl, olddecl)
2975      tree newdecl, olddecl;
2976 {
2977   unsigned olddecl_uid = DECL_UID (olddecl);
2978   int olddecl_friend = 0, types_match = 0;
2979   int new_defines_function = 0;
2980
2981   if (newdecl == olddecl)
2982     return 1;
2983
2984   types_match = decls_match (newdecl, olddecl);
2985
2986   /* If either the type of the new decl or the type of the old decl is an
2987      error_mark_node, then that implies that we have already issued an
2988      error (earlier) for some bogus type specification, and in that case,
2989      it is rather pointless to harass the user with yet more error message
2990      about the same declaration, so just pretend the types match here.  */
2991   if (TREE_TYPE (newdecl) == error_mark_node
2992       || TREE_TYPE (olddecl) == error_mark_node)
2993     types_match = 1;
2994  
2995   /* Check for redeclaration and other discrepancies. */
2996   if (TREE_CODE (olddecl) == FUNCTION_DECL
2997       && DECL_ARTIFICIAL (olddecl))
2998     {
2999       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3000         {
3001           /* If you declare a built-in or predefined function name as static,
3002              the old definition is overridden, but optionally warn this was a
3003              bad choice of name.  */
3004           if (! TREE_PUBLIC (newdecl))
3005             {
3006               if (warn_shadow)
3007                 cp_warning ("shadowing %s function `%#D'",
3008                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3009                             olddecl);
3010               /* Discard the old built-in function.  */
3011               return 0;
3012             }
3013           /* If the built-in is not ansi, then programs can override
3014              it even globally without an error.  */
3015           else if (! DECL_BUILT_IN (olddecl))
3016             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3017                         olddecl, newdecl);
3018           else
3019             {
3020               cp_error ("declaration of `%#D'", newdecl);
3021               cp_error ("conflicts with built-in declaration `%#D'",
3022                         olddecl);
3023             }
3024           return 0;
3025         }
3026       else if (!types_match)
3027         {
3028           if ((DECL_LANGUAGE (newdecl) == lang_c
3029                && DECL_LANGUAGE (olddecl) == lang_c)
3030               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3031                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3032             {
3033               /* A near match; override the builtin.  */
3034
3035               if (TREE_PUBLIC (newdecl))
3036                 {
3037                   cp_warning ("new declaration `%#D'", newdecl);
3038                   cp_warning ("ambiguates built-in declaration `%#D'",
3039                               olddecl);
3040                 }
3041               else if (warn_shadow)
3042                 cp_warning ("shadowing %s function `%#D'",
3043                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3044                             olddecl);
3045             }
3046           else
3047             /* Discard the old built-in function.  */
3048             return 0;
3049         }
3050       
3051       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3052         {
3053           /* If a builtin function is redeclared as `static', merge
3054              the declarations, but make the original one static.  */
3055           DECL_THIS_STATIC (olddecl) = 1;
3056           TREE_PUBLIC (olddecl) = 0;
3057
3058           /* Make the olddeclaration consistent with the new one so that
3059              all remnants of the builtin-ness of this function will be
3060              banished.  */
3061           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3062           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3063           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3064           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3065                                        newdecl);
3066         }
3067     }
3068   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3069     {
3070       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3071            && TREE_CODE (newdecl) != TYPE_DECL
3072            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3073                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3074           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3075               && TREE_CODE (olddecl) != TYPE_DECL
3076               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3077                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3078                         == TYPE_DECL))))
3079         {
3080           /* We do nothing special here, because C++ does such nasty
3081              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3082              get shadowed, and know that if we need to find a TYPE_DECL
3083              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3084              slot of the identifier.  */
3085           return 0;
3086         }
3087
3088       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3089            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3090           || (TREE_CODE (olddecl) == FUNCTION_DECL
3091               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3092         return 0;
3093
3094       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3095       if (TREE_CODE (olddecl) == TREE_LIST)
3096         olddecl = TREE_VALUE (olddecl);
3097       cp_error_at ("previous declaration of `%#D'", olddecl);
3098
3099       /* New decl is completely inconsistent with the old one =>
3100          tell caller to replace the old one.  */
3101
3102       return 0;
3103     }
3104   else if (!types_match)
3105     {
3106       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3107         /* These are certainly not duplicate declarations; they're
3108            from different scopes.  */
3109         return 0;
3110
3111       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3112         {
3113           /* The name of a class template may not be declared to refer to
3114              any other template, class, function, object, namespace, value,
3115              or type in the same scope.  */
3116           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3117               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3118             {
3119               cp_error ("declaration of template `%#D'", newdecl);
3120               cp_error_at ("conflicts with previous declaration `%#D'",
3121                            olddecl);
3122             }
3123           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3124                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3125                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3126                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3127                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3128                                            DECL_TEMPLATE_PARMS (olddecl)))
3129             {
3130               cp_error ("new declaration `%#D'", newdecl);
3131               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3132             }
3133           return 0;
3134         }
3135       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3136         {
3137           if (DECL_LANGUAGE (newdecl) == lang_c
3138               && DECL_LANGUAGE (olddecl) == lang_c)
3139             {
3140               cp_error ("declaration of C function `%#D' conflicts with",
3141                         newdecl);
3142               cp_error_at ("previous declaration `%#D' here", olddecl);
3143             }
3144           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3145                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3146             {
3147               cp_error ("new declaration `%#D'", newdecl);
3148               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3149             }
3150           else
3151             return 0;
3152         }
3153
3154       /* Already complained about this, so don't do so again.  */
3155       else if (current_class_type == NULL_TREE
3156           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3157         {
3158           cp_error ("conflicting types for `%#D'", newdecl);
3159           cp_error_at ("previous declaration as `%#D'", olddecl);
3160         }
3161     }
3162   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3163             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3164                  && (!DECL_TEMPLATE_INFO (newdecl)
3165                      || (DECL_TI_TEMPLATE (newdecl) 
3166                          != DECL_TI_TEMPLATE (olddecl))))
3167                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3168                     && (!DECL_TEMPLATE_INFO (olddecl)
3169                         || (DECL_TI_TEMPLATE (olddecl) 
3170                             != DECL_TI_TEMPLATE (newdecl))))))
3171     /* It's OK to have a template specialization and a non-template
3172        with the same type, or to have specializations of two
3173        different templates with the same type.  Note that if one is a
3174        specialization, and the other is an instantiation of the same
3175        template, that we do not exit at this point.  That situation
3176        can occur if we instantiate a template class, and then
3177        specialize one of its methods.  This situation is legal, but
3178        the declarations must be merged in the usual way.  */
3179     return 0;
3180   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3181            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3182                 && !DECL_USE_TEMPLATE (newdecl))
3183                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3184                    && !DECL_USE_TEMPLATE (olddecl))))
3185     /* One of the declarations is a template instantiation, and the
3186        other is not a template at all.  That's OK.  */
3187     return 0;
3188   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3189            && DECL_NAMESPACE_ALIAS (newdecl)
3190            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3191     /* Redeclaration of namespace alias, ignore it. */
3192     return 1;
3193   else
3194     {
3195       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3196       if (errmsg)
3197         {
3198           cp_error (errmsg, newdecl);
3199           if (DECL_NAME (olddecl) != NULL_TREE)
3200             cp_error_at ((DECL_INITIAL (olddecl)
3201                           && namespace_bindings_p ())
3202                          ? "`%#D' previously defined here"
3203                          : "`%#D' previously declared here", olddecl);
3204         }
3205       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3206                && DECL_INITIAL (olddecl) != NULL_TREE
3207                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3208                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3209         {
3210           /* Prototype decl follows defn w/o prototype.  */
3211           cp_warning_at ("prototype for `%#D'", newdecl);
3212           cp_warning_at ("follows non-prototype definition here", olddecl);
3213         }
3214       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3215                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3216         {
3217           /* extern "C" int foo ();
3218              int foo () { bar (); }
3219              is OK.  */
3220           if (current_lang_stack
3221               == &VARRAY_TREE (current_lang_base, 0))
3222             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3223           else
3224             {
3225               cp_error_at ("previous declaration of `%#D' with %L linkage",
3226                            olddecl, DECL_LANGUAGE (olddecl));
3227               cp_error ("conflicts with new declaration with %L linkage",
3228                         DECL_LANGUAGE (newdecl));
3229             }
3230         }
3231
3232       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3233         ;
3234       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3235         {
3236           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3237           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3238           int i = 1;
3239
3240           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3241             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3242         
3243           for (; t1 && t1 != void_list_node;
3244                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3245             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3246               {
3247                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3248                                            TREE_PURPOSE (t2)))
3249                   {
3250                     if (pedantic)
3251                       {
3252                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3253                                     i, newdecl);
3254                         cp_pedwarn_at ("after previous specification in `%#D'",
3255                                        olddecl);
3256                       }
3257                   }
3258                 else
3259                   {
3260                     cp_error ("default argument given for parameter %d of `%#D'",
3261                               i, newdecl);
3262                     cp_error_at ("after previous specification in `%#D'",
3263                                  olddecl);
3264                   }
3265               }
3266
3267           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3268               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3269             {
3270               cp_warning ("`%#D' was used before it was declared inline",
3271                           newdecl);
3272               cp_warning_at ("previous non-inline declaration here",
3273                              olddecl);
3274             }
3275         }
3276     }
3277
3278   /* If new decl is `static' and an `extern' was seen previously,
3279      warn about it.  */
3280   warn_extern_redeclared_static (newdecl, olddecl);
3281
3282   /* We have committed to returning 1 at this point.  */
3283   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3284     {
3285       /* Now that functions must hold information normally held
3286          by field decls, there is extra work to do so that
3287          declaration information does not get destroyed during
3288          definition.  */
3289       if (DECL_VINDEX (olddecl))
3290         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3291       if (DECL_CONTEXT (olddecl))
3292         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3293       if (DECL_CLASS_CONTEXT (olddecl))
3294         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3295       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3296         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3297       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3298       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3299       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3300       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3301       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3302       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3303       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3304       
3305       /* Optionally warn about more than one declaration for the same
3306          name, but don't warn about a function declaration followed by a
3307          definition.  */
3308       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3309           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3310           /* Don't warn about extern decl followed by definition. */
3311           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3312           /* Don't warn about friends, let add_friend take care of it. */
3313           && ! DECL_FRIEND_P (newdecl))
3314         {
3315           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3316           cp_warning_at ("previous declaration of `%D'", olddecl);
3317         }
3318     }
3319
3320   /* Deal with C++: must preserve virtual function table size.  */
3321   if (TREE_CODE (olddecl) == TYPE_DECL)
3322     {
3323       register tree newtype = TREE_TYPE (newdecl);
3324       register tree oldtype = TREE_TYPE (olddecl);
3325
3326       if (newtype != error_mark_node && oldtype != error_mark_node
3327           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3328         {
3329           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3330           CLASSTYPE_FRIEND_CLASSES (newtype)
3331             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3332         }
3333     }
3334
3335   /* Copy all the DECL_... slots specified in the new decl
3336      except for any that we copy here from the old type.  */
3337   DECL_MACHINE_ATTRIBUTES (newdecl) 
3338     = merge_machine_decl_attributes (olddecl, newdecl);
3339
3340   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3341     {
3342       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3343                              DECL_TEMPLATE_RESULT (olddecl)))
3344         cp_error ("invalid redeclaration of %D", newdecl);
3345       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3346       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3347         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3348                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3349  
3350       return 1;
3351     }
3352     
3353   if (types_match)
3354     {
3355       /* Automatically handles default parameters.  */
3356       tree oldtype = TREE_TYPE (olddecl);
3357       tree newtype;
3358
3359       /* Make sure we put the new type in the same obstack as the old one.  */
3360       if (oldtype)
3361         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3362       else
3363         push_permanent_obstack ();
3364
3365       /* Merge the data types specified in the two decls.  */
3366       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3367
3368       if (TREE_CODE (newdecl) == VAR_DECL)
3369         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3370       /* Do this after calling `common_type' so that default
3371          parameters don't confuse us.  */
3372       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3373           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3374               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3375         {
3376           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3377                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3378           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3379                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3380
3381           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3382               && DECL_SOURCE_LINE (olddecl) != 0
3383               && flag_exceptions
3384               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3385                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3386             {
3387               cp_error ("declaration of `%F' throws different exceptions",
3388                         newdecl);
3389               cp_error_at ("to previous declaration `%F'", olddecl);
3390             }
3391         }
3392       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3393
3394       /* Lay the type out, unless already done.  */
3395       if (! same_type_p (newtype, oldtype)
3396           && TREE_TYPE (newdecl) != error_mark_node
3397           && !(processing_template_decl && uses_template_parms (newdecl)))
3398         layout_type (TREE_TYPE (newdecl));
3399
3400       if ((TREE_CODE (newdecl) == VAR_DECL
3401            || TREE_CODE (newdecl) == PARM_DECL
3402            || TREE_CODE (newdecl) == RESULT_DECL
3403            || TREE_CODE (newdecl) == FIELD_DECL
3404            || TREE_CODE (newdecl) == TYPE_DECL)
3405           && !(processing_template_decl && uses_template_parms (newdecl)))
3406         layout_decl (newdecl, 0);
3407
3408       /* Merge the type qualifiers.  */
3409       if (TREE_READONLY (newdecl))
3410         TREE_READONLY (olddecl) = 1;
3411       if (TREE_THIS_VOLATILE (newdecl))
3412         TREE_THIS_VOLATILE (olddecl) = 1;
3413
3414       /* Merge the initialization information.  */
3415       if (DECL_INITIAL (newdecl) == NULL_TREE
3416           && DECL_INITIAL (olddecl) != NULL_TREE)
3417         {
3418           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3419           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3420           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3421           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3422               && DECL_LANG_SPECIFIC (newdecl)
3423               && DECL_LANG_SPECIFIC (olddecl))
3424             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3425         }
3426
3427       /* Merge the section attribute.
3428          We want to issue an error if the sections conflict but that must be
3429          done later in decl_attributes since we are called before attributes
3430          are assigned.  */
3431       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3432         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3433
3434       /* Keep the old rtl since we can safely use it.  */
3435       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3436
3437       pop_obstacks ();
3438     }
3439   /* If cannot merge, then use the new type and qualifiers,
3440      and don't preserve the old rtl.  */
3441   else
3442     {
3443       /* Clean out any memory we had of the old declaration.  */
3444       tree oldstatic = value_member (olddecl, static_aggregates);
3445       if (oldstatic)
3446         TREE_VALUE (oldstatic) = error_mark_node;
3447
3448       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3449       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3450       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3451       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3452     }
3453
3454   /* Merge the storage class information.  */
3455   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3456   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3457   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3458   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3459   if (! DECL_EXTERNAL (olddecl))
3460     DECL_EXTERNAL (newdecl) = 0;
3461   
3462   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3463     {
3464       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3465       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3466       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3467       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3468         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3469       /* Don't really know how much of the language-specific
3470          values we should copy from old to new.  */
3471       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3472       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3473       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3474       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3475       olddecl_friend = DECL_FRIEND_P (olddecl);
3476
3477       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3478       if (TREE_CODE (newdecl) == FUNCTION_DECL
3479           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3480         DECL_BEFRIENDING_CLASSES (newdecl)
3481           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3482                      DECL_BEFRIENDING_CLASSES (olddecl));
3483     }
3484
3485   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3486     {
3487       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3488           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3489         {
3490           /* If newdecl is not a specialization, then it is not a
3491              template-related function at all.  And that means that we
3492              shoud have exited above, returning 0.  */
3493           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3494                               0);
3495
3496           if (TREE_USED (olddecl)) 
3497             /* From [temp.expl.spec]:
3498                
3499                If a template, a member template or the member of a class
3500                template is explicitly specialized then that
3501                specialization shall be declared before the first use of
3502                that specialization that would cause an implicit
3503                instantiation to take place, in every translation unit in
3504                which such a use occurs.  */
3505             cp_error ("explicit specialization of %D after first use", 
3506                       olddecl);
3507
3508           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3509         }
3510       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3511
3512       /* If either decl says `inline', this fn is inline, unless its
3513          definition was passed already.  */
3514       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3515         DECL_INLINE (olddecl) = 1;
3516       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3517
3518       if (! types_match)
3519         {
3520           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3521           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3522           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3523         }
3524       if (! types_match || new_defines_function)
3525         {
3526           /* These need to be copied so that the names are available.
3527              Note that if the types do match, we'll preserve inline
3528              info and other bits, but if not, we won't.  */
3529           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3530           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3531         }
3532       if (new_defines_function)
3533         /* If defining a function declared with other language
3534            linkage, use the previously declared language linkage.  */
3535         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3536       else if (types_match)
3537         {
3538           /* If redeclaring a builtin function, and not a definition,
3539              it stays built in.  */
3540           if (DECL_BUILT_IN (olddecl))
3541             {
3542               DECL_BUILT_IN (newdecl) = 1;
3543               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3544               /* If we're keeping the built-in definition, keep the rtl,
3545                  regardless of declaration matches.  */
3546               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3547             }
3548           else
3549             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3550
3551           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3552           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3553             /* Previously saved insns go together with
3554                the function's previous definition.  */
3555             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3556           /* Don't clear out the arguments if we're redefining a function.  */
3557           if (DECL_ARGUMENTS (olddecl))
3558             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3559         }
3560       if (DECL_LANG_SPECIFIC (olddecl))
3561         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3562     }
3563
3564   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3565     {
3566       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3567     }
3568
3569   /* Now preserve various other info from the definition.  */
3570   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3571   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3572   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3573   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3574
3575   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3576     {
3577       int function_size;
3578
3579       function_size = sizeof (struct tree_decl);
3580
3581       bcopy ((char *) newdecl + sizeof (struct tree_common),
3582              (char *) olddecl + sizeof (struct tree_common),
3583              function_size - sizeof (struct tree_common));
3584
3585       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3586         {
3587           /* If newdecl is a template instantiation, it is possible that
3588              the following sequence of events has occurred:
3589
3590              o A friend function was declared in a class template.  The
3591              class template was instantiated.  
3592
3593              o The instantiation of the friend declaration was 
3594              recorded on the instantiation list, and is newdecl.  
3595
3596              o Later, however, instantiate_class_template called pushdecl
3597              on the newdecl to perform name injection.  But, pushdecl in
3598              turn called duplicate_decls when it discovered that another
3599              declaration of a global function with the same name already
3600              existed. 
3601
3602              o Here, in duplicate_decls, we decided to clobber newdecl.
3603
3604              If we're going to do that, we'd better make sure that
3605              olddecl, and not newdecl, is on the list of
3606              instantiations so that if we try to do the instantiation
3607              again we won't get the clobbered declaration.  */
3608
3609           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3610           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3611
3612           for (; decls; decls = TREE_CHAIN (decls))
3613             if (TREE_VALUE (decls) == newdecl)
3614               TREE_VALUE (decls) = olddecl;
3615         }
3616     }
3617   else
3618     {
3619       bcopy ((char *) newdecl + sizeof (struct tree_common),
3620              (char *) olddecl + sizeof (struct tree_common),
3621              sizeof (struct tree_decl) - sizeof (struct tree_common)
3622              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3623     }
3624
3625   DECL_UID (olddecl) = olddecl_uid;
3626   if (olddecl_friend)
3627     DECL_FRIEND_P (olddecl) = 1;
3628
3629   /* NEWDECL contains the merged attribute lists.
3630      Update OLDDECL to be the same.  */
3631   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3632
3633   return 1;
3634 }
3635
3636 /* Record a decl-node X as belonging to the current lexical scope.
3637    Check for errors (such as an incompatible declaration for the same
3638    name already seen in the same scope).
3639
3640    Returns either X or an old decl for the same name.
3641    If an old decl is returned, it may have been smashed
3642    to agree with what X says.  */
3643
3644 tree
3645 pushdecl (x)
3646      tree x;
3647 {
3648   register tree t;
3649   register tree name;
3650   int need_new_binding;
3651
3652   /* We shouldn't be calling pushdecl when we're generating RTL for a
3653      function that we already did semantic analysis on previously.  */
3654   my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3655                       19990913);
3656
3657   name = DECL_ASSEMBLER_NAME (x);
3658   need_new_binding = 1;
3659
3660   if (DECL_TEMPLATE_PARM_P (x))
3661     /* Template parameters have no context; they are not X::T even
3662        when declared within a class or namespace.  */
3663     ;
3664   else
3665     {
3666       if (current_function_decl && x != current_function_decl
3667           /* A local declaration for a function doesn't constitute
3668              nesting.  */
3669           && (TREE_CODE (x) != FUNCTION_DECL || DECL_INITIAL (x))
3670           /* Don't change DECL_CONTEXT of virtual methods.  */
3671           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3672           && !DECL_CONTEXT (x))
3673         DECL_CONTEXT (x) = current_function_decl;
3674       if (!DECL_CONTEXT (x))
3675         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3676     }
3677
3678   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3679      compiler wants to use.  */
3680   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3681       || TREE_CODE (x) == NAMESPACE_DECL)
3682     name = DECL_NAME (x);
3683
3684   if (name)
3685     {
3686 #if 0
3687       /* Not needed...see below.  */
3688       char *file;
3689       int line;
3690 #endif
3691       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3692         name = TREE_OPERAND (name, 0);
3693       
3694       /* Namespace-scoped variables are not found in the current level. */
3695       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3696         t = namespace_binding (name, DECL_CONTEXT (x));
3697       else
3698         t = lookup_name_current_level (name);
3699       if (t == error_mark_node)
3700         {
3701           /* error_mark_node is 0 for a while during initialization!  */
3702           t = NULL_TREE;
3703           cp_error_at ("`%#D' used prior to declaration", x);
3704         }
3705
3706       else if (t != NULL_TREE)
3707         {
3708 #if 0
3709           /* This is turned off until I have time to do it right (bpk).  */
3710           /* With the code below that uses it...  */
3711           file = DECL_SOURCE_FILE (t);
3712           line = DECL_SOURCE_LINE (t);
3713 #endif
3714           if (TREE_CODE (t) == PARM_DECL)
3715             {
3716               if (DECL_CONTEXT (t) == NULL_TREE)
3717                 fatal ("parse errors have confused me too much");
3718
3719               /* Check for duplicate params.  */
3720               if (duplicate_decls (x, t))
3721                 return t;
3722             }
3723           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3724                     || DECL_FUNCTION_TEMPLATE_P (x))
3725                    && is_overloaded_fn (t))
3726             /* Don't do anything just yet. */;
3727           else if (t == wchar_decl_node)
3728             {
3729               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3730                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3731
3732               /* Throw away the redeclaration.  */
3733               return t;
3734             }
3735           else if (TREE_CODE (t) != TREE_CODE (x))
3736             {
3737               if (duplicate_decls (x, t))
3738                 return t;
3739             }
3740           else if (duplicate_decls (x, t))
3741             {
3742 #if 0
3743               /* This is turned off until I have time to do it right (bpk).  */
3744
3745               /* Also warn if they did a prototype with `static' on it, but
3746                  then later left the `static' off.  */
3747               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3748                 {
3749                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3750                     return t;
3751
3752                   if (extra_warnings)
3753                     {
3754                       cp_warning ("`static' missing from declaration of `%D'",
3755                                   t);
3756                       warning_with_file_and_line (file, line,
3757                                                   "previous declaration of `%s'",
3758                                                   decl_as_string (t, 0));
3759                     }
3760
3761                   /* Now fix things so it'll do what they expect.  */
3762                   if (current_function_decl)
3763                     TREE_PUBLIC (current_function_decl) = 0;
3764                 }
3765               /* Due to interference in memory reclamation (X may be
3766                  obstack-deallocated at this point), we must guard against
3767                  one really special case.  [jason: This should be handled
3768                  by start_function]  */
3769               if (current_function_decl == x)
3770                 current_function_decl = t;
3771 #endif
3772               if (TREE_CODE (t) == TYPE_DECL)
3773                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3774               else if (TREE_CODE (t) == FUNCTION_DECL)
3775                 check_default_args (t);
3776
3777               return t;
3778             }
3779           else if (DECL_MAIN_P (x))
3780             {
3781               /* A redeclaration of main, but not a duplicate of the
3782                  previous one. 
3783
3784                  [basic.start.main]
3785
3786                  This function shall not be overloaded.  */
3787               cp_error_at ("invalid redeclaration of `%D'", t);
3788               cp_error ("as `%D'", x);
3789               /* We don't try to push this declaration since that
3790                  causes a crash.  */
3791               return x;
3792             }
3793         }
3794
3795       check_template_shadow (x);
3796
3797       /* If this is a function conjured up by the backend, massage it
3798          so it looks friendly.  */
3799       if (TREE_CODE (x) == FUNCTION_DECL
3800           && ! DECL_LANG_SPECIFIC (x))
3801         {
3802           retrofit_lang_decl (x);
3803           DECL_LANGUAGE (x) = lang_c;
3804         }
3805
3806       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3807         {
3808           t = push_overloaded_decl (x, PUSH_LOCAL);
3809           if (t != x)
3810             return t;
3811           if (!namespace_bindings_p ())
3812             /* We do not need to create a binding for this name;
3813                push_overloaded_decl will have already done so if
3814                necessary.  */
3815             need_new_binding = 0;
3816         }
3817       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3818         {
3819           t = push_overloaded_decl (x, PUSH_GLOBAL);
3820           if (t == x)
3821             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3822           return t;
3823         }
3824
3825       /* If declaring a type as a typedef, copy the type (unless we're
3826          at line 0), and install this TYPE_DECL as the new type's typedef
3827          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3828       if (TREE_CODE (x) == TYPE_DECL)
3829         {
3830           tree type = TREE_TYPE (x);
3831           if (DECL_SOURCE_LINE (x) == 0)
3832             {
3833               if (TYPE_NAME (type) == 0)
3834                 TYPE_NAME (type) = x;
3835             }
3836           else if (type != error_mark_node && TYPE_NAME (type) != x
3837                    /* We don't want to copy the type when all we're
3838                       doing is making a TYPE_DECL for the purposes of
3839                       inlining.  */
3840                    && (!TYPE_NAME (type) 
3841                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3842             {
3843               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3844
3845               DECL_ORIGINAL_TYPE (x) = type;
3846               type = build_type_copy (type);
3847               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3848               TYPE_NAME (type) = x;
3849               TREE_TYPE (x) = type;
3850
3851               pop_obstacks ();
3852             }
3853
3854           if (type != error_mark_node
3855               && TYPE_NAME (type)
3856               && TYPE_IDENTIFIER (type))
3857             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3858                                                   current_binding_level);
3859
3860         }
3861
3862       /* Multiple external decls of the same identifier ought to match.
3863
3864          We get warnings about inline functions where they are defined.
3865          We get warnings about other functions from push_overloaded_decl.
3866          
3867          Avoid duplicate warnings where they are used.  */
3868       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3869         {
3870           tree decl;
3871
3872           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3873               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3874                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3875             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3876           else
3877             decl = NULL_TREE;
3878
3879           if (decl
3880               /* If different sort of thing, we already gave an error.  */
3881               && TREE_CODE (decl) == TREE_CODE (x)
3882               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3883             {
3884               cp_pedwarn ("type mismatch with previous external decl", x);
3885               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3886             }
3887         }
3888
3889       /* This name is new in its binding level.
3890          Install the new declaration and return it.  */
3891       if (namespace_bindings_p ())
3892         {
3893           /* Install a global value.  */
3894
3895           /* If the first global decl has external linkage,
3896              warn if we later see static one.  */
3897           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3898             TREE_PUBLIC (name) = 1;
3899
3900           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3901                 && t != NULL_TREE)
3902               /* For an ordinary function, we create a binding from
3903                  the mangled name (i.e., NAME) to the DECL.  But, for
3904                  an `extern "C"' function, the mangled name and the
3905                  ordinary name are the same so we need not do this.  */
3906               && !(TREE_CODE (x) == FUNCTION_DECL && 
3907                    DECL_LANGUAGE (x) == lang_c))
3908             {
3909               if (TREE_CODE (x) == FUNCTION_DECL)
3910                 my_friendly_assert 
3911                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3912                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3913               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3914             }
3915
3916           /* Don't forget if the function was used via an implicit decl.  */
3917           if (IDENTIFIER_IMPLICIT_DECL (name)
3918               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3919             TREE_USED (x) = 1;
3920
3921           /* Don't forget if its address was taken in that way.  */
3922           if (IDENTIFIER_IMPLICIT_DECL (name)
3923               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3924             TREE_ADDRESSABLE (x) = 1;
3925
3926           /* Warn about mismatches against previous implicit decl.  */
3927           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3928               /* If this real decl matches the implicit, don't complain.  */
3929               && ! (TREE_CODE (x) == FUNCTION_DECL
3930                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3931             cp_warning
3932               ("`%D' was previously implicitly declared to return `int'", x);
3933
3934           /* If new decl is `static' and an `extern' was seen previously,
3935              warn about it.  */
3936           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3937             warn_extern_redeclared_static (x, t);
3938         }
3939       else
3940         {
3941           /* Here to install a non-global value.  */
3942           tree oldlocal = IDENTIFIER_VALUE (name);
3943           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3944
3945           if (need_new_binding)
3946             {
3947               push_local_binding (name, x, 0);
3948               /* Because push_local_binding will hook X on to the
3949                  current_binding_level's name list, we don't want to
3950                  do that again below.  */
3951               need_new_binding = 0;
3952             }
3953
3954           /* If this is a TYPE_DECL, push it into the type value slot.  */
3955           if (TREE_CODE (x) == TYPE_DECL)
3956             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3957                                                   current_binding_level);
3958
3959           /* Clear out any TYPE_DECL shadowed by a namespace so that
3960              we won't think this is a type.  The C struct hack doesn't
3961              go through namespaces.  */
3962           if (TREE_CODE (x) == NAMESPACE_DECL)
3963             set_identifier_type_value_with_scope (name, NULL_TREE, 
3964                                                   current_binding_level);
3965
3966           /* If this is an extern function declaration, see if we
3967              have a global definition or declaration for the function.  */
3968           if (oldlocal == NULL_TREE
3969               && DECL_EXTERNAL (x)
3970               && oldglobal != NULL_TREE
3971               && TREE_CODE (x) == FUNCTION_DECL
3972               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3973             {
3974               /* We have one.  Their types must agree.  */
3975               if (decls_match (x, oldglobal))
3976                 /* OK */;
3977               else
3978                 {
3979                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3980                   cp_warning_at ("global declaration `%#D'", oldglobal);
3981                 }
3982             }
3983           /* If we have a local external declaration,
3984              and no file-scope declaration has yet been seen,
3985              then if we later have a file-scope decl it must not be static.  */
3986           if (oldlocal == NULL_TREE
3987               && oldglobal == NULL_TREE
3988               && DECL_EXTERNAL (x)
3989               && TREE_PUBLIC (x))
3990             TREE_PUBLIC (name) = 1;
3991
3992           if (DECL_FROM_INLINE (x))
3993             /* Inline decls shadow nothing.  */;
3994
3995           /* Warn if shadowing an argument at the top level of the body.  */
3996           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3997                    && TREE_CODE (oldlocal) == PARM_DECL
3998                    /* Don't complain if it's from an enclosing function.  */
3999                    && DECL_CONTEXT (oldlocal) == current_function_decl
4000                    && TREE_CODE (x) != PARM_DECL)
4001             {
4002               /* Go to where the parms should be and see if we
4003                  find them there.  */
4004               struct binding_level *b = current_binding_level->level_chain;
4005
4006               if (cleanup_label)
4007                 b = b->level_chain;
4008
4009               /* ARM $8.3 */
4010               if (b->parm_flag == 1)
4011                 cp_error ("declaration of `%#D' shadows a parameter", name);
4012             }
4013           else if (warn_shadow && oldlocal != NULL_TREE
4014                    && current_binding_level->is_for_scope
4015                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4016             {
4017               warning ("variable `%s' shadows local",
4018                        IDENTIFIER_POINTER (name));
4019               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4020             }              
4021           /* Maybe warn if shadowing something else.  */
4022           else if (warn_shadow && !DECL_EXTERNAL (x)
4023                    /* No shadow warnings for internally generated vars.  */
4024                    && ! DECL_ARTIFICIAL (x)
4025                    /* No shadow warnings for vars made for inlining.  */
4026                    && ! DECL_FROM_INLINE (x))
4027             {
4028               const char *warnstring = NULL;
4029
4030               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4031                 warnstring = "declaration of `%s' shadows a parameter";
4032               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4033                        && current_class_ptr
4034                        && !TREE_STATIC (name))
4035                 warnstring = "declaration of `%s' shadows a member of `this'";
4036               else if (oldlocal != NULL_TREE)
4037                 warnstring = "declaration of `%s' shadows previous local";
4038               else if (oldglobal != NULL_TREE)
4039                 /* XXX shadow warnings in outer-more namespaces */
4040                 warnstring = "declaration of `%s' shadows global declaration";
4041
4042               if (warnstring)
4043                 warning (warnstring, IDENTIFIER_POINTER (name));
4044             }
4045         }
4046
4047       if (TREE_CODE (x) == FUNCTION_DECL)
4048         check_default_args (x);
4049
4050       /* Keep count of variables in this level with incomplete type.  */
4051       if (TREE_CODE (x) == VAR_DECL
4052           && TREE_TYPE (x) != error_mark_node
4053           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4054                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4055               /* RTTI TD entries are created while defining the type_info.  */
4056               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4057                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4058         current_binding_level->incomplete 
4059           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4060     }
4061
4062   if (need_new_binding)
4063     add_decl_to_level (x, current_binding_level);
4064
4065   return x;
4066 }
4067
4068 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4069    caller to set DECL_CONTEXT properly.  */
4070
4071 static tree
4072 pushdecl_with_scope (x, level)
4073      tree x;
4074      struct binding_level *level;
4075 {
4076   register struct binding_level *b;
4077   tree function_decl = current_function_decl;
4078
4079   current_function_decl = NULL_TREE;
4080   if (level->parm_flag == 2)
4081     {
4082       b = class_binding_level;
4083       class_binding_level = level;
4084       pushdecl_class_level (x);
4085       class_binding_level = b;
4086     }
4087   else
4088     {
4089       b = current_binding_level;
4090       current_binding_level = level;
4091       x = pushdecl (x);
4092       current_binding_level = b;
4093     }
4094   current_function_decl = function_decl;
4095   return x;
4096 }
4097
4098 /* Like pushdecl, only it places X in the current namespace,
4099    if appropriate.  */
4100
4101 tree
4102 pushdecl_namespace_level (x)
4103      tree x;
4104 {
4105   register struct binding_level *b = current_binding_level;
4106   register tree t;
4107
4108   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4109
4110   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4111      what we want.  */
4112   if (TREE_CODE (x) == TYPE_DECL)
4113     {
4114       tree name = DECL_NAME (x);
4115       tree newval;
4116       tree *ptr = (tree *)0;
4117       for (; b != global_binding_level; b = b->level_chain)
4118         {
4119           tree shadowed = b->type_shadowed;
4120           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4121             if (TREE_PURPOSE (shadowed) == name)
4122               {
4123                 ptr = &TREE_VALUE (shadowed);
4124                 /* Can't break out of the loop here because sometimes
4125                    a binding level will have duplicate bindings for
4126                    PT names.  It's gross, but I haven't time to fix it.  */
4127               }
4128         }
4129       newval = TREE_TYPE (x);
4130       if (ptr == (tree *)0)
4131         {
4132           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4133              up here if this is changed to an assertion.  --KR  */
4134           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4135         }
4136       else
4137         {
4138           *ptr = newval;
4139         }
4140     }
4141   return t;
4142 }
4143
4144 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4145    if appropriate.  */
4146
4147 tree
4148 pushdecl_top_level (x)
4149      tree x;
4150 {
4151   push_to_top_level ();
4152   x = pushdecl_namespace_level (x);
4153   pop_from_top_level ();
4154   return x;
4155 }
4156
4157 /* Make the declaration of X appear in CLASS scope.  */
4158
4159 void
4160 pushdecl_class_level (x)
4161      tree x;
4162 {
4163   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4164      scope looks for the pre-mangled name.  */
4165   register tree name;
4166
4167   if (TREE_CODE (x) == OVERLOAD)
4168     x = OVL_CURRENT (x);
4169   name = DECL_NAME (x);
4170
4171   if (name)
4172     {
4173       push_class_level_binding (name, x);
4174       if (TREE_CODE (x) == TYPE_DECL)
4175         set_identifier_type_value (name, TREE_TYPE (x));
4176     }
4177   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4178     {
4179       tree f;
4180
4181       for (f = TYPE_FIELDS (TREE_TYPE (x));
4182            f;
4183            f = TREE_CHAIN (f))
4184         pushdecl_class_level (f);
4185     }
4186 }
4187
4188 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4189    DECL, or a modified version thereof.  */
4190
4191 tree
4192 maybe_push_decl (decl)
4193      tree decl;
4194 {
4195   tree type = TREE_TYPE (decl);
4196
4197   /* Add this decl to the current binding level, but not if it comes
4198      from another scope, e.g. a static member variable.  TEM may equal
4199      DECL or it may be a previous decl of the same name.  */
4200   if ((TREE_CODE (decl) != PARM_DECL 
4201        && DECL_CONTEXT (decl) != NULL_TREE 
4202        /* Definitions of namespace members outside their namespace are
4203           possible. */
4204        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4205       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4206       || TREE_CODE (type) == UNKNOWN_TYPE
4207       /* The declaration of a template specialization does not affect
4208          the functions available for overload resolution, so we do not
4209          call pushdecl.  */
4210       || (TREE_CODE (decl) == FUNCTION_DECL
4211           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4212     return decl;
4213   else
4214     return pushdecl (decl);
4215 }
4216
4217 #if 0
4218 /* This function is used to push the mangled decls for nested types into
4219    the appropriate scope.  Previously pushdecl_top_level was used, but that
4220    is incorrect for members of local classes.  */
4221
4222 void
4223 pushdecl_nonclass_level (x)
4224      tree x;
4225 {
4226   struct binding_level *b = current_binding_level;
4227
4228   my_friendly_assert (b->parm_flag != 2, 180);
4229
4230 #if 0
4231   /* Get out of template binding levels */
4232   while (b->pseudo_global)
4233     b = b->level_chain;
4234 #endif
4235
4236   pushdecl_with_scope (x, b);
4237 }
4238 #endif
4239
4240 /* Make the declaration(s) of X appear in CLASS scope
4241    under the name NAME.  */
4242
4243 void
4244 push_class_level_binding (name, x)
4245      tree name;
4246      tree x;
4247 {
4248   tree binding;
4249   /* The class_binding_level will be NULL if x is a template 
4250      parameter name in a member template.  */
4251   if (!class_binding_level)
4252     return;
4253
4254   /* Make sure that this new member does not have the same name
4255      as a template parameter.  */
4256   if (TYPE_BEING_DEFINED (current_class_type))
4257     check_template_shadow (x);
4258
4259   /* If this declaration shadows a declaration from an enclosing
4260      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4261      we leave this class.  Record the shadowed declaration here.  */
4262   binding = IDENTIFIER_BINDING (name);
4263   if (binding 
4264       && ((TREE_CODE (x) == OVERLOAD
4265            && BINDING_VALUE (binding)
4266            && is_overloaded_fn (BINDING_VALUE (binding)))
4267           || INHERITED_VALUE_BINDING_P (binding)))
4268     {
4269       tree shadow;
4270       tree old_decl;
4271
4272       /* If the old binding was from a base class, and was for a tag
4273          name, slide it over to make room for the new binding.  The
4274          old binding is still visible if explicitly qualified with a
4275          class-key.  */
4276       if (INHERITED_VALUE_BINDING_P (binding)
4277           && BINDING_VALUE (binding)
4278           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4279           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4280           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4281         {
4282           old_decl = BINDING_TYPE (binding);
4283           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4284           BINDING_VALUE (binding) = NULL_TREE;
4285           INHERITED_VALUE_BINDING_P (binding) = 0;
4286         }
4287       else
4288         old_decl = BINDING_VALUE (binding);
4289
4290       /* There was already a binding for X containing fewer
4291          functions than are named in X.  Find the previous
4292          declaration of X on the class-shadowed list, and update it.  */
4293       for (shadow = class_binding_level->class_shadowed;
4294            shadow;
4295            shadow = TREE_CHAIN (shadow))
4296         if (TREE_PURPOSE (shadow) == name
4297             && TREE_TYPE (shadow) == old_decl)
4298           {
4299             BINDING_VALUE (binding) = x;
4300             INHERITED_VALUE_BINDING_P (binding) = 0;
4301             TREE_TYPE (shadow) = x;
4302             return;
4303           }
4304     }
4305
4306   /* If we didn't replace an existing binding, put the binding on the
4307      stack of bindings for the identifier, and update
4308      IDENTIFIER_CLASS_VALUE.  */
4309   if (push_class_binding (name, x))
4310     {
4311       push_cache_obstack ();
4312       class_binding_level->class_shadowed
4313         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4314                      class_binding_level->class_shadowed);
4315       pop_obstacks ();
4316       /* Record the value we are binding NAME to so that we can know
4317          what to pop later.  */
4318       TREE_TYPE (class_binding_level->class_shadowed) = x;
4319     }
4320 }
4321
4322 /* Insert another USING_DECL into the current binding level,
4323    returning this declaration. If this is a redeclaration,
4324    do nothing and return NULL_TREE.  */
4325
4326 tree
4327 push_using_decl (scope, name)
4328      tree scope;
4329      tree name;
4330 {
4331   tree decl;
4332   
4333   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4334   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4335   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4336     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4337       break;
4338   if (decl)
4339     return NULL_TREE;
4340   decl = build_lang_decl (USING_DECL, name, void_type_node);
4341   DECL_INITIAL (decl) = scope;
4342   TREE_CHAIN (decl) = current_binding_level->usings;
4343   current_binding_level->usings = decl;
4344   return decl;
4345 }
4346
4347 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4348    changed (i.e. there was already a directive), or the fresh
4349    TREE_LIST otherwise.  */
4350
4351 tree
4352 push_using_directive (used)
4353      tree used;
4354 {
4355   tree ud = current_binding_level->using_directives;
4356   tree iter, ancestor;
4357   
4358   /* Check if we already have this. */
4359   if (purpose_member (used, ud) != NULL_TREE)
4360     return NULL_TREE;
4361
4362   /* Recursively add all namespaces used. */
4363   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4364     push_using_directive (TREE_PURPOSE (iter));
4365
4366   ancestor = namespace_ancestor (current_decl_namespace (), used);
4367   ud = current_binding_level->using_directives;
4368   ud = tree_cons (used, ancestor, ud);
4369   current_binding_level->using_directives = ud;
4370   return ud;
4371 }
4372
4373 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4374    other definitions already in place.  We get around this by making
4375    the value of the identifier point to a list of all the things that
4376    want to be referenced by that name.  It is then up to the users of
4377    that name to decide what to do with that list.
4378
4379    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4380    slot.  It is dealt with the same way.
4381
4382    FLAGS is a bitwise-or of the following values:
4383      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4384                  namespace scope.
4385      PUSH_USING: DECL is being pushed as the result of a using
4386                  declaration. 
4387
4388    The value returned may be a previous declaration if we guessed wrong
4389    about what language DECL should belong to (C or C++).  Otherwise,
4390    it's always DECL (and never something that's not a _DECL).  */
4391
4392 tree
4393 push_overloaded_decl (decl, flags)
4394      tree decl;
4395      int flags;
4396 {
4397   tree name = DECL_NAME (decl);
4398   tree old;
4399   tree new_binding;
4400   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4401
4402   if (doing_global)
4403     old = namespace_binding (name, DECL_CONTEXT (decl));
4404   else
4405     old = lookup_name_current_level (name);
4406
4407   if (old)
4408     {
4409       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4410         {
4411           tree t = TREE_TYPE (old);
4412           if (IS_AGGR_TYPE (t) && warn_shadow
4413               && (! DECL_IN_SYSTEM_HEADER (decl)
4414                   || ! DECL_IN_SYSTEM_HEADER (old)))
4415             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4416           old = NULL_TREE;
4417         }
4418       else if (is_overloaded_fn (old))
4419         {
4420           tree tmp;
4421           
4422           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4423             {
4424               tree fn = OVL_CURRENT (tmp);
4425
4426               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4427                   && !(flags & PUSH_USING)
4428                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4429                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4430                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4431                           decl, fn);
4432               
4433               if (duplicate_decls (decl, fn))
4434                 return fn;
4435             }
4436         }
4437       else
4438         {
4439           cp_error_at ("previous non-function declaration `%#D'", old);
4440           cp_error ("conflicts with function declaration `%#D'", decl);
4441           return decl;
4442         }
4443     }
4444
4445   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4446     {
4447       if (old && TREE_CODE (old) != OVERLOAD)
4448         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4449       else
4450         new_binding = ovl_cons (decl, old);
4451       if (flags & PUSH_USING)
4452         OVL_USED (new_binding) = 1;
4453     }
4454   else
4455     /* NAME is not ambiguous.  */
4456     new_binding = decl;
4457
4458   if (doing_global)
4459     set_namespace_binding (name, current_namespace, new_binding);
4460   else
4461     {
4462       /* We only create an OVERLOAD if there was a previous binding at
4463          this level, or if decl is a template. In the former case, we
4464          need to remove the old binding and replace it with the new
4465          binding.  We must also run through the NAMES on the binding
4466          level where the name was bound to update the chain.  */
4467
4468       if (TREE_CODE (new_binding) == OVERLOAD && old)
4469         {
4470           tree *d;
4471           
4472           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4473                *d;
4474                d = &TREE_CHAIN (*d))
4475             if (*d == old
4476                 || (TREE_CODE (*d) == TREE_LIST
4477                     && TREE_VALUE (*d) == old))
4478               {
4479                 if (TREE_CODE (*d) == TREE_LIST)
4480                   /* Just replace the old binding with the new.  */
4481                   TREE_VALUE (*d) = new_binding;
4482                 else
4483                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4484                   *d = tree_cons (NULL_TREE, new_binding, 
4485                                   TREE_CHAIN (*d));
4486
4487                 /* And update the CPLUS_BINDING node.  */
4488                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4489                   = new_binding;
4490                 return decl;
4491               }
4492
4493           /* We should always find a previous binding in this case.  */
4494           my_friendly_abort (0);
4495         }
4496
4497       /* Install the new binding.  */
4498       push_local_binding (name, new_binding, flags);
4499     }
4500
4501   return decl;
4502 }
4503 \f
4504 /* Generate an implicit declaration for identifier FUNCTIONID
4505    as a function of type int ().  Print a warning if appropriate.  */
4506
4507 tree
4508 implicitly_declare (functionid)
4509      tree functionid;
4510 {
4511   register tree decl;
4512   int temp = allocation_temporary_p ();
4513
4514   push_obstacks_nochange ();
4515
4516   /* Save the decl permanently so we can warn if definition follows.
4517      In ANSI C, warn_implicit is usually false, so the saves little space.
4518      But in C++, it's usually true, hence the extra code.  */
4519   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4520     end_temporary_allocation ();
4521
4522   /* We used to reuse an old implicit decl here,
4523      but this loses with inline functions because it can clobber
4524      the saved decl chains.  */
4525   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4526
4527   DECL_EXTERNAL (decl) = 1;
4528   TREE_PUBLIC (decl) = 1;
4529
4530   /* ANSI standard says implicit declarations are in the innermost block.
4531      So we record the decl in the standard fashion.  */
4532   pushdecl (decl);
4533   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4534
4535   if (warn_implicit
4536       /* Only one warning per identifier.  */
4537       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4538     {
4539       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4540     }
4541
4542   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4543
4544   pop_obstacks ();
4545
4546   return decl;
4547 }
4548
4549 /* Return zero if the declaration NEWDECL is valid
4550    when the declaration OLDDECL (assumed to be for the same name)
4551    has already been seen.
4552    Otherwise return an error message format string with a %s
4553    where the identifier should go.  */
4554
4555 static const char *
4556 redeclaration_error_message (newdecl, olddecl)
4557      tree newdecl, olddecl;
4558 {
4559   if (TREE_CODE (newdecl) == TYPE_DECL)
4560     {
4561       /* Because C++ can put things into name space for free,
4562          constructs like "typedef struct foo { ... } foo"
4563          would look like an erroneous redeclaration.  */
4564       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4565         return 0;
4566       else
4567         return "redefinition of `%#D'";
4568     }
4569   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4570     {
4571       /* If this is a pure function, its olddecl will actually be
4572          the original initialization to `0' (which we force to call
4573          abort()).  Don't complain about redefinition in this case.  */
4574       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4575         return 0;
4576
4577       /* If both functions come from different namespaces, this is not
4578          a redeclaration - this is a conflict with a used function. */
4579       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4580           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4581         return "`%D' conflicts with used function";
4582
4583       /* We'll complain about linkage mismatches in
4584          warn_extern_redeclared_static.  */
4585
4586       /* Defining the same name twice is no good.  */
4587       if (DECL_INITIAL (olddecl) != NULL_TREE
4588           && DECL_INITIAL (newdecl) != NULL_TREE)
4589         {
4590           if (DECL_NAME (olddecl) == NULL_TREE)
4591             return "`%#D' not declared in class";
4592           else
4593             return "redefinition of `%#D'";
4594         }
4595       return 0;
4596     }
4597   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4598     {
4599       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4600            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4601            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4602           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4603               && TYPE_SIZE (TREE_TYPE (newdecl))
4604               && TYPE_SIZE (TREE_TYPE (olddecl))))
4605         return "redefinition of `%#D'";
4606       return 0;
4607     }
4608   else if (toplevel_bindings_p ())
4609     {
4610       /* Objects declared at top level:  */
4611       /* If at least one is a reference, it's ok.  */
4612       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4613         return 0;
4614       /* Reject two definitions.  */
4615       return "redefinition of `%#D'";
4616     }
4617   else
4618     {
4619       /* Objects declared with block scope:  */
4620       /* Reject two definitions, and reject a definition
4621          together with an external reference.  */
4622       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4623         return "redeclaration of `%#D'";
4624       return 0;
4625     }
4626 }
4627 \f
4628 /* Create a new label, named ID.  */
4629
4630 static tree
4631 make_label_decl (id, local_p)
4632      tree id;
4633      int local_p;
4634 {
4635   tree decl;
4636
4637   decl = build_decl (LABEL_DECL, id, void_type_node);
4638   if (expanding_p)
4639     /* Make sure every label has an rtx.  */
4640     label_rtx (decl);
4641
4642   DECL_CONTEXT (decl) = current_function_decl;
4643   DECL_MODE (decl) = VOIDmode;
4644   C_DECLARED_LABEL_FLAG (decl) = local_p;
4645
4646   /* Say where one reference is to the label, for the sake of the
4647      error if it is not defined.  */
4648   DECL_SOURCE_LINE (decl) = lineno;
4649   DECL_SOURCE_FILE (decl) = input_filename;
4650
4651   /* Record the fact that this identifier is bound to this label.  */
4652   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4653
4654   /* Record this label on the list of used labels so that we can check
4655      at the end of the function to see whether or not the label was
4656      actually defined.  */
4657   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4658       && (named_label_uses == NULL
4659           || named_label_uses->names_in_scope != current_binding_level->names
4660           || named_label_uses->label_decl != decl))
4661     {
4662       struct named_label_list *new_ent;
4663       new_ent
4664         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4665       new_ent->label_decl = decl;
4666       new_ent->names_in_scope = current_binding_level->names;
4667       new_ent->binding_level = current_binding_level;
4668       new_ent->lineno_o_goto = lineno;
4669       new_ent->filename_o_goto = input_filename;
4670       new_ent->next = named_label_uses;
4671       named_label_uses = new_ent;
4672     }
4673
4674   return decl;
4675 }
4676
4677 /* Look for a label named ID in the current function.  If one cannot
4678    be found, create one.  (We keep track of used, but undefined,
4679    labels, and complain about them at the end of a function.)  */
4680
4681 tree 
4682 lookup_label (id)
4683      tree id;
4684 {
4685   tree decl;
4686
4687   /* You can't use labels at global scope.  */
4688   if (current_function_decl == NULL_TREE)
4689     {
4690       error ("label `%s' referenced outside of any function",
4691              IDENTIFIER_POINTER (id));
4692       return NULL_TREE;
4693     }
4694   
4695   /* See if we've already got this label.  */
4696   decl = IDENTIFIER_LABEL_VALUE (id);
4697   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4698     return decl;
4699
4700   /* Record this label on the list of labels used in this function.
4701      We do this before calling make_label_decl so that we get the
4702      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4703   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4704                             named_labels);
4705   /* We need a new label.  */
4706   decl = make_label_decl (id, /*local_p=*/0);
4707   /* Now fill in the information we didn't have before.  */
4708   TREE_VALUE (named_labels) = decl;
4709
4710   return decl;
4711 }
4712
4713 /* Declare a local label named ID.  */
4714
4715 tree
4716 declare_local_label (id)
4717      tree id;
4718 {
4719   tree decl;
4720
4721   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4722      this scope we can restore the old value of
4723      IDENTIFIER_TYPE_VALUE.  */
4724   current_binding_level->shadowed_labels 
4725     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4726                  current_binding_level->shadowed_labels);
4727   /* Look for the label.  */
4728   decl = make_label_decl (id, /*local_p=*/1);
4729   /* Now fill in the information we didn't have before.  */
4730   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4731   
4732   return decl;
4733 }
4734
4735 /* Define a label, specifying the location in the source file.
4736    Return the LABEL_DECL node for the label, if the definition is valid.
4737    Otherwise return 0.  */
4738
4739 tree
4740 define_label (filename, line, name)
4741      char *filename;
4742      int line;
4743      tree name;
4744 {
4745   tree decl = lookup_label (name);
4746
4747   /* After labels, make any new cleanups go into their
4748      own new (temporary) binding contour.  */
4749   current_binding_level->more_cleanups_ok = 0;
4750
4751   if (name == get_identifier ("wchar_t"))
4752     cp_pedwarn ("label named wchar_t");
4753
4754   if (DECL_INITIAL (decl) != NULL_TREE)
4755     {
4756       cp_error ("duplicate label `%D'", decl);
4757       return 0;
4758     }
4759   else
4760     {
4761       struct named_label_list *uses, *prev;
4762       int identified = 0;
4763       int saw_eh = 0;
4764
4765       /* Mark label as having been defined.  */
4766       DECL_INITIAL (decl) = error_mark_node;
4767       /* Say where in the source.  */
4768       DECL_SOURCE_FILE (decl) = filename;
4769       DECL_SOURCE_LINE (decl) = line;
4770
4771       prev = NULL;
4772       uses = named_label_uses;
4773       while (uses != NULL)
4774         if (uses->label_decl == decl)
4775           {
4776             struct binding_level *b = current_binding_level;
4777             while (b)
4778               {
4779                 tree new_decls = b->names;
4780                 tree old_decls = (b == uses->binding_level)
4781                                   ? uses->names_in_scope : NULL_TREE;
4782                 while (new_decls != old_decls)
4783                   {
4784                     if (TREE_CODE (new_decls) == VAR_DECL
4785                         /* Don't complain about crossing initialization
4786                            of internal entities.  They can't be accessed,
4787                            and they should be cleaned up
4788                            by the time we get to the label.  */
4789                         && ! DECL_ARTIFICIAL (new_decls)
4790                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4791                              && pod_type_p (TREE_TYPE (new_decls))))
4792                       {
4793                         /* This is really only important if we're crossing
4794                            an initialization.  The POD stuff is just
4795                            pedantry; why should it matter if the class
4796                            contains a field of pointer to member type?  */
4797                         int problem = (DECL_INITIAL (new_decls)
4798                                        || (TYPE_NEEDS_CONSTRUCTING
4799                                            (TREE_TYPE (new_decls))));
4800
4801                         if (! identified)
4802                           {
4803                             if (problem)
4804                               {
4805                                 cp_error ("jump to label `%D'", decl);
4806                                 error_with_file_and_line
4807                                   (uses->filename_o_goto,
4808                                    uses->lineno_o_goto, "  from here");
4809                               }
4810                             else
4811                               {
4812                                 cp_pedwarn ("jump to label `%D'", decl);
4813                                 pedwarn_with_file_and_line
4814                                   (uses->filename_o_goto,
4815                                    uses->lineno_o_goto, "  from here");
4816                               }
4817                             identified = 1;
4818                           }
4819
4820                         if (problem)
4821                           cp_error_at ("  crosses initialization of `%#D'",
4822                                        new_decls);
4823                         else
4824                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4825                                          new_decls);
4826                       }
4827                     new_decls = TREE_CHAIN (new_decls);
4828                   }
4829                 if (b == uses->binding_level)
4830                   break;
4831                 if (b->eh_region && ! saw_eh)
4832                   {
4833                     if (! identified)
4834                       {
4835                         cp_error ("jump to label `%D'", decl);
4836                         error_with_file_and_line
4837                           (uses->filename_o_goto,
4838                            uses->lineno_o_goto, "  from here");
4839                         identified = 1;
4840                       }
4841                     error ("  enters exception handling block");
4842                     saw_eh = 1;
4843                   }
4844                 b = b->level_chain;
4845               }
4846
4847             if (prev != NULL)
4848               prev->next = uses->next;
4849             else
4850               named_label_uses = uses->next;
4851
4852             uses = uses->next;
4853           }
4854         else
4855           {
4856             prev = uses;
4857             uses = uses->next;
4858           }
4859       current_function_return_value = NULL_TREE;
4860       return decl;
4861     }
4862 }
4863
4864 struct cp_switch
4865 {
4866   struct binding_level *level;
4867   struct cp_switch *next;
4868 };
4869
4870 static struct cp_switch *switch_stack;
4871
4872 void
4873 push_switch ()
4874 {
4875   struct cp_switch *p
4876     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4877   p->level = current_binding_level;
4878   p->next = switch_stack;
4879   switch_stack = p;
4880 }
4881
4882 void
4883 pop_switch ()
4884 {
4885   switch_stack = switch_stack->next;
4886 }
4887
4888 /* Note that we've seen a definition of a case label, and complain if this
4889    is a bad place for one.  */
4890
4891 void
4892 define_case_label ()
4893 {
4894   tree cleanup = last_cleanup_this_contour ();
4895   struct binding_level *b = current_binding_level;
4896   int identified = 0;
4897
4898   if (! switch_stack)
4899     /* Don't crash; we'll complain in do_case.  */
4900     return;
4901   
4902   if (cleanup)
4903     {
4904       static int explained = 0;
4905       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4906       warning ("where case label appears here");
4907       if (!explained)
4908         {
4909           warning ("(enclose actions of previous case statements requiring");
4910           warning ("destructors in their own binding contours.)");
4911           explained = 1;
4912         }
4913     }
4914
4915   for (; b && b != switch_stack->level; b = b->level_chain)
4916     {
4917       tree new_decls = b->names;
4918       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4919         {
4920           if (TREE_CODE (new_decls) == VAR_DECL
4921               /* Don't complain about crossing initialization
4922                  of internal entities.  They can't be accessed,
4923                  and they should be cleaned up
4924                  by the time we get to the label.  */
4925               && ! DECL_ARTIFICIAL (new_decls)
4926               && ((DECL_INITIAL (new_decls) != NULL_TREE
4927                    && DECL_INITIAL (new_decls) != error_mark_node)
4928                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4929             {
4930               if (! identified)
4931                 error ("jump to case label");
4932               identified = 1;
4933               cp_error_at ("  crosses initialization of `%#D'",
4934                            new_decls);
4935             }
4936         }
4937     }
4938
4939   /* After labels, make any new cleanups go into their
4940      own new (temporary) binding contour.  */
4941
4942   current_binding_level->more_cleanups_ok = 0;
4943   current_function_return_value = NULL_TREE;
4944 }
4945 \f
4946 /* Return the list of declarations of the current level.
4947    Note that this list is in reverse order unless/until
4948    you nreverse it; and when you do nreverse it, you must
4949    store the result back using `storedecls' or you will lose.  */
4950
4951 tree
4952 getdecls ()
4953 {
4954   return current_binding_level->names;
4955 }
4956
4957 /* Return the list of type-tags (for structs, etc) of the current level.  */
4958
4959 tree
4960 gettags ()
4961 {
4962   return current_binding_level->tags;
4963 }
4964
4965 /* Store the list of declarations of the current level.
4966    This is done for the parameter declarations of a function being defined,
4967    after they are modified in the light of any missing parameters.  */
4968
4969 static void
4970 storedecls (decls)
4971      tree decls;
4972 {
4973   current_binding_level->names = decls;
4974 }
4975
4976 /* Similarly, store the list of tags of the current level.  */
4977
4978 void
4979 storetags (tags)
4980      tree tags;
4981 {
4982   current_binding_level->tags = tags;
4983 }
4984 \f
4985 /* Given NAME, an IDENTIFIER_NODE,
4986    return the structure (or union or enum) definition for that name.
4987    Searches binding levels from BINDING_LEVEL up to the global level.
4988    If THISLEVEL_ONLY is nonzero, searches only the specified context
4989    (but skips any tag-transparent contexts to find one that is
4990    meaningful for tags).
4991    FORM says which kind of type the caller wants;
4992    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4993    If the wrong kind of type is found, and it's not a template, an error is
4994    reported.  */
4995
4996 static tree
4997 lookup_tag (form, name, binding_level, thislevel_only)
4998      enum tree_code form;
4999      tree name;
5000      struct binding_level *binding_level;
5001      int thislevel_only;
5002 {
5003   register struct binding_level *level;
5004   /* Non-zero if, we should look past a pseudo-global level, even if
5005      THISLEVEL_ONLY.  */
5006   int allow_pseudo_global = 1;
5007
5008   for (level = binding_level; level; level = level->level_chain)
5009     {
5010       register tree tail;
5011       if (ANON_AGGRNAME_P (name))
5012         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5013           {
5014             /* There's no need for error checking here, because
5015                anon names are unique throughout the compilation.  */
5016             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5017               return TREE_VALUE (tail);
5018           }
5019       else if (level->namespace_p)
5020         /* Do namespace lookup. */
5021         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5022           {
5023             tree old = binding_for_name (name, tail);
5024
5025             /* If we just skipped past a pseudo global level, even
5026                though THISLEVEL_ONLY, and we find a template class
5027                declaration, then we use the _TYPE node for the
5028                template.  See the example below.  */
5029             if (thislevel_only && !allow_pseudo_global
5030                 && old && BINDING_VALUE (old) 
5031                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5032               old = TREE_TYPE (BINDING_VALUE (old));
5033             else 
5034               old = BINDING_TYPE (old);
5035
5036             /* If it has an original type, it is a typedef, and we
5037                should not return it.  */
5038             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5039               old = NULL_TREE;
5040             if (old && TREE_CODE (old) != form
5041                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5042               {
5043                 cp_error ("`%#D' redeclared as %C", old, form);
5044                 return NULL_TREE;
5045               }
5046             if (old)
5047               return old;
5048             if (thislevel_only || tail == global_namespace)
5049               return NULL_TREE;
5050           }
5051       else
5052         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5053           {
5054             if (TREE_PURPOSE (tail) == name)
5055               {
5056                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5057                 /* Should tighten this up; it'll probably permit
5058                    UNION_TYPE and a struct template, for example.  */
5059                 if (code != form
5060                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5061                   {
5062                     /* Definition isn't the kind we were looking for.  */
5063                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5064                               form);
5065                     return NULL_TREE;
5066                   }
5067                 return TREE_VALUE (tail);
5068               }
5069           }
5070       if (thislevel_only && ! level->tag_transparent)
5071         {
5072           if (level->pseudo_global && allow_pseudo_global)
5073             {
5074               /* We must deal with cases like this:
5075                  
5076                    template <class T> struct S;
5077                    template <class T> struct S {};
5078                    
5079                  When looking up `S', for the second declaration, we
5080                  would like to find the first declaration.  But, we
5081                  are in the pseudo-global level created for the
5082                  template parameters, rather than the (surrounding)
5083                  namespace level.  Thus, we keep going one more level,
5084                  even though THISLEVEL_ONLY is non-zero.  */
5085               allow_pseudo_global = 0;
5086               continue;
5087             }
5088           else
5089             return NULL_TREE;
5090         }
5091     }
5092   return NULL_TREE;
5093 }
5094
5095 #if 0
5096 void
5097 set_current_level_tags_transparency (tags_transparent)
5098      int tags_transparent;
5099 {
5100   current_binding_level->tag_transparent = tags_transparent;
5101 }
5102 #endif
5103
5104 /* Given a type, find the tag that was defined for it and return the tag name.
5105    Otherwise return 0.  However, the value can never be 0
5106    in the cases in which this is used.
5107
5108    C++: If NAME is non-zero, this is the new name to install.  This is
5109    done when replacing anonymous tags with real tag names.  */
5110
5111 static tree
5112 lookup_tag_reverse (type, name)
5113      tree type;
5114      tree name;
5115 {
5116   register struct binding_level *level;
5117
5118   for (level = current_binding_level; level; level = level->level_chain)
5119     {
5120       register tree tail;
5121       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5122         {
5123           if (TREE_VALUE (tail) == type)
5124             {
5125               if (name)
5126                 TREE_PURPOSE (tail) = name;
5127               return TREE_PURPOSE (tail);
5128             }
5129         }
5130     }
5131   return NULL_TREE;
5132 }
5133 \f
5134 /* Look up NAME in the NAMESPACE.  */
5135
5136 tree
5137 lookup_namespace_name (namespace, name)
5138      tree namespace, name;
5139 {
5140   tree val;
5141   tree template_id = NULL_TREE;
5142
5143   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5144
5145   if (TREE_CODE (name) == NAMESPACE_DECL)
5146     /* This happens for A::B<int> when B is a namespace. */
5147     return name;
5148   else if (TREE_CODE (name) == TEMPLATE_DECL)
5149     {
5150       /* This happens for A::B where B is a template, and there are no
5151          template arguments.  */
5152       cp_error ("invalid use of `%D'", name);
5153       return error_mark_node;
5154     }
5155
5156   namespace = ORIGINAL_NAMESPACE (namespace);
5157
5158   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5159     {
5160       template_id = name;
5161       name = TREE_OPERAND (name, 0);
5162       if (TREE_CODE (name) == OVERLOAD)
5163         name = DECL_NAME (OVL_CURRENT (name));
5164       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5165         name = DECL_NAME (name);
5166     }
5167
5168   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5169   
5170   val = make_node (CPLUS_BINDING);
5171   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5172     return error_mark_node;
5173
5174   if (BINDING_VALUE (val))
5175     {
5176       val = BINDING_VALUE (val);
5177
5178       if (template_id)
5179         {
5180           if (DECL_CLASS_TEMPLATE_P (val))
5181             val = lookup_template_class (val, 
5182                                          TREE_OPERAND (template_id, 1),
5183                                          /*in_decl=*/NULL_TREE,
5184                                          /*context=*/NULL_TREE,
5185                                          /*entering_scope=*/0);
5186           else if (DECL_FUNCTION_TEMPLATE_P (val)
5187                    || TREE_CODE (val) == OVERLOAD)
5188             val = lookup_template_function (val, 
5189                                             TREE_OPERAND (template_id, 1));
5190           else
5191             {
5192               cp_error ("`%D::%D' is not a template",
5193                         namespace, name);
5194               return error_mark_node;
5195             }
5196         }
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       return val;
5202     }
5203
5204   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5205   return error_mark_node;
5206 }
5207
5208 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5209
5210 static unsigned long
5211 typename_hash (k)
5212      hash_table_key k;
5213 {
5214   unsigned long hash;
5215   tree t;
5216
5217   t = (tree) k;
5218   hash = (((unsigned long) TYPE_CONTEXT (t))
5219           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5220
5221   return hash;
5222 }
5223
5224 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5225
5226 static boolean
5227 typename_compare (k1, k2)
5228      hash_table_key k1;
5229      hash_table_key k2;
5230 {
5231   tree t1;
5232   tree t2;
5233   tree d1;
5234   tree d2;
5235
5236   t1 = (tree) k1;
5237   t2 = (tree) k2;
5238   d1 = TYPE_NAME (t1);
5239   d2 = TYPE_NAME (t2);
5240   
5241   return (DECL_NAME (d1) == DECL_NAME (d2)
5242           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5243           && ((TREE_TYPE (t1) != NULL_TREE) 
5244               == (TREE_TYPE (t2) != NULL_TREE))
5245           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5246           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5247 }
5248
5249 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5250    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5251    is non-NULL, this type is being created by the implicit typename
5252    extension, and BASE_TYPE is a type named `t' in some base class of
5253    `T' which depends on template parameters.  
5254
5255    Returns the new TYPENAME_TYPE.  */
5256
5257 tree
5258 build_typename_type (context, name, fullname, base_type)
5259      tree context;
5260      tree name;
5261      tree fullname;
5262      tree base_type;
5263 {
5264   tree t;
5265   tree d;
5266   struct hash_entry* e;
5267
5268   static struct hash_table ht;
5269
5270   push_obstacks (&permanent_obstack, &permanent_obstack);
5271
5272   if (!ht.table)
5273     {
5274       static struct hash_table *h = &ht;
5275       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5276                             &typename_compare))
5277         fatal ("virtual memory exhausted");
5278       ggc_add_tree_hash_table_root (&h, 1);
5279     }
5280
5281   /* Build the TYPENAME_TYPE.  */
5282   t = make_lang_type (TYPENAME_TYPE);
5283   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5284   TYPENAME_TYPE_FULLNAME (t) = fullname;
5285   TREE_TYPE (t) = base_type;
5286
5287   /* Build the corresponding TYPE_DECL.  */
5288   d = build_decl (TYPE_DECL, name, t);
5289   TYPE_NAME (TREE_TYPE (d)) = d;
5290   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5291   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5292   DECL_ARTIFICIAL (d) = 1;
5293
5294   /* See if we already have this type.  */
5295   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5296   if (e)
5297     t = (tree) e->key;
5298   else
5299     /* Insert the type into the table.  */
5300     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5301
5302   pop_obstacks ();
5303
5304   return t;
5305 }
5306
5307 tree
5308 make_typename_type (context, name)
5309      tree context, name;
5310 {
5311   tree fullname;
5312
5313   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5314     {
5315       if (!(TYPE_LANG_SPECIFIC (name) 
5316             && (CLASSTYPE_IS_TEMPLATE (name) 
5317                 || CLASSTYPE_USE_TEMPLATE (name))))
5318         name = TYPE_IDENTIFIER (name);
5319       else
5320         /* Create a TEMPLATE_ID_EXPR for the type.  */
5321         name = build_nt (TEMPLATE_ID_EXPR,
5322                          CLASSTYPE_TI_TEMPLATE (name),
5323                          CLASSTYPE_TI_ARGS (name));
5324     }
5325   else if (TREE_CODE (name) == TYPE_DECL)
5326     name = DECL_NAME (name);
5327
5328   fullname = name;
5329
5330   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5331     {
5332       name = TREE_OPERAND (name, 0);
5333       if (TREE_CODE (name) == TEMPLATE_DECL)
5334         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5335     }
5336   if (TREE_CODE (name) != IDENTIFIER_NODE)
5337     my_friendly_abort (2000);
5338
5339   if (TREE_CODE (context) == NAMESPACE_DECL)
5340     {
5341       /* We can get here from typename_sub0 in the explicit_template_type
5342          expansion.  Just fail.  */
5343       cp_error ("no class template named `%#T' in `%#T'",
5344                 name, context);
5345       return error_mark_node;
5346     }
5347
5348   if (! uses_template_parms (context)
5349       || currently_open_class (context))
5350     {
5351       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5352         {
5353           tree tmpl = NULL_TREE;
5354           if (IS_AGGR_TYPE (context))
5355             tmpl = lookup_field (context, name, 0, 0);
5356           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5357             {
5358               cp_error ("no class template named `%#T' in `%#T'",
5359                         name, context);
5360               return error_mark_node;
5361             }
5362
5363           return lookup_template_class (tmpl, 
5364                                         TREE_OPERAND (fullname, 1),
5365                                         NULL_TREE, context, 
5366                                         /*entering_scope=*/0);
5367         }
5368       else
5369         {
5370           tree t;
5371           
5372           if (!IS_AGGR_TYPE (context))
5373             {
5374               cp_error ("no type named `%#T' in `%#T'", name, context);
5375               return error_mark_node;
5376             }
5377
5378           t = lookup_field (context, name, 0, 1);
5379           if (t)
5380             return TREE_TYPE (t);
5381         }
5382     }
5383
5384   /* If the CONTEXT is not a template type, then either the field is
5385      there now or its never going to be.  */
5386   if (!uses_template_parms (context))
5387     {
5388       cp_error ("no type named `%#T' in `%#T'", name, context);
5389       return error_mark_node;
5390     }
5391     
5392   
5393   return build_typename_type (context, name, fullname,  NULL_TREE);
5394 }
5395
5396 /* Select the right _DECL from multiple choices. */
5397
5398 static tree
5399 select_decl (binding, flags)
5400      tree binding;
5401      int flags;
5402 {
5403   tree val;
5404   val = BINDING_VALUE (binding);
5405   if (LOOKUP_NAMESPACES_ONLY (flags))
5406     {
5407       /* We are not interested in types. */
5408       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5409         return val;
5410       return NULL_TREE;
5411     }
5412   
5413   /* If we could have a type and
5414      we have nothing or we need a type and have none.  */
5415   if (BINDING_TYPE (binding)
5416       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5417                    && TREE_CODE (val) != TYPE_DECL)))
5418     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5419   /* Don't return non-types if we really prefer types. */
5420   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5421            && (TREE_CODE (val) != TEMPLATE_DECL
5422                || !DECL_CLASS_TEMPLATE_P (val)))
5423     val = NULL_TREE;
5424
5425   return val;
5426 }
5427
5428 /* Unscoped lookup of a global: iterate over current namespaces,
5429    considering using-directives.  If SPACESP is non-NULL, store a list
5430    of the namespaces we've considered in it.  */
5431
5432 tree
5433 unqualified_namespace_lookup (name, flags, spacesp)
5434      tree name;
5435      int flags;
5436      tree *spacesp;
5437 {
5438   tree b = make_node (CPLUS_BINDING);
5439   tree initial = current_decl_namespace();
5440   tree scope = initial;
5441   tree siter;
5442   struct binding_level *level;
5443   tree val = NULL_TREE;
5444
5445   if (spacesp)
5446     *spacesp = NULL_TREE;
5447
5448   for (; !val; scope = CP_DECL_CONTEXT (scope))
5449     {
5450       if (spacesp)
5451         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5452       val = binding_for_name (name, scope);
5453
5454       /* Initialize binding for this context. */
5455       BINDING_VALUE (b) = BINDING_VALUE (val);
5456       BINDING_TYPE (b) = BINDING_TYPE (val);
5457
5458       /* Add all _DECLs seen through local using-directives. */
5459       for (level = current_binding_level; 
5460            !level->namespace_p;
5461            level = level->level_chain)
5462         if (!lookup_using_namespace (name, b, level->using_directives,
5463                                      scope, flags, spacesp))
5464           /* Give up because of error. */
5465           return error_mark_node;
5466
5467       /* Add all _DECLs seen through global using-directives. */
5468       /* XXX local and global using lists should work equally. */
5469       siter = initial;
5470       while (1)
5471         {
5472           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5473                                        scope, flags, spacesp))
5474             /* Give up because of error. */
5475             return error_mark_node;
5476           if (siter == scope) break;
5477           siter = CP_DECL_CONTEXT (siter);
5478         }
5479
5480       val = select_decl (b, flags);
5481       if (scope == global_namespace)
5482         break;
5483     }
5484   return val;
5485 }
5486
5487 /* Combine prefer_type and namespaces_only into flags.  */
5488
5489 static int
5490 lookup_flags (prefer_type, namespaces_only)
5491   int prefer_type, namespaces_only;
5492 {
5493   if (namespaces_only)
5494     return LOOKUP_PREFER_NAMESPACES;
5495   if (prefer_type > 1)
5496     return LOOKUP_PREFER_TYPES;
5497   if (prefer_type > 0)
5498     return LOOKUP_PREFER_BOTH;
5499   return 0;
5500 }
5501
5502 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5503    ignore it or not.  Subroutine of lookup_name_real.  */
5504
5505 static tree
5506 qualify_lookup (val, flags)
5507      tree val;
5508      int flags;
5509 {
5510   if (val == NULL_TREE)
5511     return val;
5512   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5513     return val;
5514   if ((flags & LOOKUP_PREFER_TYPES)
5515       && (TREE_CODE (val) == TYPE_DECL
5516           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5517               && DECL_CLASS_TEMPLATE_P (val))))
5518     return val;
5519   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5520     return NULL_TREE;
5521   return val;
5522 }
5523
5524 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5525    that.  */
5526
5527 static void
5528 warn_about_implicit_typename_lookup (typename, binding)
5529      tree typename;
5530      tree binding;
5531 {
5532   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5533   tree name = DECL_NAME (typename);
5534
5535   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5536          && CLASSTYPE_TEMPLATE_INFO (subtype)
5537          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5538       && ! (TREE_CODE (binding) == TYPE_DECL
5539             && same_type_p (TREE_TYPE (binding), subtype)))
5540     {
5541       cp_warning ("lookup of `%D' finds `%#D'", 
5542                   name, binding);
5543       cp_warning ("  instead of `%D' from dependent base class",
5544                   typename);
5545       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5546                   constructor_name (current_class_type), name);
5547     }
5548 }
5549
5550 /* Look up NAME in the current binding level and its superiors in the
5551    namespace of variables, functions and typedefs.  Return a ..._DECL
5552    node of some kind representing its definition if there is only one
5553    such declaration, or return a TREE_LIST with all the overloaded
5554    definitions if there are many, or return 0 if it is undefined.
5555
5556    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5557    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5558    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5559    Otherwise we prefer non-TYPE_DECLs.  
5560
5561    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5562    using IDENTIFIER_CLASS_VALUE.  */
5563
5564 static tree
5565 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5566      tree name;
5567      int prefer_type, nonclass, namespaces_only;
5568 {
5569   tree t;
5570   tree val = NULL_TREE;
5571   int yylex = 0;
5572   tree from_obj = NULL_TREE;
5573   int flags;
5574   int val_is_implicit_typename = 0;
5575
5576   /* Hack: copy flag set by parser, if set. */
5577   if (only_namespace_names)
5578     namespaces_only = 1;
5579
5580   if (prefer_type == -2)
5581     {
5582       extern int looking_for_typename;
5583       tree type = NULL_TREE;
5584
5585       yylex = 1;
5586       prefer_type = looking_for_typename;
5587
5588       flags = lookup_flags (prefer_type, namespaces_only);
5589       /* If the next thing is '<', class templates are types. */
5590       if (looking_for_template)
5591         flags |= LOOKUP_TEMPLATES_EXPECTED;
5592
5593       /* std:: becomes :: for now.  */
5594       if (got_scope == std_node)
5595         got_scope = void_type_node;
5596
5597       if (got_scope)
5598         type = got_scope;
5599       else if (got_object != error_mark_node)
5600         type = got_object;
5601       
5602       if (type)
5603         {
5604           if (type == error_mark_node)
5605             return error_mark_node;
5606           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5607             type = TREE_TYPE (type);
5608
5609           if (TYPE_P (type))
5610             type = complete_type (type);
5611
5612           if (TREE_CODE (type) == VOID_TYPE)
5613             type = global_namespace;
5614           if (TREE_CODE (type) == NAMESPACE_DECL)
5615             {
5616               val = make_node (CPLUS_BINDING);
5617               flags |= LOOKUP_COMPLAIN;
5618               if (!qualified_lookup_using_namespace (name, type, val, flags))
5619                 return NULL_TREE;
5620               val = select_decl (val, flags);
5621             }
5622           else if (! IS_AGGR_TYPE (type)
5623                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5624                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5625                    || TREE_CODE (type) == TYPENAME_TYPE)
5626             /* Someone else will give an error about this if needed.  */
5627             val = NULL_TREE;
5628           else if (type == current_class_type)
5629             val = IDENTIFIER_CLASS_VALUE (name);
5630           else
5631             val = lookup_member (type, name, 0, prefer_type);
5632         }
5633       else
5634         val = NULL_TREE;
5635
5636       if (got_scope)
5637         goto done;
5638       else if (got_object && val)
5639         from_obj = val;
5640     }
5641   else
5642     {
5643       flags = lookup_flags (prefer_type, namespaces_only);
5644       /* If we're not parsing, we need to complain. */
5645       flags |= LOOKUP_COMPLAIN;
5646     }
5647
5648   /* First, look in non-namespace scopes.  */
5649
5650   if (current_class_type == NULL_TREE)
5651     nonclass = 1;
5652
5653   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5654     {
5655       tree binding;
5656
5657       if (!LOCAL_BINDING_P (t) && nonclass)
5658         /* We're not looking for class-scoped bindings, so keep going.  */
5659         continue;
5660       
5661       /* If this is the kind of thing we're looking for, we're done.  */
5662       if (qualify_lookup (BINDING_VALUE (t), flags))
5663         binding = BINDING_VALUE (t);
5664       else if ((flags & LOOKUP_PREFER_TYPES) 
5665                && qualify_lookup (BINDING_TYPE (t), flags))
5666         binding = BINDING_TYPE (t);
5667       else
5668         binding = NULL_TREE;
5669
5670       if (binding
5671           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5672         {
5673           if (val_is_implicit_typename && !yylex)
5674             warn_about_implicit_typename_lookup (val, binding);
5675           val = binding;
5676           val_is_implicit_typename 
5677             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5678           if (!val_is_implicit_typename)
5679             break;
5680         }
5681     }
5682
5683   /* Now lookup in namespace scopes.  */
5684   if (!val || val_is_implicit_typename)
5685     {
5686       t = unqualified_namespace_lookup (name, flags, 0);
5687       if (t)
5688         {
5689           if (val_is_implicit_typename && !yylex)
5690             warn_about_implicit_typename_lookup (val, t);
5691           val = t;
5692         }
5693     }
5694
5695  done:
5696   if (val)
5697     {
5698       /* This should only warn about types used in qualified-ids.  */
5699       if (from_obj && from_obj != val)
5700         {
5701           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5702               && TREE_CODE (val) == TYPE_DECL
5703               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5704             {
5705               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5706                           name, got_object, TREE_TYPE (from_obj));
5707               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5708                           TREE_TYPE (val));
5709             }
5710
5711           /* We don't change val to from_obj if got_object depends on
5712              template parms because that breaks implicit typename for
5713              destructor calls.  */
5714           if (! uses_template_parms (got_object))
5715             val = from_obj;
5716         }
5717
5718       /* If we have a single function from a using decl, pull it out.  */
5719       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5720         val = OVL_FUNCTION (val);
5721     }
5722   else if (from_obj)
5723     val = from_obj;
5724
5725   return val;
5726 }
5727
5728 tree
5729 lookup_name_nonclass (name)
5730      tree name;
5731 {
5732   return lookup_name_real (name, 0, 1, 0);
5733 }
5734
5735 tree
5736 lookup_function_nonclass (name, args)
5737      tree name;
5738      tree args;
5739 {
5740   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5741 }
5742
5743 tree
5744 lookup_name_namespace_only (name)
5745      tree name;
5746 {
5747   /* type-or-namespace, nonclass, namespace_only */
5748   return lookup_name_real (name, 1, 1, 1);
5749 }
5750
5751 tree
5752 lookup_name (name, prefer_type)
5753      tree name;
5754      int prefer_type;
5755 {
5756   return lookup_name_real (name, prefer_type, 0, 0);
5757 }
5758
5759 /* Similar to `lookup_name' but look only in the innermost non-class
5760    binding level.  */
5761
5762 tree
5763 lookup_name_current_level (name)
5764      tree name;
5765 {
5766   struct binding_level *b;
5767   tree t = NULL_TREE;
5768
5769   b = current_binding_level;
5770   while (b->parm_flag == 2)
5771     b = b->level_chain;
5772
5773   if (b->namespace_p)
5774     {
5775       t = IDENTIFIER_NAMESPACE_VALUE (name);
5776
5777       /* extern "C" function() */
5778       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5779         t = TREE_VALUE (t);
5780     }
5781   else if (IDENTIFIER_BINDING (name) 
5782            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5783     {
5784       while (1)
5785         {
5786           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5787             return IDENTIFIER_VALUE (name);
5788           
5789           if (b->keep == 2)
5790             b = b->level_chain;
5791           else
5792             break;
5793         }
5794     }
5795
5796   return t;
5797 }
5798
5799 /* Like lookup_name_current_level, but for types.  */
5800
5801 tree
5802 lookup_type_current_level (name)
5803      tree name;
5804 {
5805   register tree t = NULL_TREE;
5806
5807   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5808
5809   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5810       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5811     {
5812       struct binding_level *b = current_binding_level;
5813       while (1)
5814         {
5815           if (purpose_member (name, b->type_shadowed))
5816             return REAL_IDENTIFIER_TYPE_VALUE (name);
5817           if (b->keep == 2)
5818             b = b->level_chain;
5819           else
5820             break;
5821         }
5822     }
5823
5824   return t;
5825 }
5826
5827 void
5828 begin_only_namespace_names ()
5829 {
5830   only_namespace_names = 1;
5831 }
5832
5833 void
5834 end_only_namespace_names ()
5835 {
5836   only_namespace_names = 0;
5837 }
5838 \f
5839 /* Arrange for the user to get a source line number, even when the
5840    compiler is going down in flames, so that she at least has a
5841    chance of working around problems in the compiler.  We used to
5842    call error(), but that let the segmentation fault continue
5843    through; now, it's much more passive by asking them to send the
5844    maintainers mail about the problem.  */
5845
5846 static void
5847 signal_catch (sig)
5848      int sig ATTRIBUTE_UNUSED;
5849 {
5850   signal (SIGSEGV, SIG_DFL);
5851 #ifdef SIGIOT
5852   signal (SIGIOT, SIG_DFL);
5853 #endif
5854 #ifdef SIGILL
5855   signal (SIGILL, SIG_DFL);
5856 #endif
5857 #ifdef SIGABRT
5858   signal (SIGABRT, SIG_DFL);
5859 #endif
5860 #ifdef SIGBUS
5861   signal (SIGBUS, SIG_DFL);
5862 #endif
5863   my_friendly_abort (0);
5864 }
5865
5866 /* Push the declarations of builtin types into the namespace.
5867    RID_INDEX, if < RID_MAX is the index of the builtin type
5868    in the array RID_POINTERS.  NAME is the name used when looking
5869    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5870
5871 static void
5872 record_builtin_type (rid_index, name, type)
5873      enum rid rid_index;
5874      const char *name;
5875      tree type;
5876 {
5877   tree rname = NULL_TREE, tname = NULL_TREE;
5878   tree tdecl = NULL_TREE;
5879
5880   if ((int) rid_index < (int) RID_MAX)
5881     rname = ridpointers[(int) rid_index];
5882   if (name)
5883     tname = get_identifier (name);
5884
5885   TYPE_BUILT_IN (type) = 1;
5886   
5887   if (tname)
5888     {
5889       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5890       set_identifier_type_value (tname, NULL_TREE);
5891       if ((int) rid_index < (int) RID_MAX)
5892         /* Built-in types live in the global namespace. */
5893         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5894     }
5895   if (rname != NULL_TREE)
5896     {
5897       if (tname != NULL_TREE)
5898         {
5899           set_identifier_type_value (rname, NULL_TREE);
5900           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5901         }
5902       else
5903         {
5904           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5905           set_identifier_type_value (rname, NULL_TREE);
5906         }
5907     }
5908 }
5909
5910 /* Record one of the standard Java types.
5911  * Declare it as having the given NAME.
5912  * If SIZE > 0, it is the size of one of the integral types;
5913  * otherwise it is the negative of the size of one of the other types.  */
5914
5915 static tree
5916 record_builtin_java_type (name, size)
5917      const char *name;
5918      int size;
5919 {
5920   tree type, decl;
5921   if (size > 0)
5922     type = make_signed_type (size);
5923   else if (size > -32)
5924     { /* "__java_char" or ""__java_boolean". */
5925       type = make_unsigned_type (-size);
5926       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5927     }
5928   else
5929     { /* "__java_float" or ""__java_double". */
5930       type = make_node (REAL_TYPE);
5931       TYPE_PRECISION (type) = - size;
5932       layout_type (type);
5933     }
5934   record_builtin_type (RID_MAX, name, type);
5935   decl = TYPE_NAME (type);
5936
5937   /* Suppress generate debug symbol entries for these types,
5938      since for normal C++ they are just clutter.
5939      However, push_lang_context undoes this if extern "Java" is seen. */
5940   DECL_IGNORED_P (decl) = 1;
5941
5942   TYPE_FOR_JAVA (type) = 1;
5943   return type;
5944 }
5945
5946 /* Push a type into the namespace so that the back-ends ignore it. */
5947
5948 static void
5949 record_unknown_type (type, name)
5950      tree type;
5951      const char *name;
5952 {
5953   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5954   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5955   DECL_IGNORED_P (decl) = 1;
5956   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5957   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5958   TYPE_ALIGN (type) = 1;
5959   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5960
5961
5962 /* Push overloaded decl, in global scope, with one argument so it
5963    can be used as a callback from define_function.  */
5964
5965 static void
5966 push_overloaded_decl_1 (x)
5967      tree x;
5968 {
5969   push_overloaded_decl (x, PUSH_GLOBAL);
5970 }
5971
5972 #ifdef __GNUC__
5973 __inline
5974 #endif
5975 tree
5976 auto_function (name, type)
5977      tree name, type;
5978 {
5979   return define_function
5980     (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5981      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5982                                               0)));
5983 }
5984
5985 /* Create the predefined scalar types of C,
5986    and some nodes representing standard constants (0, 1, (void *)0).
5987    Initialize the global binding level.
5988    Make definitions for built-in primitive functions.  */
5989
5990 void
5991 init_decl_processing ()
5992 {
5993   tree fields[20];
5994   int wchar_type_size;
5995   tree array_domain_type;
5996
5997   /* Have to make these distinct before we try using them.  */
5998   lang_name_cplusplus = get_identifier ("C++");
5999   lang_name_c = get_identifier ("C");
6000   lang_name_java = get_identifier ("Java");
6001
6002   /* Let the back-end now how to save and restore language-specific
6003      per-function globals.  */
6004   init_lang_status = &push_cp_function_context;
6005   free_lang_status = &pop_cp_function_context;
6006   mark_lang_status = &mark_cp_function_context;
6007
6008   cp_parse_init ();
6009   init_decl2 ();
6010   init_pt ();
6011
6012   /* Create the global variables.  */
6013   push_to_top_level ();
6014
6015   /* Enter the global namespace. */
6016   my_friendly_assert (global_namespace == NULL_TREE, 375);
6017   push_namespace (get_identifier ("::"));
6018   global_namespace = current_namespace;
6019   current_lang_name = NULL_TREE;
6020
6021   if (flag_strict_prototype == 2)
6022     flag_strict_prototype = pedantic;
6023   if (! flag_permissive && ! pedantic)
6024     flag_pedantic_errors = 1;
6025
6026   strict_prototypes_lang_c = flag_strict_prototype;
6027
6028   /* Initially, C.  */
6029   current_lang_name = lang_name_c;
6030
6031   current_function_decl = NULL_TREE;
6032   current_binding_level = NULL_BINDING_LEVEL;
6033   free_binding_level = NULL_BINDING_LEVEL;
6034
6035   /* Because most segmentation signals can be traced back into user
6036      code, catch them and at least give the user a chance of working
6037      around compiler bugs.  */
6038   signal (SIGSEGV, signal_catch);
6039
6040   /* We will also catch aborts in the back-end through signal_catch and
6041      give the user a chance to see where the error might be, and to defeat
6042      aborts in the back-end when there have been errors previously in their
6043      code.  */
6044 #ifdef SIGIOT
6045   signal (SIGIOT, signal_catch);
6046 #endif
6047 #ifdef SIGILL
6048   signal (SIGILL, signal_catch);
6049 #endif
6050 #ifdef SIGABRT
6051   signal (SIGABRT, signal_catch);
6052 #endif
6053 #ifdef SIGBUS
6054   signal (SIGBUS, signal_catch);
6055 #endif
6056
6057   gcc_obstack_init (&decl_obstack);
6058
6059   build_common_tree_nodes (flag_signed_char);
6060
6061   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6062   TREE_TYPE (error_mark_list) = error_mark_node;
6063
6064   /* Make the binding_level structure for global names.  */
6065   pushlevel (0);
6066   global_binding_level = current_binding_level;
6067   /* The global level is the namespace level of ::.  */
6068   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6069   declare_namespace_level ();
6070
6071   this_identifier = get_identifier (THIS_NAME);
6072   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6073   ctor_identifier = get_identifier (CTOR_NAME);
6074   dtor_identifier = get_identifier (DTOR_NAME);
6075   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6076   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6077   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6078   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6079   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6080
6081   /* Define `int' and `char' first so that dbx will output them first.  */
6082   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6083   record_builtin_type (RID_CHAR, "char", char_type_node);
6084
6085   /* `signed' is the same as `int' */
6086   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6087   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6088   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6089   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6090   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6091   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6092   record_builtin_type (RID_MAX, "long long unsigned int",
6093                        long_long_unsigned_type_node);
6094   record_builtin_type (RID_MAX, "long long unsigned",
6095                        long_long_unsigned_type_node);
6096   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6097   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6098   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6099
6100   ptrdiff_type_node
6101     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6102
6103   /* Define both `signed char' and `unsigned char'.  */
6104   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6105   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6106
6107   /* `unsigned long' is the standard type for sizeof.
6108      Note that stddef.h uses `unsigned long',
6109      and this must agree, even if long and int are the same size.  */
6110   set_sizetype
6111     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6112
6113   /* Create the widest literal types. */
6114   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6115   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6116                         widest_integer_literal_type_node));
6117
6118   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6119   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6120                         widest_unsigned_literal_type_node));
6121
6122   /* These are types that type_for_size and type_for_mode use.  */
6123   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6124   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6125   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6126   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6127 #if HOST_BITS_PER_WIDE_INT >= 64
6128   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6129 #endif
6130   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6131   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6132   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6133   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6134 #if HOST_BITS_PER_WIDE_INT >= 64
6135   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6136 #endif
6137
6138   build_common_tree_nodes_2 (flag_short_double);
6139
6140   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6141   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6142   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6143   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6144   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6145   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6146   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6147   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6148
6149   integer_two_node = build_int_2 (2, 0);
6150   TREE_TYPE (integer_two_node) = integer_type_node;
6151   integer_three_node = build_int_2 (3, 0);
6152   TREE_TYPE (integer_three_node) = integer_type_node;
6153
6154   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6155   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6156   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6157   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6158   TYPE_PRECISION (boolean_type_node) = 1;
6159   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6160   boolean_false_node = build_int_2 (0, 0);
6161   TREE_TYPE (boolean_false_node) = boolean_type_node;
6162   boolean_true_node = build_int_2 (1, 0);
6163   TREE_TYPE (boolean_true_node) = boolean_type_node;
6164
6165   signed_size_zero_node = build_int_2 (0, 0);  record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6166   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6167   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6168
6169   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6170                         complex_integer_type_node));
6171   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6172                         complex_float_type_node));
6173   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6174                         complex_double_type_node));
6175   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6176                         complex_long_double_type_node));
6177
6178   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6179
6180   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6181   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6182   TREE_PARMLIST (void_list_node) = 1;
6183
6184   /* Used for expressions that do nothing, but are not errors.  */
6185   void_zero_node = build_int_2 (0, 0);
6186   TREE_TYPE (void_zero_node) = void_type_node;
6187
6188   string_type_node = build_pointer_type (char_type_node);
6189   const_string_type_node
6190     = build_pointer_type (build_qualified_type (char_type_node, 
6191                                                 TYPE_QUAL_CONST));
6192   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6193 #if 0
6194   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6195 #endif
6196
6197   /* Make a type to be the domain of a few array types
6198      whose domains don't really matter.
6199      200 is small enough that it always fits in size_t
6200      and large enough that it can hold most function names for the
6201      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6202   array_domain_type = build_index_type (build_int_2 (200, 0));
6203
6204   /* Make a type for arrays of characters.
6205      With luck nothing will ever really depend on the length of this
6206      array type.  */
6207   char_array_type_node
6208     = build_array_type (char_type_node, array_domain_type);
6209   /* Likewise for arrays of ints.  */
6210   int_array_type_node
6211     = build_array_type (integer_type_node, array_domain_type);
6212
6213   /* This is just some anonymous class type.  Nobody should ever
6214      need to look inside this envelope.  */
6215   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6216
6217   if (flag_huge_objects)
6218     delta_type_node = long_integer_type_node;
6219   else
6220     delta_type_node = short_integer_type_node;
6221
6222   default_function_type
6223     = build_function_type (integer_type_node, NULL_TREE);
6224
6225   ptr_type_node = build_pointer_type (void_type_node);
6226   const_ptr_type_node
6227     = build_pointer_type (build_qualified_type (void_type_node,
6228                                                 TYPE_QUAL_CONST));
6229   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6230
6231   void_ftype_ptr
6232     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6233
6234   /* C++ extensions */
6235
6236   unknown_type_node = make_node (UNKNOWN_TYPE);
6237   record_unknown_type (unknown_type_node, "unknown type");
6238
6239   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6240   TREE_TYPE (unknown_type_node) = unknown_type_node;
6241
6242   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6243
6244   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6245      result.  */
6246   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6247   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6248
6249   /* This is special for C++ so functions can be overloaded.  */
6250   wchar_type_node
6251     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
6252   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6253   signed_wchar_type_node = make_signed_type (wchar_type_size);
6254   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6255   wchar_type_node
6256     = TREE_UNSIGNED (wchar_type_node)
6257       ? unsigned_wchar_type_node
6258       : signed_wchar_type_node;
6259   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6260
6261   /* Artificial declaration of wchar_t -- can be bashed */
6262   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6263                                 wchar_type_node);
6264   pushdecl (wchar_decl_node);
6265
6266   /* This is for wide string constants.  */
6267   wchar_array_type_node
6268     = build_array_type (wchar_type_node, array_domain_type);
6269
6270   if (flag_vtable_thunks)
6271     {
6272       /* Make sure we get a unique function type, so we can give
6273          its pointer type a name.  (This wins for gdb.) */
6274       tree vfunc_type = make_node (FUNCTION_TYPE);
6275       TREE_TYPE (vfunc_type) = integer_type_node;
6276       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6277       layout_type (vfunc_type);
6278
6279       vtable_entry_type = build_pointer_type (vfunc_type);
6280     }
6281   else
6282     {
6283       vtable_entry_type = make_lang_type (RECORD_TYPE);
6284       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6285                                    delta_type_node);
6286       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6287                                    delta_type_node);
6288       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6289                                    ptr_type_node);
6290       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6291                            double_type_node);
6292
6293       /* Make this part of an invisible union.  */
6294       fields[3] = copy_node (fields[2]);
6295       TREE_TYPE (fields[3]) = delta_type_node;
6296       DECL_NAME (fields[3]) = delta2_identifier;
6297       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6298       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6299       TREE_UNSIGNED (fields[3]) = 0;
6300       TREE_CHAIN (fields[2]) = fields[3];
6301       vtable_entry_type = build_qualified_type (vtable_entry_type,
6302                                                 TYPE_QUAL_CONST);
6303     }
6304   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6305
6306   vtbl_type_node
6307     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6308   layout_type (vtbl_type_node);
6309   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6310   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6311   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6312   layout_type (vtbl_ptr_type_node);
6313   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6314
6315   std_node = build_decl (NAMESPACE_DECL, 
6316                          get_identifier (flag_honor_std ? "fake std":"std"),
6317                          void_type_node);
6318   pushdecl (std_node);
6319
6320   global_type_node = make_node (LANG_TYPE);
6321   record_unknown_type (global_type_node, "global type");
6322
6323   /* Now, C++.  */
6324   current_lang_name = lang_name_cplusplus;
6325
6326   {
6327     tree bad_alloc_type_node, newtype, deltype;
6328     if (flag_honor_std)
6329       push_namespace (get_identifier ("std"));
6330     bad_alloc_type_node = xref_tag
6331       (class_type_node, get_identifier ("bad_alloc"), 1);
6332     if (flag_honor_std)
6333       pop_namespace ();
6334     newtype = build_exception_variant
6335       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6336     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6337     auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6338     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6339     global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6340                                           deltype);
6341     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6342   }
6343
6344   abort_fndecl
6345     = define_function ("__pure_virtual", void_ftype, 0, 0);
6346
6347   /* Perform other language dependent initializations.  */
6348   init_class_processing ();
6349   init_init_processing ();
6350   init_search_processing ();
6351   if (flag_rtti)
6352     init_rtti_processing ();
6353
6354   if (flag_exceptions)
6355     init_exception_processing ();
6356   if (flag_no_inline)
6357     {
6358       flag_inline_functions = 0;
6359     }
6360
6361   if (! supports_one_only ())
6362     flag_weak = 0;
6363
6364   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6365   declare_function_name ();
6366
6367   /* Prepare to check format strings against argument lists.  */
6368   init_function_format_info ();
6369
6370   /* Show we use EH for cleanups.  */
6371   using_eh_for_cleanups ();
6372
6373   print_error_function = lang_print_error_function;
6374   lang_get_alias_set = &c_get_alias_set;
6375   valid_lang_attribute = cp_valid_lang_attribute;
6376
6377   /* Maintain consistency.  Perhaps we should just complain if they
6378      say -fwritable-strings?  */
6379   if (flag_writable_strings)
6380     flag_const_strings = 0;
6381
6382   /* Add GC roots for all of our global variables.  */
6383   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6384   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6385   ggc_add_tree_root (&integer_three_node, 1);
6386   ggc_add_tree_root (&integer_two_node, 1);
6387   ggc_add_tree_root (&signed_size_zero_node, 1);
6388   ggc_add_tree_root (&size_one_node, 1);
6389   ggc_add_tree_root (&size_zero_node, 1);
6390   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6391                 mark_binding_level);
6392   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6393   ggc_add_tree_root (&static_ctors, 1);
6394   ggc_add_tree_root (&static_dtors, 1);
6395   ggc_add_tree_root (&lastiddecl, 1);
6396
6397   ggc_add_tree_root (&enum_next_value, 1);
6398   ggc_add_tree_root (&last_function_parm_tags, 1);
6399   ggc_add_tree_root (&current_function_return_value, 1);
6400   ggc_add_tree_root (&current_function_parms, 1);
6401   ggc_add_tree_root (&current_function_parm_tags, 1);
6402   ggc_add_tree_root (&last_function_parms, 1);
6403   ggc_add_tree_root (&error_mark_list, 1);
6404
6405   ggc_add_tree_root (&global_namespace, 1);
6406   ggc_add_tree_root (&global_type_node, 1);
6407   ggc_add_tree_root (&anonymous_namespace_name, 1);
6408
6409   ggc_add_tree_root (&got_object, 1);
6410   ggc_add_tree_root (&got_scope, 1);
6411
6412   ggc_add_tree_root (&current_lang_name, 1);
6413   ggc_add_tree_root (&static_aggregates, 1);
6414 }
6415
6416 /* Function to print any language-specific context for an error message.  */
6417
6418 static void
6419 lang_print_error_function (file)
6420      const char *file;
6421 {
6422   default_print_error_function (file);
6423   maybe_print_template_context ();
6424 }
6425
6426 /* Make a definition for a builtin function named NAME and whose data type
6427    is TYPE.  TYPE should be a function type with argument types.
6428
6429    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6430    the name to be called if we can't opencode the function.  */
6431
6432 tree
6433 define_function (name, type, pfn, library_name)
6434      const char *name;
6435      tree type;
6436      void (*pfn) PROTO((tree));
6437      const char *library_name;
6438 {
6439   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6440   DECL_EXTERNAL (decl) = 1;
6441   TREE_PUBLIC (decl) = 1;
6442   DECL_ARTIFICIAL (decl) = 1;
6443
6444   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6445   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6446
6447   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6448      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6449      function in the namespace.  */
6450   if (pfn) (*pfn) (decl);
6451   if (library_name)
6452     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6453   make_function_rtl (decl);
6454   return decl;
6455 }
6456
6457
6458 /* Wrapper around define_function, for the benefit of 
6459    c_common_nodes_and_builtins.
6460    FUNCTION_CODE tells later passes how to compile calls to this function.
6461    See tree.h for its possible values.  */
6462
6463 tree
6464 builtin_function (name, type, code, libname)
6465      const char *name;
6466      tree type;
6467      enum built_in_function code;
6468      const char *libname;
6469 {
6470   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6471                                libname);
6472   if (code != NOT_BUILT_IN)
6473     {
6474       DECL_BUILT_IN (decl) = 1;
6475       DECL_FUNCTION_CODE (decl) = code;
6476     }
6477   return decl;
6478 }
6479 \f
6480 /* When we call finish_struct for an anonymous union, we create
6481    default copy constructors and such.  But, an anonymous union
6482    shouldn't have such things; this function undoes the damage to the
6483    anonymous union type T.
6484
6485    (The reason that we create the synthesized methods is that we don't
6486    distinguish `union { int i; }' from `typedef union { int i; } U'.
6487    The first is an anonymous union; the second is just an ordinary
6488    union type.)  */
6489
6490 void
6491 fixup_anonymous_aggr (t)
6492      tree t;
6493 {
6494   tree *q;
6495
6496   /* Wipe out memory of synthesized methods */
6497   TYPE_HAS_CONSTRUCTOR (t) = 0;
6498   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6499   TYPE_HAS_INIT_REF (t) = 0;
6500   TYPE_HAS_CONST_INIT_REF (t) = 0;
6501   TYPE_HAS_ASSIGN_REF (t) = 0;
6502   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6503
6504   /* Splice the implicitly generated functions out of the TYPE_METHODS
6505      list.  */
6506   q = &TYPE_METHODS (t);
6507   while (*q)
6508     {
6509       if (DECL_ARTIFICIAL (*q))
6510         *q = TREE_CHAIN (*q);
6511       else
6512         q = &TREE_CHAIN (*q);
6513     }
6514
6515   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6516      function members.  */
6517   if (TYPE_METHODS (t))
6518     error ("an anonymous union cannot have function members");
6519 }
6520
6521 /* Make sure that a declaration with no declarator is well-formed, i.e.
6522    just defines a tagged type or anonymous union.
6523
6524    Returns the type defined, if any.  */
6525
6526 tree
6527 check_tag_decl (declspecs)
6528      tree declspecs;
6529 {
6530   int found_type = 0;
6531   tree ob_modifier = NULL_TREE;
6532   register tree link;
6533   register tree t = NULL_TREE;
6534
6535   for (link = declspecs; link; link = TREE_CHAIN (link))
6536     {
6537       register tree value = TREE_VALUE (link);
6538
6539       if (TYPE_P (value))
6540         {
6541           ++found_type;
6542
6543           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6544             {
6545               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6546               t = value;
6547             }
6548         }
6549       else if (value == ridpointers[(int) RID_FRIEND])
6550         {
6551           if (current_class_type == NULL_TREE
6552               || current_scope () != current_class_type)
6553             ob_modifier = value;
6554         }
6555       else if (value == ridpointers[(int) RID_STATIC]
6556                || value == ridpointers[(int) RID_EXTERN]
6557                || value == ridpointers[(int) RID_AUTO]
6558                || value == ridpointers[(int) RID_REGISTER]
6559                || value == ridpointers[(int) RID_INLINE]
6560                || value == ridpointers[(int) RID_VIRTUAL]
6561                || value == ridpointers[(int) RID_CONST]
6562                || value == ridpointers[(int) RID_VOLATILE]
6563                || value == ridpointers[(int) RID_EXPLICIT])
6564         ob_modifier = value;
6565     }
6566
6567   if (found_type > 1)
6568     error ("multiple types in one declaration");
6569
6570   /* Inside a class, we might be in a friend or access declaration.
6571      Until we have a good way of detecting the latter, don't warn.  */
6572   if (t == NULL_TREE && ! current_class_type)
6573     pedwarn ("declaration does not declare anything");
6574
6575   /* Check for an anonymous union.  We're careful
6576      accessing TYPE_IDENTIFIER because some built-in types, like
6577      pointer-to-member types, do not have TYPE_NAME.  */
6578   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6579            && TYPE_NAME (t)
6580            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6581     {
6582       /* Anonymous unions are objects, so they can have specifiers.  */;
6583       SET_ANON_AGGR_TYPE_P (t);
6584
6585       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6586         pedwarn ("ISO C++ prohibits anonymous structs");
6587     }
6588
6589   else if (ob_modifier)
6590     {
6591       if (ob_modifier == ridpointers[(int) RID_INLINE]
6592           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6593         cp_error ("`%D' can only be specified for functions", ob_modifier);
6594       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6595         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6596       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6597         cp_error ("`%D' can only be specified for constructors",
6598                   ob_modifier);
6599       else
6600         cp_error ("`%D' can only be specified for objects and functions",
6601                   ob_modifier);
6602     }
6603
6604   return t;
6605 }
6606
6607 /* Called when a declaration is seen that contains no names to declare.
6608    If its type is a reference to a structure, union or enum inherited
6609    from a containing scope, shadow that tag name for the current scope
6610    with a forward reference.
6611    If its type defines a new named structure or union
6612    or defines an enum, it is valid but we need not do anything here.
6613    Otherwise, it is an error.
6614
6615    C++: may have to grok the declspecs to learn about static,
6616    complain for anonymous unions.  */
6617
6618 void
6619 shadow_tag (declspecs)
6620      tree declspecs;
6621 {
6622   tree t = check_tag_decl (declspecs);
6623
6624   if (t)
6625     maybe_process_partial_specialization (t);
6626
6627   /* This is where the variables in an anonymous union are
6628      declared.  An anonymous union declaration looks like:
6629      union { ... } ;
6630      because there is no declarator after the union, the parser
6631      sends that declaration here.  */
6632   if (t && ANON_AGGR_TYPE_P (t))
6633     {
6634       fixup_anonymous_aggr (t);
6635
6636       if (TYPE_FIELDS (t))
6637         {
6638           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6639                                       NULL_TREE);
6640           finish_anon_union (decl);
6641         }
6642     }
6643 }
6644 \f
6645 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6646
6647 tree
6648 groktypename (typename)
6649      tree typename;
6650 {
6651   if (TREE_CODE (typename) != TREE_LIST)
6652     return typename;
6653   return grokdeclarator (TREE_VALUE (typename),
6654                          TREE_PURPOSE (typename),
6655                          TYPENAME, 0, NULL_TREE);
6656 }
6657
6658 /* Decode a declarator in an ordinary declaration or data definition.
6659    This is called as soon as the type information and variable name
6660    have been parsed, before parsing the initializer if any.
6661    Here we create the ..._DECL node, fill in its type,
6662    and put it on the list of decls for the current context.
6663    The ..._DECL node is returned as the value.
6664
6665    Exception: for arrays where the length is not specified,
6666    the type is left null, to be filled in by `cp_finish_decl'.
6667
6668    Function definitions do not come here; they go to start_function
6669    instead.  However, external and forward declarations of functions
6670    do go through here.  Structure field declarations are done by
6671    grokfield and not through here.  */
6672
6673 /* Set this to zero to debug not using the temporary obstack
6674    to parse initializers.  */
6675 int debug_temp_inits = 1;
6676
6677 tree
6678 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6679      tree declarator, declspecs;
6680      int initialized;
6681      tree attributes, prefix_attributes;
6682 {
6683   register tree decl;
6684   register tree type, tem;
6685   tree context;
6686   extern int have_extern_spec;
6687   extern int used_extern_spec;
6688   tree attrlist;
6689
6690 #if 0
6691   /* See code below that used this.  */
6692   int init_written = initialized;
6693 #endif
6694
6695   /* This should only be done once on the top most decl.  */
6696   if (have_extern_spec && !used_extern_spec)
6697     {
6698       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6699                                   declspecs);
6700       used_extern_spec = 1;
6701     }
6702
6703   if (attributes || prefix_attributes)
6704     attrlist = build_scratch_list (attributes, prefix_attributes);
6705   else
6706     attrlist = NULL_TREE;
6707
6708   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6709                          attrlist);
6710                          
6711   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6712     return NULL_TREE;
6713
6714   type = TREE_TYPE (decl);
6715
6716   if (type == error_mark_node)
6717     return NULL_TREE;
6718
6719   context
6720     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6721       ? DECL_CLASS_CONTEXT (decl)
6722       : DECL_CONTEXT (decl);
6723
6724   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6725       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6726     {
6727       /* When parsing the initializer, lookup should use the object's
6728          namespace. */
6729       push_decl_namespace (context);
6730     }
6731
6732   /* We are only interested in class contexts, later. */
6733   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6734     context = NULL_TREE;
6735
6736   if (initialized)
6737     /* Is it valid for this decl to have an initializer at all?
6738        If not, set INITIALIZED to zero, which will indirectly
6739        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6740     switch (TREE_CODE (decl))
6741       {
6742       case TYPE_DECL:
6743         /* typedef foo = bar  means give foo the same type as bar.
6744            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6745            Any other case of an initialization in a TYPE_DECL is an error.  */
6746         if (pedantic || list_length (declspecs) > 1)
6747           {
6748             cp_error ("typedef `%D' is initialized", decl);
6749             initialized = 0;
6750           }
6751         break;
6752
6753       case FUNCTION_DECL:
6754         cp_error ("function `%#D' is initialized like a variable", decl);
6755         initialized = 0;
6756         break;
6757
6758       default:
6759         break;
6760       }
6761
6762   if (initialized)
6763     {
6764       if (! toplevel_bindings_p ()
6765           && DECL_EXTERNAL (decl))
6766         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6767                     decl);
6768       DECL_EXTERNAL (decl) = 0;
6769       if (toplevel_bindings_p ())
6770         TREE_STATIC (decl) = 1;
6771
6772       /* Tell `pushdecl' this is an initialized decl
6773          even though we don't yet have the initializer expression.
6774          Also tell `cp_finish_decl' it may store the real initializer.  */
6775       DECL_INITIAL (decl) = error_mark_node;
6776     }
6777
6778 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6779   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6780 #endif
6781   
6782   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6783   cplus_decl_attributes (decl, attributes, prefix_attributes);
6784
6785   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6786     {
6787       push_nested_class (context, 2);
6788
6789       if (TREE_CODE (decl) == VAR_DECL)
6790         {
6791           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6792           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6793             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6794           else
6795             {
6796               if (DECL_CONTEXT (field) != context)
6797                 {
6798                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6799                               DECL_CONTEXT (field), DECL_NAME (decl),
6800                               context, DECL_NAME (decl));
6801                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6802                 }
6803               /* Static data member are tricky; an in-class initialization
6804                  still doesn't provide a definition, so the in-class
6805                  declaration will have DECL_EXTERNAL set, but will have an
6806                  initialization.  Thus, duplicate_decls won't warn
6807                  about this situation, and so we check here.  */
6808               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6809                 cp_error ("duplicate initialization of %D", decl);
6810               if (duplicate_decls (decl, field))
6811                 decl = field;
6812             }
6813         }
6814       else
6815         {
6816           tree field = check_classfn (context, decl);
6817           if (field && duplicate_decls (decl, field))
6818             decl = field;
6819         }
6820
6821       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6822       DECL_IN_AGGR_P (decl) = 0;
6823       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6824           || CLASSTYPE_USE_TEMPLATE (context))
6825         {
6826           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6827           /* [temp.expl.spec] An explicit specialization of a static data
6828              member of a template is a definition if the declaration
6829              includes an initializer; otherwise, it is a declaration.
6830
6831              We check for processing_specialization so this only applies
6832              to the new specialization syntax.  */
6833           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6834             DECL_EXTERNAL (decl) = 1;
6835         }
6836
6837       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6838         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6839                     decl);
6840     }
6841
6842   /* Enter this declaration into the symbol table.  */
6843   tem = maybe_push_decl (decl);
6844
6845   if (processing_template_decl)
6846     {
6847       if (at_function_scope_p ())
6848         push_permanent_obstack ();
6849       tem = push_template_decl (tem);
6850       if (at_function_scope_p ())
6851         pop_obstacks ();
6852     }
6853
6854
6855 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6856   /* Tell the back-end to use or not use .common as appropriate.  If we say
6857      -fconserve-space, we want this to save .data space, at the expense of
6858      wrong semantics.  If we say -fno-conserve-space, we want this to
6859      produce errors about redefs; to do this we force variables into the
6860      data segment.  */
6861   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6862 #endif
6863   
6864   if (! processing_template_decl)
6865     start_decl_1 (tem);
6866
6867   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
6868   push_obstacks_nochange ();
6869
6870   return tem;
6871 }
6872
6873 void
6874 start_decl_1 (decl)
6875      tree decl;
6876 {
6877   tree type = TREE_TYPE (decl);
6878   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6879
6880   if (type == error_mark_node)
6881     return;
6882
6883   /* If this type of object needs a cleanup, and control may
6884      jump past it, make a new binding level so that it is cleaned
6885      up only when it is initialized first.  */
6886   if (TYPE_NEEDS_DESTRUCTOR (type)
6887       && current_binding_level->more_cleanups_ok == 0)
6888     pushlevel_temporary (1);
6889
6890   if (initialized)
6891     /* Is it valid for this decl to have an initializer at all?
6892        If not, set INITIALIZED to zero, which will indirectly
6893        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6894     {
6895       /* Don't allow initializations for incomplete types except for
6896          arrays which might be completed by the initialization.  */
6897       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6898         ;                       /* A complete type is ok.  */
6899       else if (TREE_CODE (type) != ARRAY_TYPE)
6900         {
6901           cp_error ("variable `%#D' has initializer but incomplete type",
6902                     decl);
6903           initialized = 0;
6904           type = TREE_TYPE (decl) = error_mark_node;
6905         }
6906       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6907         {
6908           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6909             cp_error ("elements of array `%#D' have incomplete type", decl);
6910           /* else we already gave an error in start_decl.  */
6911           initialized = 0;
6912         }
6913     }
6914
6915   if (!initialized
6916       && TREE_CODE (decl) != TYPE_DECL
6917       && TREE_CODE (decl) != TEMPLATE_DECL
6918       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6919     {
6920       if ((! processing_template_decl || ! uses_template_parms (type))
6921           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6922         {
6923           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6924                  decl);
6925           /* Change the type so that assemble_variable will give
6926              DECL an rtl we can live with: (mem (const_int 0)).  */
6927           type = TREE_TYPE (decl) = error_mark_node;
6928         }
6929       else
6930         {
6931           /* If any base type in the hierarchy of TYPE needs a constructor,
6932              then we set initialized to 1.  This way any nodes which are
6933              created for the purposes of initializing this aggregate
6934              will live as long as it does.  This is necessary for global
6935              aggregates which do not have their initializers processed until
6936              the end of the file.  */
6937           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6938         }
6939     }
6940
6941   if (! initialized)
6942     DECL_INITIAL (decl) = NULL_TREE;
6943 }
6944
6945 /* Handle initialization of references.
6946    These three arguments are from `cp_finish_decl', and have the
6947    same meaning here that they do there.
6948
6949    Quotes on semantics can be found in ARM 8.4.3.  */
6950
6951 static void
6952 grok_reference_init (decl, type, init)
6953      tree decl, type, init;
6954 {
6955   tree tmp;
6956
6957   if (init == NULL_TREE)
6958     {
6959       if ((DECL_LANG_SPECIFIC (decl) == 0
6960            || DECL_IN_AGGR_P (decl) == 0)
6961           && ! DECL_THIS_EXTERN (decl))
6962         cp_error ("`%D' declared as reference but not initialized", decl);
6963       return;
6964     }
6965
6966   if (init == error_mark_node)
6967     return;
6968
6969   if (TREE_CODE (init) == CONSTRUCTOR)
6970     {
6971       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6972       return;
6973     }
6974
6975   if (TREE_CODE (init) == TREE_LIST)
6976     init = build_compound_expr (init);
6977
6978   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6979     init = convert_from_reference (init);
6980
6981   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6982       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6983     {
6984       /* Note: default conversion is only called in very special cases.  */
6985       init = default_conversion (init);
6986     }
6987   
6988   /* Convert INIT to the reference type TYPE.  This may involve the
6989      creation of a temporary, whose lifetime must be the same as that
6990      of the reference.  If so, a DECL_STMT for the temporary will be
6991      added just after the DECL_STMT for DECL.  That's why we don't set
6992      DECL_INITIAL for local references (instead assigning to them
6993      explicitly); we need to allow the temporary to be initialized
6994      first.  */
6995   tmp = convert_to_reference
6996     (type, init, CONV_IMPLICIT,
6997      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6998
6999   if (tmp == error_mark_node)
7000     return;
7001   else if (tmp != NULL_TREE)
7002     {
7003       init = tmp;
7004       tmp = save_expr (tmp);
7005       if (building_stmt_tree ())
7006         {
7007           /* Initialize the declaration.  */
7008           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7009           /* Setting TREE_SIDE_EFFECTS prevents expand_expr from
7010              omitting this expression entirely.  */
7011           TREE_SIDE_EFFECTS (tmp) = 1;
7012           finish_expr_stmt (tmp);
7013         }
7014       else
7015         DECL_INITIAL (decl) = tmp;
7016     }
7017   else
7018     {
7019       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7020       return;
7021     }
7022
7023   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7024     {
7025       expand_static_init (decl, DECL_INITIAL (decl));
7026       DECL_INITIAL (decl) = NULL_TREE;
7027     }
7028   return;
7029 }
7030
7031 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7032    mucking with forces it does not comprehend (i.e. initialization with a
7033    constructor).  If we are at global scope and won't go into COMMON, fill
7034    it in with a dummy CONSTRUCTOR to force the variable into .data;
7035    otherwise we can use error_mark_node.  */
7036
7037 static tree
7038 obscure_complex_init (decl, init)
7039      tree decl, init;
7040 {
7041   if (! flag_no_inline && TREE_STATIC (decl))
7042     {
7043       if (extract_init (decl, init))
7044         return NULL_TREE;
7045     }
7046
7047 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7048   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7049     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7050                                  NULL_TREE);
7051   else
7052 #endif
7053     DECL_INITIAL (decl) = error_mark_node;
7054
7055   return init;
7056 }
7057
7058 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7059    array until we finish parsing the initializer.  If that's the
7060    situation we're in, update DECL accordingly.  */
7061
7062 static void
7063 maybe_deduce_size_from_array_init (decl, init)
7064      tree decl;
7065      tree init;
7066 {
7067   tree type = TREE_TYPE (decl);
7068
7069   if (TREE_CODE (type) == ARRAY_TYPE
7070       && TYPE_DOMAIN (type) == NULL_TREE
7071       && TREE_CODE (decl) != TYPE_DECL)
7072     {
7073       int do_default
7074         = (TREE_STATIC (decl)
7075            /* Even if pedantic, an external linkage array
7076               may have incomplete type at first.  */
7077            ? pedantic && ! DECL_EXTERNAL (decl)
7078            : !DECL_EXTERNAL (decl));
7079       tree initializer = init ? init : DECL_INITIAL (decl);
7080       int failure = complete_array_type (type, initializer, do_default);
7081
7082       if (failure == 1)
7083         cp_error ("initializer fails to determine size of `%D'", decl);
7084
7085       if (failure == 2)
7086         {
7087           if (do_default)
7088             cp_error ("array size missing in `%D'", decl);
7089           /* If a `static' var's size isn't known, make it extern as
7090              well as static, so it does not get allocated.  If it's not
7091              `static', then don't mark it extern; finish_incomplete_decl
7092              will give it a default size and it will get allocated.  */
7093           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7094             DECL_EXTERNAL (decl) = 1;
7095         }
7096
7097       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7098           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7099                               integer_zero_node))
7100         cp_error ("zero-size array `%D'", decl);
7101
7102       layout_decl (decl, 0);
7103     }
7104 }
7105
7106 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7107    any appropriate error messages regarding the layout.  */
7108
7109 static void
7110 layout_var_decl (decl)
7111      tree decl;
7112 {
7113   tree type = TREE_TYPE (decl);
7114   tree ttype = target_type (type);
7115
7116   /* If we haven't already layed out this declaration, do so now.
7117      Note that we must not call complete type for an external object
7118      because it's type might involve templates that we are not
7119      supposed to isntantiate yet.  (And it's perfectly legal to say 
7120      `extern X x' for some incomplete type `X'.)  */
7121   if (!DECL_EXTERNAL (decl))
7122     complete_type (type);
7123   if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7124     layout_decl (decl, 0);
7125
7126   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7127     {
7128       /* An automatic variable with an incomplete type: that is an error.
7129          Don't talk about array types here, since we took care of that
7130          message in grokdeclarator.  */
7131       cp_error ("storage size of `%D' isn't known", decl);
7132       TREE_TYPE (decl) = error_mark_node;
7133     }
7134   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7135     /* Let debugger know it should output info for this type.  */
7136     note_debug_info_needed (ttype);
7137
7138   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7139     note_debug_info_needed (DECL_CONTEXT (decl));
7140
7141   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7142       && DECL_SIZE (decl) != NULL_TREE
7143       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7144     {
7145       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7146         constant_expression_warning (DECL_SIZE (decl));
7147       else
7148         cp_error ("storage size of `%D' isn't constant", decl);
7149     }
7150 }
7151
7152 /* If a local static variable is declared in an inline function, or if
7153    we have a weak definition, we must endeavor to create only one
7154    instance of the variable at link-time.  */
7155
7156 static void
7157 maybe_commonize_var (decl)
7158      tree decl;
7159 {
7160   /* Static data in a function with comdat linkage also has comdat
7161      linkage.  */
7162   if (TREE_STATIC (decl)
7163       /* Don't mess with __FUNCTION__.  */
7164       && ! TREE_ASM_WRITTEN (decl)
7165       && current_function_decl
7166       && DECL_CONTEXT (decl) == current_function_decl
7167       && (DECL_THIS_INLINE (current_function_decl)
7168           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7169       && TREE_PUBLIC (current_function_decl))
7170     {
7171       /* Rather than try to get this right with inlining, we suppress
7172          inlining of such functions.  */
7173       current_function_cannot_inline
7174         = "function with static variable cannot be inline";
7175
7176       /* If flag_weak, we don't need to mess with this, as we can just
7177          make the function weak, and let it refer to its unique local
7178          copy.  This works because we don't allow the function to be
7179          inlined.  */
7180       if (! flag_weak)
7181         {
7182           if (DECL_INTERFACE_KNOWN (current_function_decl))
7183             {
7184               TREE_PUBLIC (decl) = 1;
7185               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7186             }
7187           else if (DECL_INITIAL (decl) == NULL_TREE
7188                    || DECL_INITIAL (decl) == error_mark_node)
7189             {
7190               TREE_PUBLIC (decl) = 1;
7191               DECL_COMMON (decl) = 1;
7192             }
7193           /* else we lose. We can only do this if we can use common,
7194              which we can't if it has been initialized.  */
7195
7196           if (TREE_PUBLIC (decl))
7197             DECL_ASSEMBLER_NAME (decl)
7198               = build_static_name (current_function_decl, DECL_NAME (decl));
7199           else if (! DECL_ARTIFICIAL (decl))
7200             {
7201               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7202               cp_warning_at ("  you can work around this by removing the initializer", decl);
7203             }
7204         }
7205     }
7206   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7207     /* Set it up again; we might have set DECL_INITIAL since the last
7208        time.  */
7209     comdat_linkage (decl);
7210 }
7211
7212 /* Issue an error message if DECL is an uninitialized const variable.  */
7213
7214 static void
7215 check_for_uninitialized_const_var (decl)
7216      tree decl;
7217 {
7218   tree type = TREE_TYPE (decl);
7219
7220   /* ``Unless explicitly declared extern, a const object does not have
7221      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7222      7.1.6 */
7223   if (TREE_CODE (decl) == VAR_DECL
7224       && TREE_CODE (type) != REFERENCE_TYPE
7225       && CP_TYPE_CONST_P (type)
7226       && !TYPE_NEEDS_CONSTRUCTING (type)
7227       && !DECL_INITIAL (decl))
7228     cp_error ("uninitialized const `%D'", decl);
7229 }
7230
7231 /* Verify INIT (the initializer for DECL), and record the
7232    initialization in DECL_INITIAL, if appropriate.  Returns a new
7233    value for INIT.  */
7234
7235 static tree
7236 check_initializer (decl, init)
7237      tree decl;
7238      tree init;
7239 {
7240   tree type;
7241
7242   if (TREE_CODE (decl) == FIELD_DECL)
7243     return init;
7244
7245   type = TREE_TYPE (decl);
7246
7247   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7248   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7249     init = NULL_TREE;
7250
7251   /* Check the initializer.  */
7252   if (init)
7253     {
7254       /* Things that are going to be initialized need to have complete
7255          type.  */
7256       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7257
7258       if (type == error_mark_node)
7259         /* We will have already complained.  */
7260         init = NULL_TREE;
7261       else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7262         {
7263           cp_error ("variable-sized object `%D' may not be initialized", decl);
7264           init = NULL_TREE;
7265         }
7266       else if (TREE_CODE (type) == ARRAY_TYPE
7267                && !TYPE_SIZE (TREE_TYPE (type)))
7268         {
7269           cp_error ("elements of array `%#D' have incomplete type", decl);
7270           init = NULL_TREE;
7271         }
7272       else if (!TYPE_SIZE (type))
7273         {
7274           cp_error ("`%D' has incomplete type", decl);
7275           TREE_TYPE (decl) = error_mark_node;
7276           init = NULL_TREE;
7277         }
7278     }
7279
7280   if (TREE_CODE (decl) == CONST_DECL)
7281     {
7282       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7283
7284       DECL_INITIAL (decl) = init;
7285
7286       /* This will keep us from needing to worry about our obstacks.  */
7287       my_friendly_assert (init != NULL_TREE, 149);
7288       init = NULL_TREE;
7289     }
7290   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7291     {
7292       if (TREE_STATIC (decl))
7293         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7294       grok_reference_init (decl, type, init);
7295       init = NULL_TREE;
7296     }
7297   else if (init)
7298     {
7299       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7300         {
7301           if (TREE_CODE (type) == ARRAY_TYPE)
7302             init = digest_init (type, init, (tree *) 0);
7303           else if (TREE_CODE (init) == CONSTRUCTOR
7304                    && TREE_HAS_CONSTRUCTOR (init))
7305             {
7306               if (TYPE_NON_AGGREGATE_CLASS (type))
7307                 {
7308                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7309                             decl);
7310                   init = error_mark_node;
7311                 }
7312               else
7313                 goto dont_use_constructor;
7314             }
7315         }
7316       else
7317         {
7318         dont_use_constructor:
7319           if (TREE_CODE (init) != TREE_VEC)
7320             init = store_init_value (decl, init);
7321         }
7322
7323       if (init)
7324         /* We must hide the initializer so that expand_decl
7325            won't try to do something it does not understand.  */
7326         init = obscure_complex_init (decl, init);
7327     }
7328   else if (DECL_EXTERNAL (decl))
7329     ;
7330   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7331            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7332     {
7333       tree core_type = strip_array_types (type);
7334
7335       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7336         {
7337           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7338             cp_error ("structure `%D' with uninitialized const members", decl);
7339           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7340             cp_error ("structure `%D' with uninitialized reference members",
7341                       decl);
7342         }
7343
7344       check_for_uninitialized_const_var (decl);
7345
7346       if (TYPE_SIZE (type) != NULL_TREE
7347           && TYPE_NEEDS_CONSTRUCTING (type))
7348         init = obscure_complex_init (decl, NULL_TREE);
7349
7350     }
7351   else
7352     check_for_uninitialized_const_var (decl);
7353   
7354   return init;
7355 }
7356
7357 /* If DECL is not a local variable, give it RTL.  */
7358
7359 static void
7360 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7361      tree decl;
7362      tree init;
7363      const char *asmspec;
7364 {
7365   int toplev;
7366   tree type;
7367
7368   type = TREE_TYPE (decl);
7369   toplev = toplevel_bindings_p ();
7370   push_obstacks_nochange ();
7371   if (TREE_STATIC (decl) 
7372       && TYPE_NEEDS_DESTRUCTOR (type)
7373       && allocation_temporary_p ())
7374     end_temporary_allocation  ();
7375
7376   if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl))
7377     make_decl_rtl (decl, NULL_PTR, toplev);
7378   else if (TREE_CODE (decl) == VAR_DECL
7379            && TREE_READONLY (decl)
7380            && DECL_INITIAL (decl) != NULL_TREE
7381            && DECL_INITIAL (decl) != error_mark_node
7382            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7383     {
7384       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7385
7386       if (asmspec)
7387         DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7388
7389       if (! toplev
7390           && TREE_STATIC (decl)
7391           && ! TREE_SIDE_EFFECTS (decl)
7392           && ! TREE_PUBLIC (decl)
7393           && ! DECL_EXTERNAL (decl)
7394           && ! TYPE_NEEDS_DESTRUCTOR (type)
7395           && DECL_MODE (decl) != BLKmode)
7396         {
7397           /* If this variable is really a constant, then fill its DECL_RTL
7398              slot with something which won't take up storage.
7399              If something later should take its address, we can always give
7400              it legitimate RTL at that time.  */
7401           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7402           store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7403           TREE_ASM_WRITTEN (decl) = 1;
7404         }
7405       else if (toplev && ! TREE_PUBLIC (decl))
7406         {
7407           /* If this is a static const, change its apparent linkage
7408              if it belongs to a #pragma interface.  */
7409           if (!interface_unknown)
7410             {
7411               TREE_PUBLIC (decl) = 1;
7412               DECL_EXTERNAL (decl) = interface_only;
7413             }
7414           make_decl_rtl (decl, asmspec, toplev);
7415         }
7416       else
7417         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7418     }
7419   else if (TREE_CODE (decl) == VAR_DECL
7420            && DECL_LANG_SPECIFIC (decl)
7421            && DECL_IN_AGGR_P (decl))
7422     {
7423       my_friendly_assert (TREE_STATIC (decl), 19990828);
7424
7425       if (init == NULL_TREE
7426 #ifdef DEFAULT_STATIC_DEFS
7427           /* If this code is dead, then users must
7428              explicitly declare static member variables
7429              outside the class def'n as well.  */
7430           && TYPE_NEEDS_CONSTRUCTING (type)
7431 #endif
7432           )
7433         {
7434           DECL_EXTERNAL (decl) = 1;
7435           make_decl_rtl (decl, asmspec, 1);
7436         }
7437       else
7438         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7439     }
7440   else
7441     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7442
7443   pop_obstacks ();
7444 }
7445
7446 /* The old ARM scoping rules injected variables declared in the
7447    initialization statement of a for-statement into the surrounding
7448    scope.  We support this usage, in order to be backward-compatible.
7449    DECL is a just-declared VAR_DECL; if necessary inject its
7450    declaration into the surrounding scope.  */
7451
7452 void
7453 maybe_inject_for_scope_var (decl)
7454      tree decl;
7455 {
7456   if (current_binding_level->is_for_scope)
7457     {
7458       struct binding_level *outer 
7459         = current_binding_level->level_chain;
7460
7461       /* Check to see if the same name is already bound at the outer
7462          level, either because it was directly declared, or because a
7463          dead for-decl got preserved.  In either case, the code would
7464          not have been valid under the ARM scope rules, so clear
7465          is_for_scope for the current_binding_level.
7466
7467          Otherwise, we need to preserve the temp slot for decl to last
7468          into the outer binding level.  */
7469
7470       tree outer_binding 
7471         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7472               
7473       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7474           && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7475               == VAR_DECL)
7476           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7477         {
7478           BINDING_VALUE (outer_binding)
7479             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7480           current_binding_level->is_for_scope = 0;
7481         }
7482       else if (DECL_IN_MEMORY_P (decl))
7483         preserve_temp_slots (DECL_RTL (decl));
7484     }
7485 }
7486
7487 /* Generate code to initialize DECL (a local variable).  */
7488
7489 void
7490 initialize_local_var (decl, init, flags)
7491      tree decl;
7492      tree init;
7493      int flags;
7494 {
7495   tree type;
7496
7497   type = complete_type (TREE_TYPE (decl));
7498
7499   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7500     {
7501       /* If we used it already as memory, it must stay in memory.  */
7502       DECL_INITIAL (decl) = NULL_TREE;
7503       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7504     }
7505
7506   if (DECL_SIZE (decl) && type != error_mark_node)
7507     {
7508       int already_used;
7509   
7510       /* Compute and store the initial value.  */
7511       already_used = TREE_USED (decl) || TREE_USED (type);
7512
7513       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7514         {
7515           int saved_stmts_are_full_exprs_p;
7516
7517           emit_line_note (DECL_SOURCE_FILE (decl),
7518                           DECL_SOURCE_LINE (decl));
7519           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7520           stmts_are_full_exprs_p = 1;
7521           finish_expr_stmt (build_aggr_init (decl, init, flags));
7522           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7523         }
7524
7525       /* Set this to 0 so we can tell whether an aggregate which was
7526          initialized was ever used.  Don't do this if it has a
7527          destructor, so we don't complain about the 'resource
7528          allocation is initialization' idiom.  Now set
7529          attribute((unused)) on types so decls of that type will be
7530          marked used. (see TREE_USED, above.)  */
7531       if (TYPE_NEEDS_CONSTRUCTING (type)
7532           && ! already_used
7533           && !TYPE_NEEDS_DESTRUCTOR (type) 
7534           && DECL_NAME (decl))
7535         TREE_USED (decl) = 0;
7536       else if (already_used)
7537         TREE_USED (decl) = 1;
7538     }
7539 }
7540
7541 /* Generate code to destroy DECL (a local variable).  */
7542
7543 void 
7544 destroy_local_var (decl)
7545      tree decl;
7546 {
7547   tree type = TREE_TYPE (decl);
7548   tree cleanup;
7549
7550   /* Only variables get cleaned up.  */
7551   if (TREE_CODE (decl) != VAR_DECL)
7552     return;
7553   
7554   /* And only things with destructors need cleaning up.  */
7555   if (!TYPE_NEEDS_DESTRUCTOR (type))
7556     return;
7557
7558   if (TREE_CODE (decl) == VAR_DECL &&
7559       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7560     /* We don't clean up things that aren't defined in this
7561        translation unit, or that need a static cleanup.  The latter
7562        are handled by finish_file.  */
7563     return;
7564   
7565   /* Compute the cleanup.  */
7566   cleanup = maybe_build_cleanup (decl);
7567
7568   /* Record the cleanup required for this declaration.  */
7569   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7570       && cleanup)
7571     finish_decl_cleanup (decl, cleanup);
7572 }
7573
7574 /* Let the back-end know about DECL.  */
7575
7576 void
7577 emit_local_var (decl)
7578      tree decl;
7579 {
7580   /* Create RTL for this variable.  */
7581   if (DECL_RTL (decl))
7582     /* Only a RESULT_DECL should have non-NULL RTL when
7583                      arriving here.  All other local variables are
7584                      assigned RTL in this function.  */
7585     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 
7586                         19990828);
7587   else
7588     expand_decl (decl);
7589
7590   /* Actually do the initialization.  */
7591   expand_start_target_temps ();
7592   expand_decl_init (decl);
7593   expand_end_target_temps ();
7594 }
7595
7596 /* Finish processing of a declaration;
7597    install its line number and initial value.
7598    If the length of an array type is not known before,
7599    it must be determined now, from the initial value, or it is an error.
7600
7601    Call `pop_obstacks' iff NEED_POP is nonzero.
7602
7603    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7604    for aggregates that have constructors alive on the permanent obstack,
7605    so that the global initializing functions can be written at the end.
7606
7607    INIT0 holds the value of an initializer that should be allowed to escape
7608    the normal rules.
7609
7610    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7611    if the (init) syntax was used.
7612
7613    For functions that take default parameters, DECL points to its
7614    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7615    subsequently lower and lower forms of instantiation, checking for
7616    ambiguity as it goes.  This can be sped up later.  */
7617
7618 void
7619 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7620      tree decl, init;
7621      tree asmspec_tree;
7622      int need_pop;
7623      int flags;
7624 {
7625   register tree type;
7626   tree ttype = NULL_TREE;
7627   int temporary = allocation_temporary_p ();
7628   const char *asmspec = NULL;
7629   int was_readonly = 0;
7630
7631   /* If this is 0, then we did not change obstacks.  */
7632   if (! decl)
7633     {
7634       if (init)
7635         error ("assignment (not initialization) in declaration");
7636       return;
7637     }
7638
7639   /* If a name was specified, get the string.  */
7640   if (asmspec_tree)
7641       asmspec = TREE_STRING_POINTER (asmspec_tree);
7642
7643   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7644     {
7645       cp_error ("Cannot initialize `%D' to namespace `%D'",
7646                 decl, init);
7647       init = NULL_TREE;
7648     }
7649
7650   if (current_class_type
7651       && DECL_REAL_CONTEXT (decl) == current_class_type
7652       && TYPE_BEING_DEFINED (current_class_type)
7653       && (DECL_INITIAL (decl) || init))
7654     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7655
7656   if (TREE_CODE (decl) == VAR_DECL 
7657       && DECL_CONTEXT (decl)
7658       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7659       && DECL_CONTEXT (decl) != current_namespace
7660       && init)
7661     {
7662       /* Leave the namespace of the object. */
7663       pop_decl_namespace ();
7664     }
7665
7666   type = TREE_TYPE (decl);
7667
7668   if (type == error_mark_node)
7669     {
7670       if (toplevel_bindings_p () && temporary)
7671         end_temporary_allocation ();
7672
7673       return;
7674     }
7675
7676   /* Add this declaration to the statement-tree.  */
7677   if (building_stmt_tree () 
7678       && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7679     add_decl_stmt (decl);
7680
7681   if (TYPE_HAS_MUTABLE_P (type))
7682     TREE_READONLY (decl) = 0;
7683
7684   if (processing_template_decl)
7685     {
7686       if (init && DECL_INITIAL (decl))
7687         DECL_INITIAL (decl) = init;
7688       goto finish_end0;
7689     }
7690
7691   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7692   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7693
7694   /* Take care of TYPE_DECLs up front.  */
7695   if (TREE_CODE (decl) == TYPE_DECL)
7696     {
7697       if (init && DECL_INITIAL (decl))
7698         {
7699           /* typedef foo = bar; store the type of bar as the type of foo.  */
7700           TREE_TYPE (decl) = type = TREE_TYPE (init);
7701           DECL_INITIAL (decl) = init = NULL_TREE;
7702         }
7703       if (type != error_mark_node
7704           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7705         {
7706           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7707             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7708           set_identifier_type_value (DECL_NAME (decl), type);
7709           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7710         }
7711       GNU_xref_decl (current_function_decl, decl);
7712
7713       /* If we have installed this as the canonical typedef for this
7714          type, and that type has not been defined yet, delay emitting
7715          the debug information for it, as we will emit it later.  */
7716       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7717           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7718         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7719
7720       rest_of_decl_compilation (decl, NULL_PTR,
7721                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7722       goto finish_end;
7723     }
7724
7725   if (TREE_CODE (decl) != FUNCTION_DECL)
7726     ttype = target_type (type);
7727
7728   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7729       && TYPE_NEEDS_CONSTRUCTING (type))
7730     {
7731       /* Currently, GNU C++ puts constants in text space, making them
7732          impossible to initialize.  In the future, one would hope for
7733          an operating system which understood the difference between
7734          initialization and the running of a program.  */
7735       was_readonly = 1;
7736       TREE_READONLY (decl) = 0;
7737     }
7738
7739   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7740     {
7741       /* This must override the asm specifier which was placed by
7742          grokclassfn.  Lay this out fresh.  */
7743       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7744       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7745       make_decl_rtl (decl, asmspec, 0);
7746     }
7747
7748   /* Deduce size of array from initialization, if not already known.  */
7749   maybe_deduce_size_from_array_init (decl, init);
7750   init = check_initializer (decl, init);
7751
7752   GNU_xref_decl (current_function_decl, decl);
7753
7754   /* For top-level declaration, the initial value was read in
7755      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7756      must go in the permanent obstack; but don't discard the
7757      temporary data yet.  */
7758
7759   if (toplevel_bindings_p () && temporary)
7760     end_temporary_allocation ();
7761
7762   if (TREE_CODE (decl) == VAR_DECL)
7763     layout_var_decl (decl);
7764
7765   /* Output the assembler code and/or RTL code for variables and functions,
7766      unless the type is an undefined structure or union.
7767      If not, it will get done when the type is completed.  */
7768   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7769       || TREE_CODE (decl) == RESULT_DECL)
7770     {
7771       if (TREE_CODE (decl) == VAR_DECL)
7772         maybe_commonize_var (decl);
7773
7774       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7775
7776       if (TREE_CODE (type) == FUNCTION_TYPE 
7777           || TREE_CODE (type) == METHOD_TYPE)
7778         abstract_virtuals_error (decl, 
7779                                  strip_array_types (TREE_TYPE (type)));
7780       else 
7781         abstract_virtuals_error (decl, strip_array_types (type));
7782
7783       if (TREE_CODE (decl) == FUNCTION_DECL)
7784         ;
7785       else if (DECL_EXTERNAL (decl)
7786                && ! (DECL_LANG_SPECIFIC (decl)
7787                      && DECL_NOT_REALLY_EXTERN (decl)))
7788         {
7789           if (init)
7790             DECL_INITIAL (decl) = init;
7791         }
7792       else if (TREE_STATIC (decl) && type != error_mark_node)
7793         {
7794           /* Cleanups for static variables are handled by `finish_file'.  */
7795           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7796               || TYPE_NEEDS_DESTRUCTOR (type))
7797             expand_static_init (decl, init);
7798         }
7799       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7800         {
7801           /* This is a local declaration.  */
7802           if (doing_semantic_analysis_p ())
7803             maybe_inject_for_scope_var (decl);
7804           /* Initialize the local variable.  But, if we're building a
7805              statement-tree, we'll do the initialization when we
7806              expand the tree.  */
7807           if (processing_template_decl)
7808             {
7809               if (init || DECL_INITIAL (decl) == error_mark_node)
7810                 DECL_INITIAL (decl) = init;
7811             }
7812           else
7813             {
7814               /* If we're not building RTL, then we need to do so
7815                  now.  */
7816               if (!building_stmt_tree ())
7817                 emit_local_var (decl);
7818               /* Initialize the variable.  */
7819               initialize_local_var (decl, init, flags);
7820               /* Clean up the variable.  */
7821               destroy_local_var (decl);
7822             }
7823         }
7824     finish_end0:
7825
7826       /* Undo call to `pushclass' that was done in `start_decl'
7827          due to initialization of qualified member variable.
7828          I.e., Foo::x = 10;  */
7829       {
7830         tree context = DECL_REAL_CONTEXT (decl);
7831         if (context
7832             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7833             && (TREE_CODE (decl) == VAR_DECL
7834                 /* We also have a pushclass done that we need to undo here
7835                    if we're at top level and declare a method.  */
7836                 || TREE_CODE (decl) == FUNCTION_DECL)
7837             /* If size hasn't been set, we're still defining it,
7838                and therefore inside the class body; don't pop
7839                the binding level..  */
7840             && TYPE_SIZE (context) != NULL_TREE
7841             && context == current_class_type)
7842           pop_nested_class ();
7843       }
7844     }
7845
7846  finish_end:
7847
7848   /* If requested, warn about definitions of large data objects.  */
7849
7850   if (warn_larger_than
7851       && ! processing_template_decl
7852       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7853       && !DECL_EXTERNAL (decl))
7854     {
7855       register tree decl_size = DECL_SIZE (decl);
7856
7857       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7858         {
7859           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7860
7861           if (units > larger_than_size)
7862             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7863         }
7864     }
7865
7866   if (need_pop)
7867     /* Resume permanent allocation, if not within a function.  The
7868        corresponding push_obstacks_nochange is in start_decl,
7869        start_method, groktypename, and in grokfield.  */
7870     pop_obstacks ();
7871
7872   if (was_readonly)
7873     TREE_READONLY (decl) = 1;
7874 }
7875
7876 /* This is here for a midend callback from c-common.c */
7877
7878 void
7879 finish_decl (decl, init, asmspec_tree)
7880      tree decl, init;
7881      tree asmspec_tree;
7882 {
7883   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7884 }
7885
7886 /* Generate code to handle the destruction of the function-scoped
7887    static variable DECL.  */
7888
7889 static void
7890 destroy_local_static (decl)
7891      tree decl;
7892 {
7893   tree cleanup, fcall;
7894   tree compound_stmt;
7895   int saved_flag_access_control;
7896
7897   if (atexit_node == 0)
7898     {
7899       tree atexit_fndecl, PFV, pfvlist;
7900       /* Remember this information until end of file.  */
7901       push_obstacks (&permanent_obstack, &permanent_obstack);
7902       PFV = build_pointer_type (build_function_type
7903                                 (void_type_node, void_list_node));
7904
7905       pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7906
7907       push_lang_context (lang_name_c);
7908       /* Note that we do not call pushdecl for this function;
7909          there's no reason that this declaration should be
7910          accessible to anyone.  */
7911       atexit_fndecl
7912         = define_function ("atexit",
7913                            build_function_type (void_type_node,
7914                                                 pfvlist),
7915                            /*pfn=*/0, NULL_PTR);
7916       mark_used (atexit_fndecl);
7917       atexit_node = default_conversion (atexit_fndecl);
7918       pop_lang_context ();
7919       pop_obstacks ();
7920     }
7921               
7922   /* Call build_cleanup before we enter the anonymous function so that
7923      any access checks will be done relative to the current scope,
7924      rather than the scope of the anonymous function.  */
7925   build_cleanup (decl);
7926
7927   /* Now start the function.  */
7928   cleanup = start_anon_func ();
7929
7930   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7931      to the original function, rather than the anonymous one.  That
7932      will make the back-end think that nested functions are in use,
7933      which causes confusion.  */
7934   saved_flag_access_control = flag_access_control;
7935   flag_access_control = 0;
7936   fcall = build_cleanup (decl);
7937   flag_access_control = saved_flag_access_control;
7938
7939   /* Create the body of the anonymous function.  */
7940   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7941   finish_expr_stmt (fcall);
7942   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7943   end_anon_func ();
7944
7945   /* Call atexit with the cleanup function.  */
7946   mark_addressable (cleanup);
7947   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7948   fcall = build_function_call (atexit_node,
7949                                tree_cons (NULL_TREE, 
7950                                           cleanup, 
7951                                           NULL_TREE));
7952   finish_expr_stmt (fcall);
7953 }
7954
7955 void
7956 expand_static_init (decl, init)
7957      tree decl;
7958      tree init;
7959 {
7960   tree oldstatic = value_member (decl, static_aggregates);
7961
7962   if (oldstatic)
7963     {
7964       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7965         cp_error ("multiple initializations given for `%D'", decl);
7966     }
7967   else if (! toplevel_bindings_p ())
7968     {
7969       /* Emit code to perform this initialization but once.  */
7970       tree temp;
7971       tree if_stmt;
7972       tree then_clause;
7973       tree assignment;
7974       tree temp_init;
7975
7976       /* Remember this information until end of file.  */
7977       push_obstacks (&permanent_obstack, &permanent_obstack);
7978
7979       /* Emit code to perform this initialization but once.  This code
7980          looks like:
7981
7982            static int temp = 0;
7983            if (!temp) {
7984              // Do initialization.
7985              temp = 1;
7986              // Register variable for destruction at end of program.
7987            }
7988
7989          Note that the `temp' variable is only set to 1 *after* the
7990          initialization is complete.  This ensures that an exception,
7991          thrown during the construction, will cause the variable to
7992          reinitialized when we pass through this code again, as per:
7993          
7994            [stmt.dcl]
7995
7996            If the initialization exits by throwing an exception, the
7997            initialization is not complete, so it will be tried again
7998            the next time control enters the declaration.
7999
8000          In theory, this process should be thread-safe, too; multiple
8001          threads should not be able to initialize the variable more
8002          than once.  We don't yet attempt to ensure thread-safety.  */
8003       temp = get_temp_name (integer_type_node, 1);
8004       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8005
8006       /* Begin the conditional initialization.  */
8007       if_stmt = begin_if_stmt ();
8008       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8009                                             integer_zero_node), 
8010                            if_stmt);
8011       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8012
8013       /* Do the initialization itself.  */
8014       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8015           || (init && TREE_CODE (init) == TREE_LIST))
8016         assignment = build_aggr_init (decl, init, 0);
8017       else if (init)
8018         {
8019           /* The initialization we're doing here is just a bitwise
8020              copy.  */
8021           assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8022           TREE_SIDE_EFFECTS (assignment) = 1;
8023         }
8024       else
8025         assignment = NULL_TREE;
8026
8027       /* Once the assignment is complete, set TEMP to 1.  Since the
8028          construction of the static object is complete at this point,
8029          we want to make sure TEMP is set to 1 even if a temporary
8030          constructed during the initialization throws an exception
8031          when it is destroyed.  So, we combine the initialization and
8032          the assignment to TEMP into a single expression, ensuring
8033          that when we call finish_expr_stmt the cleanups will not be
8034          run until after TEMP is set to 1.  */
8035       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8036       if (assignment)
8037         {
8038           assignment = tree_cons (NULL_TREE, assignment,
8039                                   build_tree_list (NULL_TREE, 
8040                                                    temp_init));
8041           assignment = build_compound_expr (assignment);
8042         }
8043       else
8044         assignment = temp_init;
8045       finish_expr_stmt (assignment);
8046
8047       /* Use atexit to register a function for destroying this static
8048          variable.  */
8049       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8050         destroy_local_static (decl);
8051
8052       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8053       finish_then_clause (if_stmt);
8054       finish_if_stmt ();
8055
8056       /* Resume old (possibly temporary) allocation.  */
8057       pop_obstacks ();
8058     }
8059   else
8060     {
8061       /* This code takes into account memory allocation policy of
8062          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8063          hold for this object, then we must make permanent the storage
8064          currently in the temporary obstack.  */
8065       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8066         preserve_initializer ();
8067       static_aggregates = tree_cons (init, decl, static_aggregates);
8068     }
8069 }
8070
8071 /* Finish the declaration of a catch-parameter.  */
8072
8073 tree
8074 start_handler_parms (declspecs, declarator)
8075      tree declspecs;
8076      tree declarator;
8077 {
8078   tree decl;
8079   if (declspecs)
8080     {
8081       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8082                              1, NULL_TREE);
8083       if (decl == NULL_TREE)
8084         error ("invalid catch parameter");
8085     }
8086   else
8087     decl = NULL_TREE;
8088
8089   return decl;
8090 }
8091
8092 \f
8093 /* Make TYPE a complete type based on INITIAL_VALUE.
8094    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8095    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8096
8097 int
8098 complete_array_type (type, initial_value, do_default)
8099      tree type, initial_value;
8100      int do_default;
8101 {
8102   register tree maxindex = NULL_TREE;
8103   int value = 0;
8104   
8105   /* Allocate on the same obstack as TYPE.  */
8106   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8107   
8108   if (initial_value)
8109     {
8110       /* Note MAXINDEX  is really the maximum index,
8111          one less than the size.  */
8112       if (TREE_CODE (initial_value) == STRING_CST)
8113         {
8114           int eltsize
8115             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8116           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8117                                    / eltsize) - 1, 0);
8118         }
8119       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8120         {
8121           tree elts = CONSTRUCTOR_ELTS (initial_value);
8122           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8123           for (; elts; elts = TREE_CHAIN (elts))
8124             {
8125               if (TREE_PURPOSE (elts))
8126                 maxindex = TREE_PURPOSE (elts);
8127               else
8128                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8129             }
8130           maxindex = copy_node (maxindex);
8131         }
8132       else
8133         {
8134           /* Make an error message unless that happened already.  */
8135           if (initial_value != error_mark_node)
8136             value = 1;
8137           else
8138             initial_value = NULL_TREE;
8139
8140           /* Prevent further error messages.  */
8141           maxindex = build_int_2 (0, 0);
8142         }
8143     }
8144
8145   if (!maxindex)
8146     {
8147       if (do_default)
8148         maxindex = build_int_2 (0, 0);
8149       value = 2;
8150     }
8151
8152   if (maxindex)
8153     {
8154       tree itype;
8155       tree domain;
8156
8157       domain = build_index_type (maxindex);
8158       TYPE_DOMAIN (type) = domain;
8159
8160       if (! TREE_TYPE (maxindex))
8161         TREE_TYPE (maxindex) = domain;
8162       if (initial_value)
8163         itype = TREE_TYPE (initial_value);
8164       else
8165         itype = NULL;
8166       if (itype && !TYPE_DOMAIN (itype))
8167         TYPE_DOMAIN (itype) = domain;
8168       /* The type of the main variant should never be used for arrays
8169          of different sizes.  It should only ever be completed with the
8170          size of the array.  */
8171       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8172         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8173     }
8174
8175   pop_obstacks();
8176   
8177   /* Lay out the type now that we can get the real answer.  */
8178
8179   layout_type (type);
8180
8181   return value;
8182 }
8183 \f
8184 /* Return zero if something is declared to be a member of type
8185    CTYPE when in the context of CUR_TYPE.  STRING is the error
8186    message to print in that case.  Otherwise, quietly return 1.  */
8187
8188 static int
8189 member_function_or_else (ctype, cur_type, string)
8190      tree ctype, cur_type;
8191      const char *string;
8192 {
8193   if (ctype && ctype != cur_type)
8194     {
8195       error (string, TYPE_NAME_STRING (ctype));
8196       return 0;
8197     }
8198   return 1;
8199 }
8200 \f
8201 /* Subroutine of `grokdeclarator'.  */
8202
8203 /* Generate errors possibly applicable for a given set of specifiers.
8204    This is for ARM $7.1.2.  */
8205
8206 static void
8207 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8208      tree object;
8209      const char *type;
8210      int virtualp, quals, friendp, raises, inlinep;
8211 {
8212   if (virtualp)
8213     cp_error ("`%D' declared as a `virtual' %s", object, type);
8214   if (inlinep)
8215     cp_error ("`%D' declared as an `inline' %s", object, type);
8216   if (quals)
8217     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8218               object, type);
8219   if (friendp)
8220     cp_error_at ("`%D' declared as a friend", object);
8221   if (raises)
8222     cp_error_at ("`%D' declared with an exception specification", object);
8223 }
8224
8225 /* CTYPE is class type, or null if non-class.
8226    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8227    or METHOD_TYPE.
8228    DECLARATOR is the function's name.
8229    VIRTUALP is truthvalue of whether the function is virtual or not.
8230    FLAGS are to be passed through to `grokclassfn'.
8231    QUALS are qualifiers indicating whether the function is `const'
8232    or `volatile'.
8233    RAISES is a list of exceptions that this function can raise.
8234    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8235    not look, and -1 if we should not call `grokclassfn' at all.  
8236
8237    Returns `NULL_TREE' if something goes wrong, after issuing
8238    applicable error messages.  */
8239
8240 static tree
8241 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8242             raises, check, friendp, publicp, inlinep, funcdef_flag,
8243             template_count, in_namespace)
8244      tree ctype, type;
8245      tree declarator;
8246      tree orig_declarator;
8247      int virtualp;
8248      enum overload_flags flags;
8249      tree quals, raises;
8250      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8251      tree in_namespace;
8252 {
8253   tree cname, decl;
8254   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8255   int has_default_arg = 0;
8256   tree t;
8257
8258   if (ctype)
8259     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8260       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8261   else
8262     cname = NULL_TREE;
8263
8264   if (raises)
8265     {
8266       type = build_exception_variant (type, raises);
8267     }
8268
8269   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8270   /* Propagate volatile out from type to decl. */
8271   if (TYPE_VOLATILE (type))
8272     TREE_THIS_VOLATILE (decl) = 1;
8273
8274   /* If this decl has namespace scope, set that up.  */
8275   if (in_namespace)
8276     set_decl_namespace (decl, in_namespace, friendp);
8277   else if (publicp && ! ctype)
8278     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8279
8280   /* `main' and builtins have implicit 'C' linkage.  */
8281   if ((MAIN_NAME_P (declarator)
8282        || (IDENTIFIER_LENGTH (declarator) > 10
8283            && IDENTIFIER_POINTER (declarator)[0] == '_'
8284            && IDENTIFIER_POINTER (declarator)[1] == '_'
8285            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8286       && current_lang_name == lang_name_cplusplus
8287       && ctype == NULL_TREE
8288       /* NULL_TREE means global namespace.  */
8289       && DECL_CONTEXT (decl) == NULL_TREE)
8290     DECL_LANGUAGE (decl) = lang_c;
8291
8292   /* Should probably propagate const out from type to decl I bet (mrs).  */
8293   if (staticp)
8294     {
8295       DECL_STATIC_FUNCTION_P (decl) = 1;
8296       DECL_CONTEXT (decl) = ctype;
8297     }
8298
8299   if (ctype)
8300     DECL_CLASS_CONTEXT (decl) = ctype;
8301
8302   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8303     {
8304       if (processing_template_decl)
8305         error ("cannot declare `main' to be a template");
8306       if (inlinep)
8307         error ("cannot declare `main' to be inline");
8308       else if (! publicp)
8309         error ("cannot declare `main' to be static");
8310       inlinep = 0;
8311       publicp = 1;
8312     }
8313
8314   /* Members of anonymous types and local classes have no linkage; make
8315      them internal.  */
8316   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8317                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8318     publicp = 0;
8319
8320   if (publicp)
8321     {
8322       /* [basic.link]: A name with no linkage (notably, the name of a class
8323          or enumeration declared in a local scope) shall not be used to
8324          declare an entity with linkage.
8325
8326          Only check this for public decls for now.  */
8327       t = no_linkage_check (TREE_TYPE (decl));
8328       if (t)
8329         {
8330           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8331             {
8332               if (DECL_LANGUAGE (decl) == lang_c)
8333                 /* Allow this; it's pretty common in C.  */;
8334               else
8335                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8336                             decl);
8337             }
8338           else
8339             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8340                         decl, t);
8341         }
8342     }
8343
8344   TREE_PUBLIC (decl) = publicp;
8345   if (! publicp)
8346     {
8347       DECL_INTERFACE_KNOWN (decl) = 1;
8348       DECL_NOT_REALLY_EXTERN (decl) = 1;
8349     }
8350
8351   if (inlinep)
8352     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8353
8354   DECL_EXTERNAL (decl) = 1;
8355   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8356     {
8357       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8358                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8359       quals = NULL_TREE;
8360     }
8361
8362   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8363     grok_op_properties (decl, virtualp, check < 0);
8364
8365   if (ctype && hack_decl_function_context (decl))
8366     DECL_NO_STATIC_CHAIN (decl) = 1;
8367
8368   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8369     if (TREE_PURPOSE (t)
8370         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8371       {
8372         has_default_arg = 1;
8373         break;
8374       }
8375
8376   if (friendp
8377       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8378     {
8379       if (funcdef_flag)
8380         cp_error
8381           ("defining explicit specialization `%D' in friend declaration",
8382            orig_declarator);
8383       else
8384         {
8385           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8386             {
8387               /* Something like `template <class T> friend void f<T>()'.  */
8388               cp_error ("template-id `%D' in declaration of primary template", 
8389                         orig_declarator);
8390               return NULL_TREE;
8391             }
8392
8393
8394           /* A friend declaration of the form friend void f<>().  Record
8395              the information in the TEMPLATE_ID_EXPR.  */
8396           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8397           DECL_TEMPLATE_INFO (decl)
8398             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8399                          TREE_OPERAND (orig_declarator, 1),
8400                          NULL_TREE);
8401
8402           if (has_default_arg)
8403             {
8404               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8405                         decl);
8406               return NULL_TREE;
8407             }
8408
8409           if (inlinep)
8410             {
8411               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8412                         decl);
8413               return NULL_TREE;
8414             }
8415         }
8416     }
8417
8418   if (has_default_arg)
8419     add_defarg_fn (decl);
8420
8421   /* Plain overloading: will not be grok'd by grokclassfn.  */
8422   if (! ctype && ! processing_template_decl
8423       && DECL_LANGUAGE (decl) != lang_c
8424       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8425     set_mangled_name_for_decl (decl);
8426
8427   if (funcdef_flag)
8428     /* Make the init_value nonzero so pushdecl knows this is not
8429        tentative.  error_mark_node is replaced later with the BLOCK.  */
8430     DECL_INITIAL (decl) = error_mark_node;
8431
8432   /* Caller will do the rest of this.  */
8433   if (check < 0)
8434     return decl;
8435
8436   if (check && funcdef_flag)
8437     DECL_INITIAL (decl) = error_mark_node;
8438
8439   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8440     {
8441       tree tmp;
8442       /* Just handle constructors here.  We could do this
8443          inside the following if stmt, but I think
8444          that the code is more legible by breaking this
8445          case out.  See comments below for what each of
8446          the following calls is supposed to do.  */
8447       DECL_CONSTRUCTOR_P (decl) = 1;
8448
8449       grokclassfn (ctype, decl, flags, quals);
8450
8451       decl = check_explicit_specialization (orig_declarator, decl,
8452                                             template_count, 
8453                                             2 * (funcdef_flag != 0) + 
8454                                             4 * (friendp != 0));
8455       if (decl == error_mark_node)
8456         return NULL_TREE;
8457
8458       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8459           && check)
8460         {
8461           tmp = check_classfn (ctype, decl);
8462
8463           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8464             tmp = DECL_TEMPLATE_RESULT(tmp);
8465
8466           if (tmp && DECL_ARTIFICIAL (tmp))
8467             cp_error ("definition of implicitly-declared `%D'", tmp);
8468           if (tmp && duplicate_decls (decl, tmp))
8469             return tmp;
8470         }
8471       if (! grok_ctor_properties (ctype, decl))
8472         return NULL_TREE;
8473     }
8474   else
8475     {
8476       tree tmp;
8477
8478       /* Function gets the ugly name, field gets the nice one.
8479          This call may change the type of the function (because
8480          of default parameters)!  */
8481       if (ctype != NULL_TREE)
8482         grokclassfn (ctype, decl, flags, quals);
8483
8484       decl = check_explicit_specialization (orig_declarator, decl,
8485                                             template_count, 
8486                                             2 * (funcdef_flag != 0) + 
8487                                             4 * (friendp != 0));
8488       if (decl == error_mark_node)
8489         return NULL_TREE;
8490
8491       if (ctype != NULL_TREE
8492           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8493           && check)
8494         {
8495           tmp = check_classfn (ctype, decl);
8496
8497           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8498             tmp = DECL_TEMPLATE_RESULT (tmp);
8499               
8500           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8501               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8502             {
8503               /* Remove the `this' parm added by grokclassfn.
8504                  XXX Isn't this done in start_function, too?  */
8505               revert_static_member_fn (&decl, NULL, NULL);
8506               last_function_parms = TREE_CHAIN (last_function_parms);
8507             }
8508           if (tmp && DECL_ARTIFICIAL (tmp))
8509             cp_error ("definition of implicitly-declared `%D'", tmp);
8510           if (tmp)
8511             {
8512               /* Attempt to merge the declarations.  This can fail, in
8513                  the case of some illegal specialization declarations.  */
8514               if (!duplicate_decls (decl, tmp))
8515                 cp_error ("no `%#D' member function declared in class `%T'",
8516                           decl, ctype);
8517               return tmp;
8518             }
8519         }
8520
8521       if (ctype == NULL_TREE || check)
8522         return decl;
8523
8524       if (virtualp)
8525         {
8526           DECL_VIRTUAL_P (decl) = 1;
8527           if (DECL_VINDEX (decl) == NULL_TREE)
8528             DECL_VINDEX (decl) = error_mark_node;
8529           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8530         }
8531     }
8532   return decl;
8533 }
8534
8535 static tree
8536 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8537      tree type;
8538      tree declarator;
8539      RID_BIT_TYPE *specbits_in;
8540      int initialized;
8541      int constp;
8542      tree in_namespace;
8543 {
8544   tree decl;
8545   RID_BIT_TYPE specbits;
8546
8547   specbits = *specbits_in;
8548
8549   if (TREE_CODE (type) == OFFSET_TYPE)
8550     {
8551       /* If you declare a static member so that it
8552          can be initialized, the code will reach here.  */
8553       tree basetype = TYPE_OFFSET_BASETYPE (type);
8554       type = TREE_TYPE (type);
8555       decl = build_lang_decl (VAR_DECL, declarator, type);
8556       DECL_CONTEXT (decl) = basetype;
8557       DECL_CLASS_CONTEXT (decl) = basetype;
8558       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8559     }
8560   else
8561     {
8562       tree context;
8563
8564       if (in_namespace)
8565         context = in_namespace;
8566       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8567         context = current_namespace;
8568       else
8569         context = NULL_TREE;
8570
8571       if (processing_template_decl) 
8572         {
8573           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8574              we can call push_template_decl.  */
8575           push_permanent_obstack ();
8576           decl = build_lang_decl (VAR_DECL, declarator, type);
8577           pop_obstacks ();
8578         }
8579       else
8580         decl = build_decl (VAR_DECL, declarator, type);
8581
8582       if (context)
8583         set_decl_namespace (decl, context, 0);
8584
8585       context = DECL_CONTEXT (decl);
8586       if (declarator && context && current_lang_name != lang_name_c)
8587         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8588     }
8589
8590   if (in_namespace)
8591     set_decl_namespace (decl, in_namespace, 0);
8592
8593   if (RIDBIT_SETP (RID_EXTERN, specbits))
8594     {
8595       DECL_THIS_EXTERN (decl) = 1;
8596       DECL_EXTERNAL (decl) = !initialized;
8597     }
8598
8599   /* In class context, static means one per class,
8600      public access, and static storage.  */
8601   if (DECL_CLASS_SCOPE_P (decl))
8602     {
8603       TREE_PUBLIC (decl) = 1;
8604       TREE_STATIC (decl) = 1;
8605       DECL_EXTERNAL (decl) = 0;
8606     }
8607   /* At top level, either `static' or no s.c. makes a definition
8608      (perhaps tentative), and absence of `static' makes it public.  */
8609   else if (toplevel_bindings_p ())
8610     {
8611       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8612                             && (DECL_THIS_EXTERN (decl) || ! constp));
8613       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8614     }
8615   /* Not at top level, only `static' makes a static definition.  */
8616   else
8617     {
8618       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8619       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8620     }
8621
8622   if (TREE_PUBLIC (decl))
8623     {
8624       /* [basic.link]: A name with no linkage (notably, the name of a class
8625          or enumeration declared in a local scope) shall not be used to
8626          declare an entity with linkage.
8627
8628          Only check this for public decls for now.  */
8629       tree t = no_linkage_check (TREE_TYPE (decl));
8630       if (t)
8631         {
8632           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8633             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8634           else
8635             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8636                         decl, t);
8637         }
8638     }
8639
8640   return decl;
8641 }
8642
8643 /* Create and return a canonical pointer to member function type, for
8644    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8645
8646 tree
8647 build_ptrmemfunc_type (type)
8648      tree type;
8649 {
8650   tree fields[4];
8651   tree t;
8652   tree u;
8653   tree unqualified_variant = NULL_TREE;
8654
8655   /* If a canonical type already exists for this type, use it.  We use
8656      this method instead of type_hash_canon, because it only does a
8657      simple equality check on the list of field members.  */
8658
8659   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8660     return t;
8661
8662   /* Make sure that we always have the unqualified pointer-to-member
8663      type first.  */
8664   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8665     unqualified_variant 
8666       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8667
8668   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8669
8670   u = make_lang_type (UNION_TYPE);
8671   SET_IS_AGGR_TYPE (u, 0);
8672   fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8673   fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8674                                delta_type_node);
8675   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8676   TYPE_NAME (u) = NULL_TREE;
8677
8678   t = make_lang_type (RECORD_TYPE);
8679
8680   /* Let the front-end know this is a pointer to member function...  */
8681   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8682   /* ... and not really an aggregate.  */
8683   SET_IS_AGGR_TYPE (t, 0);
8684
8685   fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8686                                delta_type_node);
8687   fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8688                                delta_type_node);
8689   fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8690   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8691
8692   pop_obstacks ();
8693
8694   /* Zap out the name so that the back-end will give us the debugging
8695      information for this anonymous RECORD_TYPE.  */
8696   TYPE_NAME (t) = NULL_TREE;
8697
8698   /* If this is not the unqualified form of this pointer-to-member
8699      type, set the TYPE_MAIN_VARIANT for this type to be the
8700      unqualified type.  Since they are actually RECORD_TYPEs that are
8701      not variants of each other, we must do this manually.  */
8702   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8703     {
8704       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8705       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8706       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8707       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8708     }
8709
8710   /* Cache this pointer-to-member type so that we can find it again
8711      later.  */
8712   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8713
8714   /* Seems to be wanted.  */
8715   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8716
8717   return t;
8718 }
8719
8720 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8721    Check to see that the definition is valid.  Issue appropriate error
8722    messages.  Return 1 if the definition is particularly bad, or 0
8723    otherwise.  */
8724
8725 int
8726 check_static_variable_definition (decl, type)
8727      tree decl;
8728      tree type;
8729 {
8730   /* Motion 10 at San Diego: If a static const integral data member is
8731      initialized with an integral constant expression, the initializer
8732      may appear either in the declaration (within the class), or in
8733      the definition, but not both.  If it appears in the class, the
8734      member is a member constant.  The file-scope definition is always
8735      required.  */
8736   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8737     {
8738       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8739                 type);
8740       /* If we just return the declaration, crashes will sometimes
8741          occur.  We therefore return void_type_node, as if this was a
8742          friend declaration, to cause callers to completely ignore
8743          this declaration.  */
8744       return 1;
8745     }
8746   else if (!CP_TYPE_CONST_P (type))
8747     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8748               decl);
8749   else if (pedantic && !INTEGRAL_TYPE_P (type))
8750     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8751
8752   return 0;
8753 }
8754
8755 /* Given declspecs and a declarator,
8756    determine the name and type of the object declared
8757    and construct a ..._DECL node for it.
8758    (In one case we can return a ..._TYPE node instead.
8759     For invalid input we sometimes return 0.)
8760
8761    DECLSPECS is a chain of tree_list nodes whose value fields
8762     are the storage classes and type specifiers.
8763
8764    DECL_CONTEXT says which syntactic context this declaration is in:
8765      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8766      FUNCDEF for a function definition.  Like NORMAL but a few different
8767       error messages in each case.  Return value may be zero meaning
8768       this definition is too screwy to try to parse.
8769      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8770       handle member functions (which have FIELD context).
8771       Return value may be zero meaning this definition is too screwy to
8772       try to parse.
8773      PARM for a parameter declaration (either within a function prototype
8774       or before a function body).  Make a PARM_DECL, or return void_type_node.
8775      CATCHPARM for a parameter declaration before a catch clause.
8776      TYPENAME if for a typename (in a cast or sizeof).
8777       Don't make a DECL node; just return the ..._TYPE node.
8778      FIELD for a struct or union field; make a FIELD_DECL.
8779      BITFIELD for a field with specified width.
8780    INITIALIZED is 1 if the decl has an initializer.
8781
8782    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8783    normal attributes in TREE_PURPOSE, or NULL_TREE.
8784
8785    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8786    It may also be so in the PARM case, for a prototype where the
8787    argument type is specified but not the name.
8788
8789    This function is where the complicated C meanings of `static'
8790    and `extern' are interpreted.
8791
8792    For C++, if there is any monkey business to do, the function which
8793    calls this one must do it, i.e., prepending instance variables,
8794    renaming overloaded function names, etc.
8795
8796    Note that for this C++, it is an error to define a method within a class
8797    which does not belong to that class.
8798
8799    Except in the case where SCOPE_REFs are implicitly known (such as
8800    methods within a class being redundantly qualified),
8801    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8802    (class_name::decl_name).  The caller must also deal with this.
8803
8804    If a constructor or destructor is seen, and the context is FIELD,
8805    then the type gains the attribute TREE_HAS_x.  If such a declaration
8806    is erroneous, NULL_TREE is returned.
8807
8808    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8809    function, these are the qualifiers to give to the `this' pointer.
8810
8811    May return void_type_node if the declarator turned out to be a friend.
8812    See grokfield for details.  */
8813
8814 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8815
8816 tree
8817 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8818      tree declspecs;
8819      tree declarator;
8820      enum decl_context decl_context;
8821      int initialized;
8822      tree attrlist;
8823 {
8824   RID_BIT_TYPE specbits;
8825   int nclasses = 0;
8826   tree spec;
8827   tree type = NULL_TREE;
8828   int longlong = 0;
8829   int constp;
8830   int restrictp;
8831   int volatilep;
8832   int type_quals;
8833   int virtualp, explicitp, friendp, inlinep, staticp;
8834   int explicit_int = 0;
8835   int explicit_char = 0;
8836   int defaulted_int = 0;
8837   tree typedef_decl = NULL_TREE;
8838   const char *name;
8839   tree typedef_type = NULL_TREE;
8840   int funcdef_flag = 0;
8841   enum tree_code innermost_code = ERROR_MARK;
8842   int bitfield = 0;
8843 #if 0
8844   /* See the code below that used this.  */
8845   tree decl_machine_attr = NULL_TREE;
8846 #endif
8847   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8848      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8849   tree init = NULL_TREE;
8850
8851   /* Keep track of what sort of function is being processed
8852      so that we can warn about default return values, or explicit
8853      return values which do not match prescribed defaults.  */
8854   enum return_types return_type = return_normal;
8855
8856   tree dname = NULL_TREE;
8857   tree ctype = current_class_type;
8858   tree ctor_return_type = NULL_TREE;
8859   enum overload_flags flags = NO_SPECIAL;
8860   tree quals = NULL_TREE;
8861   tree raises = NULL_TREE;
8862   int template_count = 0;
8863   tree in_namespace = NULL_TREE;
8864   tree inner_attrs;
8865   int ignore_attrs;
8866
8867   RIDBIT_RESET_ALL (specbits);
8868   if (decl_context == FUNCDEF)
8869     funcdef_flag = 1, decl_context = NORMAL;
8870   else if (decl_context == MEMFUNCDEF)
8871     funcdef_flag = -1, decl_context = FIELD;
8872   else if (decl_context == BITFIELD)
8873     bitfield = 1, decl_context = FIELD;
8874
8875   /* Look inside a declarator for the name being declared
8876      and get it as a string, for an error message.  */
8877   {
8878     tree *next = &declarator;
8879     register tree decl;
8880     name = NULL;
8881
8882     while (next && *next)
8883       {
8884         decl = *next;
8885         switch (TREE_CODE (decl))
8886           {
8887           case TREE_LIST:
8888             /* For attributes.  */
8889             next = &TREE_VALUE (decl);
8890             break;
8891
8892           case COND_EXPR:
8893             ctype = NULL_TREE;
8894             next = &TREE_OPERAND (decl, 0);
8895             break;
8896
8897           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8898             {
8899               tree name = TREE_OPERAND (decl, 0);
8900               tree rename = NULL_TREE;
8901
8902               my_friendly_assert (flags == NO_SPECIAL, 152);
8903               flags = DTOR_FLAG;
8904               return_type = return_dtor;
8905               if (TREE_CODE (name) == TYPE_DECL)
8906                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8907               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8908               if (ctype == NULL_TREE)
8909                 {
8910                   if (current_class_type == NULL_TREE)
8911                     {
8912                       error ("destructors must be member functions");
8913                       flags = NO_SPECIAL;
8914                     }
8915                   else
8916                     {
8917                       tree t = constructor_name (current_class_name);
8918                       if (t != name)
8919                         rename = t;
8920                     }
8921                 }
8922               else
8923                 {
8924                   tree t = constructor_name (ctype);
8925                   if (t != name)
8926                     rename = t;
8927                 }
8928
8929               if (rename)
8930                 {
8931                   cp_error ("destructor `%T' must match class name `%T'",
8932                             name, rename);
8933                   TREE_OPERAND (decl, 0) = rename;
8934                 }
8935               next = &name;
8936             }
8937             break;
8938
8939           case ADDR_EXPR:       /* C++ reference declaration */
8940             /* Fall through. */
8941           case ARRAY_REF:
8942           case INDIRECT_REF:
8943             ctype = NULL_TREE;
8944             innermost_code = TREE_CODE (decl);
8945             next = &TREE_OPERAND (decl, 0);
8946             break;
8947
8948           case CALL_EXPR:
8949             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8950               {
8951                 /* This is actually a variable declaration using
8952                    constructor syntax.  We need to call start_decl and
8953                    cp_finish_decl so we can get the variable
8954                    initialized...  */
8955
8956                 tree attributes, prefix_attributes;
8957
8958                 *next = TREE_OPERAND (decl, 0);
8959                 init = CALL_DECLARATOR_PARMS (decl);
8960
8961                 if (attrlist)
8962                   {
8963                     attributes = TREE_PURPOSE (attrlist);
8964                     prefix_attributes = TREE_VALUE (attrlist);
8965                   }
8966                 else
8967                   {
8968                     attributes = NULL_TREE;
8969                     prefix_attributes = NULL_TREE;
8970                   }
8971
8972                 decl = start_decl (declarator, declspecs, 1,
8973                                    attributes, prefix_attributes);
8974                 if (decl)
8975                   {
8976                     /* Look for __unused__ attribute */
8977                     if (TREE_USED (TREE_TYPE (decl)))
8978                       TREE_USED (decl) = 1;
8979                     finish_decl (decl, init, NULL_TREE);
8980                   }
8981                 else
8982                   cp_error ("invalid declarator");
8983                 return 0;
8984               }
8985             innermost_code = TREE_CODE (decl);
8986             if (decl_context == FIELD && ctype == NULL_TREE)
8987               ctype = current_class_type;
8988             if (ctype
8989                 && TREE_OPERAND (decl, 0)
8990                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8991                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
8992                          == constructor_name_full (ctype))
8993                         || (DECL_NAME (TREE_OPERAND (decl, 0))
8994                             == constructor_name (ctype)))))
8995               TREE_OPERAND (decl, 0) = constructor_name (ctype);
8996             next = &TREE_OPERAND (decl, 0);
8997             decl = *next;
8998             if (ctype != NULL_TREE
8999                 && decl != NULL_TREE && flags != DTOR_FLAG
9000                 && decl == constructor_name (ctype))
9001               {
9002                 return_type = return_ctor;
9003                 ctor_return_type = ctype;
9004               }
9005             ctype = NULL_TREE;
9006             break;
9007             
9008           case TEMPLATE_ID_EXPR:
9009               {
9010                 tree fns = TREE_OPERAND (decl, 0);
9011
9012                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9013                   fns = TREE_OPERAND (fns, 0);
9014
9015                 dname = fns;
9016                 if (TREE_CODE (dname) == COMPONENT_REF)
9017                   dname = TREE_OPERAND (dname, 1);
9018                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9019                   {
9020                     my_friendly_assert (is_overloaded_fn (dname),
9021                                         19990331);
9022                     dname = DECL_NAME (get_first_fn (dname));
9023                   }
9024               }
9025           /* Fall through. */
9026
9027           case IDENTIFIER_NODE:
9028             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9029               dname = decl;
9030
9031             next = 0;
9032
9033             if (is_rid (dname))
9034               {
9035                 cp_error ("declarator-id missing; using reserved word `%D'",
9036                           dname);
9037                 name = IDENTIFIER_POINTER (dname);
9038               }
9039             if (! IDENTIFIER_OPNAME_P (dname)
9040                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9041                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9042               name = IDENTIFIER_POINTER (dname);
9043             else
9044               {
9045                 if (IDENTIFIER_TYPENAME_P (dname))
9046                   {
9047                     my_friendly_assert (flags == NO_SPECIAL, 154);
9048                     flags = TYPENAME_FLAG;
9049                     ctor_return_type = TREE_TYPE (dname);
9050                     return_type = return_conversion;
9051                   }
9052                 name = operator_name_string (dname);
9053               }
9054             break;
9055
9056             /* C++ extension */
9057           case SCOPE_REF:
9058             {
9059               /* Perform error checking, and decide on a ctype.  */
9060               tree cname = TREE_OPERAND (decl, 0);
9061               if (cname == NULL_TREE)
9062                 ctype = NULL_TREE;
9063               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9064                 {
9065                   ctype = NULL_TREE;
9066                   in_namespace = TREE_OPERAND (decl, 0);
9067                   TREE_OPERAND (decl, 0) = NULL_TREE;
9068                 }
9069               else if (! is_aggr_type (cname, 1))
9070                 TREE_OPERAND (decl, 0) = NULL_TREE;
9071               /* Must test TREE_OPERAND (decl, 1), in case user gives
9072                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9073               else if (TREE_OPERAND (decl, 1)
9074                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9075                 ctype = cname;
9076               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9077                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9078                 {
9079                   cp_error ("`%T::%D' is not a valid declarator", cname,
9080                             TREE_OPERAND (decl, 1));
9081                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9082                             cname, TREE_OPERAND (decl, 1));
9083                   return void_type_node;
9084                 }
9085               else if (ctype == NULL_TREE)
9086                 ctype = cname;
9087               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9088                 TREE_OPERAND (decl, 0) = ctype;
9089               else
9090                 {
9091                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9092                     {
9093                       cp_error ("type `%T' is not derived from type `%T'",
9094                                 cname, ctype);
9095                       TREE_OPERAND (decl, 0) = NULL_TREE;
9096                     }
9097                   else
9098                     ctype = cname;
9099                 }
9100
9101               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9102                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9103                        == constructor_name_full (ctype))
9104                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9105                           == constructor_name (ctype))))
9106                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9107               next = &TREE_OPERAND (decl, 1);
9108               decl = *next;
9109               if (ctype)
9110                 {
9111                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9112                       && constructor_name (ctype) == decl)
9113                     {
9114                       return_type = return_ctor;
9115                       ctor_return_type = ctype;
9116                     }
9117                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9118                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9119                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9120                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9121                     {
9122                       return_type = return_dtor;
9123                       ctor_return_type = ctype;
9124                       flags = DTOR_FLAG;
9125                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9126                       next = &TREE_OPERAND (decl, 0);
9127                     }
9128                 }
9129             }
9130             break;
9131
9132           case ERROR_MARK:
9133             next = 0;
9134             break;
9135
9136           case TYPE_DECL:
9137             /* Parse error puts this typespec where
9138                a declarator should go.  */
9139             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9140             if (TREE_TYPE (decl) == current_class_type)
9141               cp_error ("  perhaps you want `%T' for a constructor",
9142                         current_class_name);
9143             dname = DECL_NAME (decl);
9144             name = IDENTIFIER_POINTER (dname);
9145
9146             /* Avoid giving two errors for this.  */
9147             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9148
9149             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9150                                         declspecs);
9151             *next = dname;
9152             next = 0;
9153             break;
9154
9155           default:
9156             cp_compiler_error ("`%D' as declarator", decl);
9157             return 0; /* We used to do a 155 abort here.  */
9158           }
9159       }
9160     if (name == NULL)
9161       name = "type name";
9162   }
9163
9164   /* A function definition's declarator must have the form of
9165      a function declarator.  */
9166
9167   if (funcdef_flag && innermost_code != CALL_EXPR)
9168     return 0;
9169
9170   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9171       && innermost_code != CALL_EXPR
9172       && ! (ctype && declspecs == NULL_TREE))
9173     {
9174       cp_error ("declaration of `%D' as non-function", dname);
9175       return void_type_node;
9176     }
9177
9178   /* Anything declared one level down from the top level
9179      must be one of the parameters of a function
9180      (because the body is at least two levels down).  */
9181
9182   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9183      by not allowing C++ class definitions to specify their parameters
9184      with xdecls (must be spec.d in the parmlist).
9185
9186      Since we now wait to push a class scope until we are sure that
9187      we are in a legitimate method context, we must set oldcname
9188      explicitly (since current_class_name is not yet alive).
9189
9190      We also want to avoid calling this a PARM if it is in a namespace.  */
9191
9192   if (decl_context == NORMAL && !toplevel_bindings_p ())
9193     {
9194       struct binding_level *b = current_binding_level;
9195       current_binding_level = b->level_chain;
9196       if (current_binding_level != 0 && toplevel_bindings_p ())
9197         decl_context = PARM;
9198       current_binding_level = b;
9199     }
9200
9201   /* Look through the decl specs and record which ones appear.
9202      Some typespecs are defined as built-in typenames.
9203      Others, the ones that are modifiers of other types,
9204      are represented by bits in SPECBITS: set the bits for
9205      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9206
9207      If there is a typedef name or a type, store the type in TYPE.
9208      This includes builtin typedefs such as `int'.
9209
9210      Set EXPLICIT_INT if the type is `int' or `char' and did not
9211      come from a user typedef.
9212
9213      Set LONGLONG if `long' is mentioned twice.
9214
9215      For C++, constructors and destructors have their own fast treatment.  */
9216
9217   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9218     {
9219       register int i;
9220       register tree id;
9221
9222       /* Certain parse errors slip through.  For example,
9223          `int class;' is not caught by the parser. Try
9224          weakly to recover here.  */
9225       if (TREE_CODE (spec) != TREE_LIST)
9226         return 0;
9227
9228       id = TREE_VALUE (spec);
9229
9230       if (TREE_CODE (id) == IDENTIFIER_NODE)
9231         {
9232           if (id == ridpointers[(int) RID_INT]
9233               || id == ridpointers[(int) RID_CHAR]
9234               || id == ridpointers[(int) RID_BOOL]
9235               || id == ridpointers[(int) RID_WCHAR])
9236             {
9237               if (type)
9238                 {
9239                   if (id == ridpointers[(int) RID_BOOL])
9240                     error ("`bool' is now a keyword");
9241                   else
9242                     cp_error ("extraneous `%T' ignored", id);
9243                 }
9244               else
9245                 {
9246                   if (id == ridpointers[(int) RID_INT])
9247                     explicit_int = 1;
9248                   else if (id == ridpointers[(int) RID_CHAR])
9249                     explicit_char = 1;
9250                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9251                 }
9252               goto found;
9253             }
9254           /* C++ aggregate types.  */
9255           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9256             {
9257               if (type)
9258                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9259               else
9260                 type = IDENTIFIER_TYPE_VALUE (id);
9261               goto found;
9262             }
9263
9264           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9265             {
9266               if (ridpointers[i] == id)
9267                 {
9268                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9269                     {
9270                       if (pedantic && ! in_system_header && warn_long_long)
9271                         pedwarn ("ANSI C++ does not support `long long'");
9272                       if (longlong)
9273                         error ("`long long long' is too long for GCC");
9274                       else
9275                         longlong = 1;
9276                     }
9277                   else if (RIDBIT_SETP (i, specbits))
9278                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9279                   RIDBIT_SET (i, specbits);
9280                   goto found;
9281                 }
9282             }
9283         }
9284       /* C++ aggregate types.  */
9285       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9286         {
9287           if (type)
9288             cp_error ("multiple declarations `%T' and `%T'", type,
9289                       TREE_TYPE (id));
9290           else
9291             {
9292               type = TREE_TYPE (id);
9293               TREE_VALUE (spec) = type;
9294             }
9295           goto found;
9296         }
9297       if (type)
9298         error ("two or more data types in declaration of `%s'", name);
9299       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9300         {
9301           register tree t = lookup_name (id, 1);
9302           if (!t || TREE_CODE (t) != TYPE_DECL)
9303             error ("`%s' fails to be a typedef or built in type",
9304                    IDENTIFIER_POINTER (id));
9305           else
9306             {
9307               type = TREE_TYPE (t);
9308 #if 0
9309               /* See the code below that used this.  */
9310               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9311 #endif
9312               typedef_decl = t;
9313             }
9314         }
9315       else if (id != error_mark_node)
9316         /* Can't change CLASS nodes into RECORD nodes here!  */
9317         type = id;
9318
9319     found: ;
9320     }
9321
9322   typedef_type = type;
9323
9324   /* No type at all: default to `int', and set DEFAULTED_INT
9325      because it was not a user-defined typedef.  */
9326
9327   if (type == NULL_TREE
9328       && (RIDBIT_SETP (RID_SIGNED, specbits)
9329           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9330           || RIDBIT_SETP (RID_LONG, specbits)
9331           || RIDBIT_SETP (RID_SHORT, specbits)))
9332     {
9333       /* These imply 'int'.  */
9334       type = integer_type_node;
9335       defaulted_int = 1;
9336     }
9337
9338   if (type == NULL_TREE)
9339     {
9340       explicit_int = -1;
9341       if (return_type == return_dtor)
9342         type = void_type_node;
9343       else if (return_type == return_ctor)
9344         type = build_pointer_type (ctor_return_type);
9345       else if (return_type == return_conversion)
9346         type = ctor_return_type;
9347       else
9348         {
9349           /* We handle `main' specially here, because 'main () { }' is so
9350              common.  With no options, it is allowed.  With -Wreturn-type,
9351              it is a warning.  It is only an error with -pedantic-errors.  */
9352           int is_main = (funcdef_flag
9353                          && MAIN_NAME_P (dname)
9354                          && ctype == NULL_TREE
9355                          && in_namespace == NULL_TREE
9356                          && current_namespace == global_namespace);
9357
9358           if (in_system_header || flag_ms_extensions)
9359             /* Allow it, sigh.  */;
9360           else if (pedantic || ! is_main)
9361             cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type",
9362                         dname);
9363           else if (warn_return_type)
9364             cp_warning ("ANSI C++ forbids declaration `%D' with no type",
9365                         dname);
9366
9367           type = integer_type_node;
9368         }
9369     }
9370   else if (return_type == return_dtor)
9371     {
9372       error ("return type specification for destructor invalid");
9373       type = void_type_node;
9374     }
9375   else if (return_type == return_ctor)
9376     {
9377       error ("return type specification for constructor invalid");
9378       type = build_pointer_type (ctor_return_type);
9379     }
9380   else if (return_type == return_conversion)
9381     {
9382       if (!same_type_p (type, ctor_return_type))
9383         cp_error ("operator `%T' declared to return `%T'",
9384                   ctor_return_type, type);
9385       else
9386         cp_pedwarn ("return type specified for `operator %T'",
9387                     ctor_return_type);
9388
9389       type = ctor_return_type;
9390     }
9391
9392   ctype = NULL_TREE;
9393
9394   /* Now process the modifiers that were specified
9395      and check for invalid combinations.  */
9396
9397   /* Long double is a special combination.  */
9398
9399   if (RIDBIT_SETP (RID_LONG, specbits)
9400       && TYPE_MAIN_VARIANT (type) == double_type_node)
9401     {
9402       RIDBIT_RESET (RID_LONG, specbits);
9403       type = build_qualified_type (long_double_type_node, 
9404                                    CP_TYPE_QUALS (type));
9405     }
9406
9407   /* Check all other uses of type modifiers.  */
9408
9409   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9410       || RIDBIT_SETP (RID_SIGNED, specbits)
9411       || RIDBIT_SETP (RID_LONG, specbits)
9412       || RIDBIT_SETP (RID_SHORT, specbits))
9413     {
9414       int ok = 0;
9415
9416       if (TREE_CODE (type) == REAL_TYPE)
9417         error ("short, signed or unsigned invalid for `%s'", name);
9418       else if (TREE_CODE (type) != INTEGER_TYPE)
9419         error ("long, short, signed or unsigned invalid for `%s'", name);
9420       else if (RIDBIT_SETP (RID_LONG, specbits)
9421                && RIDBIT_SETP (RID_SHORT, specbits))
9422         error ("long and short specified together for `%s'", name);
9423       else if ((RIDBIT_SETP (RID_LONG, specbits)
9424                 || RIDBIT_SETP (RID_SHORT, specbits))
9425                && explicit_char)
9426         error ("long or short specified with char for `%s'", name);
9427       else if ((RIDBIT_SETP (RID_LONG, specbits)
9428                 || RIDBIT_SETP (RID_SHORT, specbits))
9429                && TREE_CODE (type) == REAL_TYPE)
9430         error ("long or short specified with floating type for `%s'", name);
9431       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9432                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9433         error ("signed and unsigned given together for `%s'", name);
9434       else
9435         {
9436           ok = 1;
9437           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9438             {
9439               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9440                        name);
9441               if (flag_pedantic_errors)
9442                 ok = 0;
9443             }
9444         }
9445
9446       /* Discard the type modifiers if they are invalid.  */
9447       if (! ok)
9448         {
9449           RIDBIT_RESET (RID_UNSIGNED, specbits);
9450           RIDBIT_RESET (RID_SIGNED, specbits);
9451           RIDBIT_RESET (RID_LONG, specbits);
9452           RIDBIT_RESET (RID_SHORT, specbits);
9453           longlong = 0;
9454         }
9455     }
9456
9457   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9458       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9459     {
9460       error ("complex invalid for `%s'", name);
9461       RIDBIT_RESET (RID_COMPLEX, specbits);
9462     }
9463
9464   /* Decide whether an integer type is signed or not.
9465      Optionally treat bitfields as signed by default.  */
9466   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9467       /* [class.bit]
9468
9469          It is implementation-defined whether a plain (neither
9470          explicitly signed or unsigned) char, short, int, or long
9471          bit-field is signed or unsigned.
9472              
9473          Naturally, we extend this to long long as well.  Note that
9474          this does not include wchar_t.  */
9475       || (bitfield && !flag_signed_bitfields
9476           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9477           /* A typedef for plain `int' without `signed' can be
9478              controlled just like plain `int', but a typedef for
9479              `signed int' cannot be so controlled.  */
9480           && !(typedef_decl 
9481                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9482           && (TREE_CODE (type) == INTEGER_TYPE
9483               || TREE_CODE (type) == CHAR_TYPE)
9484           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9485     {
9486       if (longlong)
9487         type = long_long_unsigned_type_node;
9488       else if (RIDBIT_SETP (RID_LONG, specbits))
9489         type = long_unsigned_type_node;
9490       else if (RIDBIT_SETP (RID_SHORT, specbits))
9491         type = short_unsigned_type_node;
9492       else if (type == char_type_node)
9493         type = unsigned_char_type_node;
9494       else if (typedef_decl)
9495         type = unsigned_type (type);
9496       else
9497         type = unsigned_type_node;
9498     }
9499   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9500            && type == char_type_node)
9501     type = signed_char_type_node;
9502   else if (longlong)
9503     type = long_long_integer_type_node;
9504   else if (RIDBIT_SETP (RID_LONG, specbits))
9505     type = long_integer_type_node;
9506   else if (RIDBIT_SETP (RID_SHORT, specbits))
9507     type = short_integer_type_node;
9508
9509   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9510     {
9511       /* If we just have "complex", it is equivalent to
9512          "complex double", but if any modifiers at all are specified it is
9513          the complex form of TYPE.  E.g, "complex short" is
9514          "complex short int".  */
9515
9516       if (defaulted_int && ! longlong
9517           && ! (RIDBIT_SETP (RID_LONG, specbits)
9518                 || RIDBIT_SETP (RID_SHORT, specbits)
9519                 || RIDBIT_SETP (RID_SIGNED, specbits)
9520                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9521         type = complex_double_type_node;
9522       else if (type == integer_type_node)
9523         type = complex_integer_type_node;
9524       else if (type == float_type_node)
9525         type = complex_float_type_node;
9526       else if (type == double_type_node)
9527         type = complex_double_type_node;
9528       else if (type == long_double_type_node)
9529         type = complex_long_double_type_node;
9530       else
9531         type = build_complex_type (type);
9532     }
9533
9534   if (return_type == return_conversion 
9535       && (RIDBIT_SETP (RID_CONST, specbits)
9536           || RIDBIT_SETP (RID_VOLATILE, specbits)
9537           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9538     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9539               ctor_return_type);
9540
9541   /* Set CONSTP if this declaration is `const', whether by
9542      explicit specification or via a typedef.
9543      Likewise for VOLATILEP.  */
9544
9545   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9546   restrictp = 
9547     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9548   volatilep = 
9549     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9550   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9551                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9552                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9553   type = cp_build_qualified_type (type, type_quals);
9554   staticp = 0;
9555   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9556   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9557   RIDBIT_RESET (RID_VIRTUAL, specbits);
9558   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9559   RIDBIT_RESET (RID_EXPLICIT, specbits);
9560
9561   if (RIDBIT_SETP (RID_STATIC, specbits))
9562     staticp = 1 + (decl_context == FIELD);
9563
9564   if (virtualp && staticp == 2)
9565     {
9566       cp_error ("member `%D' cannot be declared both virtual and static",
9567                 dname);
9568       staticp = 0;
9569     }
9570   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9571   RIDBIT_RESET (RID_FRIEND, specbits);
9572
9573   /* $7.1.2, Function specifiers */
9574   if (friendp && explicitp)
9575     error ("only declarations of constructors can be `explicit'");
9576
9577   if (RIDBIT_SETP (RID_MUTABLE, specbits))
9578     {
9579       if (decl_context == PARM)
9580         {
9581           error ("non-member `%s' cannot be declared `mutable'", name);
9582           RIDBIT_RESET (RID_MUTABLE, specbits);
9583         }
9584       else if (friendp || decl_context == TYPENAME)
9585         {
9586           error ("non-object member `%s' cannot be declared `mutable'", name);
9587           RIDBIT_RESET (RID_MUTABLE, specbits);
9588         }
9589     }
9590
9591   /* Warn if two storage classes are given. Default to `auto'.  */
9592
9593   if (RIDBIT_ANY_SET (specbits))
9594     {
9595       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9596       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9597       if (decl_context == PARM && nclasses > 0)
9598         error ("storage class specifiers invalid in parameter declarations");
9599       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9600         {
9601           if (decl_context == PARM)
9602             error ("typedef declaration invalid in parameter declaration");
9603           nclasses++;
9604         }
9605       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9606       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9607     }
9608
9609   /* Give error if `virtual' is used outside of class declaration.  */
9610   if (virtualp
9611       && (current_class_name == NULL_TREE || decl_context != FIELD))
9612     {
9613       error ("virtual outside class declaration");
9614       virtualp = 0;
9615     }
9616   if (current_class_name == NULL_TREE && RIDBIT_SETP (RID_MUTABLE, specbits))
9617     {
9618       error ("only members can be declared mutable");
9619       RIDBIT_RESET (RID_MUTABLE, specbits);
9620     }
9621
9622   /* Static anonymous unions are dealt with here.  */
9623   if (staticp && decl_context == TYPENAME
9624       && TREE_CODE (declspecs) == TREE_LIST
9625       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9626     decl_context = FIELD;
9627
9628   /* Warn about storage classes that are invalid for certain
9629      kinds of declarations (parameters, typenames, etc.).  */
9630
9631   if (nclasses > 1)
9632     error ("multiple storage classes in declaration of `%s'", name);
9633   else if (decl_context != NORMAL && nclasses > 0)
9634     {
9635       if ((decl_context == PARM || decl_context == CATCHPARM)
9636           && (RIDBIT_SETP (RID_REGISTER, specbits)
9637               || RIDBIT_SETP (RID_AUTO, specbits)))
9638         ;
9639       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9640         ;
9641       else if (decl_context == FIELD
9642                /* C++ allows static class elements  */
9643                && RIDBIT_SETP (RID_STATIC, specbits))
9644         /* C++ also allows inlines and signed and unsigned elements,
9645            but in those cases we don't come in here.  */
9646         ;
9647       else
9648         {
9649           if (decl_context == FIELD)
9650             {
9651               tree tmp = NULL_TREE;
9652               register int op = 0;
9653
9654               if (declarator)
9655                 {
9656                   /* Avoid trying to get an operand off an identifier node.  */ 
9657                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9658                     tmp = declarator;
9659                   else
9660                     tmp = TREE_OPERAND (declarator, 0);
9661                   op = IDENTIFIER_OPNAME_P (tmp);
9662                 }
9663               error ("storage class specified for %s `%s'",
9664                      op ? "member operator" : "field",
9665                      op ? operator_name_string (tmp) : name);
9666             }
9667           else
9668             error (((decl_context == PARM || decl_context == CATCHPARM)
9669                     ? "storage class specified for parameter `%s'"
9670                     : "storage class specified for typename"), name);
9671           RIDBIT_RESET (RID_REGISTER, specbits);
9672           RIDBIT_RESET (RID_AUTO, specbits);
9673           RIDBIT_RESET (RID_EXTERN, specbits);
9674         }
9675     }
9676   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9677     {
9678       if (toplevel_bindings_p ())
9679         {
9680           /* It's common practice (and completely valid) to have a const
9681              be initialized and declared extern.  */
9682           if (!(type_quals & TYPE_QUAL_CONST))
9683             warning ("`%s' initialized and declared `extern'", name);
9684         }
9685       else
9686         error ("`%s' has both `extern' and initializer", name);
9687     }
9688   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9689            && ! toplevel_bindings_p ())
9690     error ("nested function `%s' declared `extern'", name);
9691   else if (toplevel_bindings_p ())
9692     {
9693       if (RIDBIT_SETP (RID_AUTO, specbits))
9694         error ("top-level declaration of `%s' specifies `auto'", name);
9695     }
9696
9697   if (nclasses > 0 && friendp)
9698     error ("storage class specifiers invalid in friend function declarations");
9699
9700   /* Now figure out the structure of the declarator proper.
9701      Descend through it, creating more complex types, until we reach
9702      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9703
9704   inner_attrs = NULL_TREE;
9705   ignore_attrs = 0;  
9706
9707   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9708          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9709     {
9710       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9711          an INDIRECT_REF (for *...),
9712          a CALL_EXPR (for ...(...)),
9713          an identifier (for the name being declared)
9714          or a null pointer (for the place in an absolute declarator
9715          where the name was omitted).
9716          For the last two cases, we have just exited the loop.
9717
9718          For C++ it could also be
9719          a SCOPE_REF (for class :: ...).  In this case, we have converted
9720          sensible names to types, and those are the values we use to
9721          qualify the member name.
9722          an ADDR_EXPR (for &...),
9723          a BIT_NOT_EXPR (for destructors)
9724
9725          At this point, TYPE is the type of elements of an array,
9726          or for a function to return, or for a pointer to point to.
9727          After this sequence of ifs, TYPE is the type of the
9728          array or function or pointer, and DECLARATOR has had its
9729          outermost layer removed.  */
9730
9731       if (type == error_mark_node)
9732         {
9733           if (TREE_CODE (declarator) == SCOPE_REF)
9734             declarator = TREE_OPERAND (declarator, 1);
9735           else
9736             declarator = TREE_OPERAND (declarator, 0);
9737           continue;
9738         }
9739       if (quals != NULL_TREE
9740           && (declarator == NULL_TREE
9741               || TREE_CODE (declarator) != SCOPE_REF))
9742         {
9743           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9744             ctype = TYPE_METHOD_BASETYPE (type);
9745           if (ctype != NULL_TREE)
9746             {
9747               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9748               ctype = grok_method_quals (ctype, dummy, quals);
9749               type = TREE_TYPE (dummy);
9750               quals = NULL_TREE;
9751             }
9752         }
9753
9754       /* See the comment for the TREE_LIST case, below.  */
9755       if (ignore_attrs)
9756         ignore_attrs = 0;
9757       else if (inner_attrs)
9758         {
9759           decl_attributes (type, inner_attrs, NULL_TREE);
9760           inner_attrs = NULL_TREE;
9761         }
9762
9763       switch (TREE_CODE (declarator))
9764         {
9765         case TREE_LIST:
9766           {
9767             /* We encode a declarator with embedded attributes using
9768                a TREE_LIST.  The attributes apply to the declarator
9769                directly inside them, so we have to skip an iteration
9770                before applying them to the type.  If the declarator just
9771                inside is the declarator-id, we apply the attrs to the
9772                decl itself.  */
9773             inner_attrs = TREE_PURPOSE (declarator);
9774             ignore_attrs = 1;
9775             declarator = TREE_VALUE (declarator);
9776           }
9777           break;
9778
9779         case ARRAY_REF:
9780           {
9781             register tree itype = NULL_TREE;
9782             register tree size = TREE_OPERAND (declarator, 1);
9783             /* The index is a signed object `sizetype' bits wide.  */
9784             tree index_type = signed_type (sizetype);
9785
9786             declarator = TREE_OPERAND (declarator, 0);
9787
9788             /* Check for some types that there cannot be arrays of.  */
9789
9790             if (TREE_CODE (type) == VOID_TYPE)
9791               {
9792                 cp_error ("declaration of `%D' as array of voids", dname);
9793                 type = error_mark_node;
9794               }
9795
9796             if (TREE_CODE (type) == FUNCTION_TYPE)
9797               {
9798                 cp_error ("declaration of `%D' as array of functions", dname);
9799                 type = error_mark_node;
9800               }
9801
9802             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9803                you can't have arrays of references.  If we allowed them,
9804                then we'd be saying x[i] is valid for an array x, but
9805                then you'd have to ask: what does `*(x + i)' mean?  */
9806             if (TREE_CODE (type) == REFERENCE_TYPE)
9807               {
9808                 if (decl_context == TYPENAME)
9809                   cp_error ("cannot make arrays of references");
9810                 else
9811                   cp_error ("declaration of `%D' as array of references",
9812                             dname);
9813                 type = error_mark_node;
9814               }
9815
9816             if (TREE_CODE (type) == OFFSET_TYPE)
9817               {
9818                   cp_error ("declaration of `%D' as array of data members",
9819                             dname);
9820                 type = error_mark_node;
9821               }
9822
9823             if (TREE_CODE (type) == METHOD_TYPE)
9824               {
9825                 cp_error ("declaration of `%D' as array of function members",
9826                           dname);
9827                 type = error_mark_node;
9828               }
9829
9830             if (size == error_mark_node)
9831               type = error_mark_node;
9832             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9833               {
9834                 /* [dcl.array]
9835
9836                    the constant expressions that specify the bounds of
9837                    the arrays can be omitted only for the first member
9838                    of the sequence.  */
9839                 cp_error ("declaration of `%D' as multidimensional array",
9840                           dname);
9841                 cp_error ("must have bounds for all dimensions except the first");
9842                 type = error_mark_node;
9843               }
9844
9845             if (type == error_mark_node)
9846               continue;
9847
9848             /* VC++ spells a zero-sized array with [].  */
9849             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9850                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9851               size = integer_zero_node;
9852
9853             if (size)
9854               {
9855                 /* Must suspend_momentary here because the index
9856                    type may need to live until the end of the function.
9857                    For example, it is used in the declaration of a
9858                    variable which requires destructing at the end of
9859                    the function; then build_vec_delete will need this
9860                    value.  */
9861                 int yes = suspend_momentary ();
9862                 /* Might be a cast. */
9863                 if (TREE_CODE (size) == NOP_EXPR
9864                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9865                   size = TREE_OPERAND (size, 0);
9866                 if (TREE_READONLY_DECL_P (size))
9867                   size = decl_constant_value (size);
9868
9869                 /* If this involves a template parameter, it will be a
9870                    constant at instantiation time, but we don't know
9871                    what the value is yet.  Even if no template
9872                    parameters are involved, we may an expression that
9873                    is not a constant; we don't even simplify `1 + 2'
9874                    when processing a template.  */
9875                 if (processing_template_decl)
9876                   {
9877                     /* Resolve a qualified reference to an enumerator or
9878                        static const data member of ours.  */
9879                     if (TREE_CODE (size) == SCOPE_REF
9880                         && TREE_OPERAND (size, 0) == current_class_type)
9881                       {
9882                         tree t = lookup_field (current_class_type,
9883                                                TREE_OPERAND (size, 1), 0, 0);
9884                         if (t)
9885                           size = t;
9886                       }
9887
9888                     itype = build_index_type (build_min
9889                       (MINUS_EXPR, sizetype, size, integer_one_node));
9890                     goto dont_grok_size;
9891                   }
9892
9893                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9894                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9895                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9896                   {
9897                     cp_error ("size of array `%D' has non-integer type",
9898                               dname);
9899                     size = integer_one_node;
9900                   }
9901                 if (pedantic && integer_zerop (size))
9902                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9903                 if (TREE_CONSTANT (size))
9904                   {
9905                     int old_flag_pedantic_errors = flag_pedantic_errors;
9906                     int old_pedantic = pedantic;
9907                     pedantic = flag_pedantic_errors = 1;
9908                     /* Always give overflow errors on array subscripts.  */
9909                     constant_expression_warning (size);
9910                     pedantic = old_pedantic;
9911                     flag_pedantic_errors = old_flag_pedantic_errors;
9912                     if (INT_CST_LT (size, integer_zero_node))
9913                       {
9914                         cp_error ("size of array `%D' is negative", dname);
9915                         size = integer_one_node;
9916                       }
9917                   }
9918                 else
9919                   {
9920                     if (pedantic)
9921                       {
9922                         if (dname)
9923                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9924                                       dname);
9925                         else
9926                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9927                       }
9928                   }
9929
9930                 itype
9931                   = fold (build_binary_op (MINUS_EXPR,
9932                                            cp_convert (index_type, size),
9933                                            cp_convert (index_type,
9934                                                        integer_one_node)));
9935                 if (! TREE_CONSTANT (itype))
9936                   itype = variable_size (itype);
9937                 else if (TREE_OVERFLOW (itype))
9938                   {
9939                     error ("overflow in array dimension");
9940                     TREE_OVERFLOW (itype) = 0;
9941                   }
9942
9943                 itype = build_index_type (itype);
9944
9945               dont_grok_size:
9946                 resume_momentary (yes);
9947               }
9948
9949             type = build_cplus_array_type (type, itype);
9950             ctype = NULL_TREE;
9951           }
9952           break;
9953
9954         case CALL_EXPR:
9955           {
9956             tree arg_types;
9957             int funcdecl_p;
9958             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9959             tree inner_decl = TREE_OPERAND (declarator, 0);
9960
9961             /* Declaring a function type.
9962                Make sure we have a valid type for the function to return.  */
9963
9964             /* We now know that the TYPE_QUALS don't apply to the
9965                decl, but to its return type.  */
9966             type_quals = TYPE_UNQUALIFIED;
9967
9968             /* Warn about some types functions can't return.  */
9969
9970             if (TREE_CODE (type) == FUNCTION_TYPE)
9971               {
9972                 error ("`%s' declared as function returning a function", name);
9973                 type = integer_type_node;
9974               }
9975             if (TREE_CODE (type) == ARRAY_TYPE)
9976               {
9977                 error ("`%s' declared as function returning an array", name);
9978                 type = integer_type_node;
9979               }
9980
9981             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9982               inner_decl = TREE_OPERAND (inner_decl, 1);
9983
9984             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
9985               inner_decl = dname;
9986
9987             /* Pick up type qualifiers which should be applied to `this'.  */
9988             quals = CALL_DECLARATOR_QUALS (declarator);
9989
9990             /* Pick up the exception specifications.  */
9991             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9992
9993             /* Say it's a definition only for the CALL_EXPR
9994                closest to the identifier.  */
9995             funcdecl_p
9996               = inner_decl 
9997               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9998                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
9999                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10000             
10001             if (ctype == NULL_TREE
10002                 && decl_context == FIELD
10003                 && funcdecl_p
10004                 && (friendp == 0 || dname == current_class_name))
10005               ctype = current_class_type;
10006
10007             if (ctype && return_type == return_conversion)
10008               TYPE_HAS_CONVERSION (ctype) = 1;
10009             if (ctype && constructor_name (ctype) == dname)
10010               {
10011                 /* We are within a class's scope. If our declarator name
10012                    is the same as the class name, and we are defining
10013                    a function, then it is a constructor/destructor, and
10014                    therefore returns a void type.  */
10015
10016                 if (flags == DTOR_FLAG)
10017                   {
10018                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10019                        not be declared const or volatile.  A destructor
10020                        may not be static.  */
10021                     if (staticp == 2)
10022                       error ("destructor cannot be static member function");
10023                     if (quals)
10024                       {
10025                         cp_error ("destructors may not be `%s'",
10026                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10027                         quals = NULL_TREE;
10028                       }
10029                     if (decl_context == FIELD)
10030                       {
10031                         if (! member_function_or_else (ctype, current_class_type,
10032                                                        "destructor for alien class `%s' cannot be a member"))
10033                           return void_type_node;
10034                       }
10035                   }
10036                 else            /* It's a constructor.  */
10037                   {
10038                     if (explicitp == 1)
10039                       explicitp = 2;
10040                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10041                        not be declared const or volatile.  A constructor may
10042                        not be virtual.  A constructor may not be static.  */
10043                     if (staticp == 2)
10044                       error ("constructor cannot be static member function");
10045                     if (virtualp)
10046                       {
10047                         pedwarn ("constructors cannot be declared virtual");
10048                         virtualp = 0;
10049                       }
10050                     if (quals)
10051                       {
10052                         cp_error ("constructors may not be `%s'",
10053                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10054                         quals = NULL_TREE;
10055                       }
10056                     {
10057                       RID_BIT_TYPE tmp_bits;
10058                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10059                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10060                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10061                       if (RIDBIT_ANY_SET (tmp_bits))
10062                         error ("return value type specifier for constructor ignored");
10063                     }
10064                     type = build_pointer_type (ctype);
10065                     if (decl_context == FIELD)
10066                       {
10067                         if (! member_function_or_else (ctype, current_class_type,
10068                                                        "constructor for alien class `%s' cannot be member"))
10069                           return void_type_node;
10070                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10071                         if (return_type != return_ctor)
10072                           return NULL_TREE;
10073                       }
10074                   }
10075                 if (decl_context == FIELD)
10076                   staticp = 0;
10077               }
10078             else if (friendp)
10079               {
10080                 if (initialized)
10081                   error ("can't initialize friend function `%s'", name);
10082                 if (virtualp)
10083                   {
10084                     /* Cannot be both friend and virtual.  */
10085                     error ("virtual functions cannot be friends");
10086                     RIDBIT_RESET (RID_FRIEND, specbits);
10087                     friendp = 0;
10088                   }
10089                 if (decl_context == NORMAL)
10090                   error ("friend declaration not in class definition");
10091                 if (current_function_decl && funcdef_flag)
10092                   cp_error ("can't define friend function `%s' in a local class definition",
10093                             name);
10094               }
10095
10096             /* Construct the function type and go to the next
10097                inner layer of declarator.  */
10098
10099             declarator = TREE_OPERAND (declarator, 0);
10100
10101             /* FIXME: This is where default args should be fully
10102                processed.  */
10103
10104             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10105
10106             if (declarator && flags == DTOR_FLAG)
10107               {
10108                 /* A destructor declared in the body of a class will
10109                    be represented as a BIT_NOT_EXPR.  But, we just
10110                    want the underlying IDENTIFIER.  */
10111                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10112                   declarator = TREE_OPERAND (declarator, 0);
10113                 
10114                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10115                   arg_types = void_list_node;
10116                 else if (arg_types == NULL_TREE
10117                          || arg_types != void_list_node)
10118                   {
10119                     cp_error ("destructors may not have parameters");
10120                     arg_types = void_list_node;
10121                     last_function_parms = NULL_TREE;
10122                   }
10123               }
10124
10125             /* ANSI says that `const int foo ();'
10126                does not make the function foo const.  */
10127             type = build_function_type (type, arg_types);
10128
10129             {
10130               tree t;
10131               for (t = arg_types; t; t = TREE_CHAIN (t))
10132                 if (TREE_PURPOSE (t)
10133                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10134                   {
10135                     add_defarg_fn (type);
10136                     break;
10137                   }
10138             }
10139           }
10140           break;
10141
10142         case ADDR_EXPR:
10143         case INDIRECT_REF:
10144           /* Filter out pointers-to-references and references-to-references.
10145              We can get these if a TYPE_DECL is used.  */
10146
10147           if (TREE_CODE (type) == REFERENCE_TYPE)
10148             {
10149               error ("cannot declare %s to references",
10150                      TREE_CODE (declarator) == ADDR_EXPR
10151                      ? "references" : "pointers");
10152               declarator = TREE_OPERAND (declarator, 0);
10153               continue;
10154             }
10155
10156           if (TREE_CODE (type) == OFFSET_TYPE
10157               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10158                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10159             {
10160               cp_error ("cannot declare pointer to `%#T' member",
10161                         TREE_TYPE (type));
10162               type = TREE_TYPE (type);
10163             }
10164
10165           /* Merge any constancy or volatility into the target type
10166              for the pointer.  */
10167
10168           /* We now know that the TYPE_QUALS don't apply to the decl,
10169              but to the target of the pointer.  */
10170           type_quals = TYPE_UNQUALIFIED;
10171
10172           if (TREE_CODE (declarator) == ADDR_EXPR)
10173             {
10174               if (TREE_CODE (type) == VOID_TYPE)
10175                 error ("invalid type: `void &'");
10176               else
10177                 type = build_reference_type (type);
10178             }
10179           else if (TREE_CODE (type) == METHOD_TYPE)
10180             type = build_ptrmemfunc_type (build_pointer_type (type));
10181           else
10182             type = build_pointer_type (type);
10183
10184           /* Process a list of type modifier keywords (such as
10185              const or volatile) that were given inside the `*' or `&'.  */
10186
10187           if (TREE_TYPE (declarator))
10188             {
10189               register tree typemodlist;
10190               int erred = 0;
10191
10192               constp = 0;
10193               volatilep = 0;
10194               restrictp = 0;
10195               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10196                    typemodlist = TREE_CHAIN (typemodlist))
10197                 {
10198                   tree qualifier = TREE_VALUE (typemodlist);
10199
10200                   if (qualifier == ridpointers[(int) RID_CONST])
10201                     constp++;
10202                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10203                     volatilep++;
10204                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10205                     restrictp++;
10206                   else if (!erred)
10207                     {
10208                       erred = 1;
10209                       error ("invalid type modifier within pointer declarator");
10210                     }
10211                 }
10212               if (constp > 1)
10213                 pedwarn ("duplicate `const'");
10214               if (volatilep > 1)
10215                 pedwarn ("duplicate `volatile'");
10216               if (restrictp > 1)
10217                 pedwarn ("duplicate `restrict'");
10218
10219               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10220                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10221                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10222               if (TREE_CODE (declarator) == ADDR_EXPR
10223                   && (constp || volatilep))
10224                 {
10225                   if (constp)
10226                     pedwarn ("discarding `const' applied to a reference");
10227                   if (volatilep)
10228                     pedwarn ("discarding `volatile' applied to a reference");
10229                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10230                 }
10231               type = cp_build_qualified_type (type, type_quals);
10232             }
10233           declarator = TREE_OPERAND (declarator, 0);
10234           ctype = NULL_TREE;
10235           break;
10236
10237         case SCOPE_REF:
10238           {
10239             /* We have converted type names to NULL_TREE if the
10240                name was bogus, or to a _TYPE node, if not.
10241
10242                The variable CTYPE holds the type we will ultimately
10243                resolve to.  The code here just needs to build
10244                up appropriate member types.  */
10245             tree sname = TREE_OPERAND (declarator, 1);
10246             tree t;
10247
10248             /* Destructors can have their visibilities changed as well.  */
10249             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10250               sname = TREE_OPERAND (sname, 0);
10251
10252             if (TREE_COMPLEXITY (declarator) == 0)
10253               /* This needs to be here, in case we are called
10254                  multiple times.  */ ;
10255             else if (TREE_COMPLEXITY (declarator) == -1)
10256               /* Namespace member. */
10257               pop_decl_namespace ();
10258             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10259               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10260             else if (! IS_AGGR_TYPE_CODE
10261                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10262               ;
10263             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10264               {
10265                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10266                    that refer to ctype.  They couldn't be resolved earlier
10267                    because we hadn't pushed into the class yet.
10268                    Example: resolve 'B<T>::type' in
10269                    'B<typename B<T>::type> B<T>::f () { }'.  */
10270                 if (current_template_parms
10271                     && uses_template_parms (type)
10272                     && uses_template_parms (current_class_type))
10273                   {
10274                     tree args = current_template_args ();
10275                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10276                   }
10277
10278                 /* This pop_nested_class corresponds to the
10279                    push_nested_class used to push into class scope for
10280                    parsing the argument list of a function decl, in
10281                    qualified_id.  */
10282                 pop_nested_class ();
10283                 TREE_COMPLEXITY (declarator) = current_class_depth;
10284               }
10285             else
10286               my_friendly_abort (16);
10287
10288             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10289               {
10290                 /* We had a reference to a global decl, or
10291                    perhaps we were given a non-aggregate typedef,
10292                    in which case we cleared this out, and should just
10293                    keep going as though it wasn't there.  */
10294                 declarator = sname;
10295                 continue;
10296               }
10297             ctype = TREE_OPERAND (declarator, 0);
10298
10299             t = ctype;
10300             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10301               {
10302                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10303                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10304                   template_count += 1;
10305                 t = TYPE_MAIN_DECL (t);
10306                 if (DECL_LANG_SPECIFIC (t))
10307                   t = DECL_CLASS_CONTEXT (t);
10308                 else
10309                   t = NULL_TREE;
10310               }
10311
10312             if (sname == NULL_TREE)
10313               goto done_scoping;
10314
10315             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10316               {
10317                 /* This is the `standard' use of the scoping operator:
10318                    basetype :: member .  */
10319
10320                 if (ctype == current_class_type)
10321                   {
10322                     /* class A {
10323                          void A::f ();
10324                        };
10325
10326                        Is this ill-formed?  */
10327
10328                     if (pedantic)
10329                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10330                                   ctype, name);
10331                   }
10332                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10333                   {
10334                     if (current_class_type == NULL_TREE
10335                         || friendp)
10336                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10337                                                       TYPE_ARG_TYPES (type));
10338                     else
10339                       {
10340                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10341                                   ctype, name, current_class_type);
10342                         return void_type_node;
10343                       }
10344                   }
10345                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10346                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10347                   {
10348                     /* Have to move this code elsewhere in this function.
10349                        this code is used for i.e., typedef int A::M; M *pm;
10350
10351                        It is?  How? jason 10/2/94 */
10352
10353                     if (current_class_type)
10354                       {
10355                         cp_error ("cannot declare member `%T::%s' within `%T'",
10356                                   ctype, name, current_class_type);
10357                         return void_type_node;
10358                       }
10359                     type = build_offset_type (ctype, type);
10360                   }
10361                 else if (uses_template_parms (ctype))
10362                   {
10363                     if (TREE_CODE (type) == FUNCTION_TYPE)
10364                       type
10365                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10366                                                    TYPE_ARG_TYPES (type));
10367                   }
10368                 else
10369                   {
10370                     cp_error ("structure `%T' not yet defined", ctype);
10371                     return error_mark_node;
10372                   }
10373
10374                 declarator = sname;
10375               }
10376             else if (TREE_CODE (sname) == SCOPE_REF)
10377               my_friendly_abort (17);
10378             else
10379               {
10380               done_scoping:
10381                 declarator = TREE_OPERAND (declarator, 1);
10382                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10383                   /* In this case, we will deal with it later.  */
10384                   ;
10385                 else
10386                   {
10387                     if (TREE_CODE (type) == FUNCTION_TYPE)
10388                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10389                                                       TYPE_ARG_TYPES (type));
10390                     else
10391                       type = build_offset_type (ctype, type);
10392                   }
10393               }
10394           }
10395           break;
10396
10397         case BIT_NOT_EXPR:
10398           declarator = TREE_OPERAND (declarator, 0);
10399           break;
10400
10401         case RECORD_TYPE:
10402         case UNION_TYPE:
10403         case ENUMERAL_TYPE:
10404           declarator = NULL_TREE;
10405           break;
10406
10407         case ERROR_MARK:
10408           declarator = NULL_TREE;
10409           break;
10410
10411         default:
10412           my_friendly_abort (158);
10413         }
10414     }
10415
10416   /* See the comment for the TREE_LIST case, above.  */
10417   if (inner_attrs)
10418     {
10419       if (! ignore_attrs)
10420         decl_attributes (type, inner_attrs, NULL_TREE);
10421       else if (attrlist)
10422         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10423       else
10424         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10425     }
10426
10427   /* Now TYPE has the actual type.  */
10428
10429   if (explicitp == 1)
10430     {
10431       error ("only constructors can be declared `explicit'");
10432       explicitp = 0;
10433     }
10434
10435   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10436     {
10437       if (type_quals & TYPE_QUAL_CONST)
10438         {
10439           error ("const `%s' cannot be declared `mutable'", name);
10440           RIDBIT_RESET (RID_MUTABLE, specbits);
10441         }
10442       else if (staticp)
10443         {
10444           error ("static `%s' cannot be declared `mutable'", name);
10445           RIDBIT_RESET (RID_MUTABLE, specbits);
10446         }
10447     }
10448
10449   if (declarator == NULL_TREE
10450       || TREE_CODE (declarator) == IDENTIFIER_NODE
10451       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10452           && (TREE_CODE (type) == FUNCTION_TYPE
10453               || TREE_CODE (type) == METHOD_TYPE)))
10454     /* OK */;
10455   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10456     {
10457       cp_error ("template-id `%D' used as a declarator", declarator);
10458       declarator = dname;
10459     }
10460   else
10461     /* Unexpected declarator format.  */
10462     my_friendly_abort (990210);
10463
10464   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10465
10466   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10467     {
10468       tree decl;
10469
10470       /* Note that the grammar rejects storage classes
10471          in typenames, fields or parameters.  */
10472       if (current_lang_name == lang_name_java)
10473         TYPE_FOR_JAVA (type) = 1;
10474
10475       if (decl_context == FIELD)
10476         {
10477           if (declarator == constructor_name (current_class_type))
10478             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10479                         declarator);
10480           decl = build_lang_decl (TYPE_DECL, declarator, type);
10481         }
10482       else
10483         {
10484           /* Make sure this typedef lives as long as its type,
10485              since it might be used as a template parameter. */
10486           if (type != error_mark_node)
10487             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10488           if (processing_template_decl)
10489             decl = build_lang_decl (TYPE_DECL, declarator, type);
10490           else
10491             decl = build_decl (TYPE_DECL, declarator, type);
10492           if (type != error_mark_node)
10493             pop_obstacks ();
10494         }
10495
10496       /* If the user declares "typedef struct {...} foo" then the
10497          struct will have an anonymous name.  Fill that name in now.
10498          Nothing can refer to it, so nothing needs know about the name
10499          change.  */
10500       if (type != error_mark_node
10501           && TYPE_NAME (type)
10502           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10503           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10504           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10505         {
10506           tree oldname = TYPE_NAME (type);
10507           tree t;
10508
10509           /* Replace the anonymous name with the real name everywhere.  */
10510           lookup_tag_reverse (type, declarator);
10511           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10512             if (TYPE_NAME (t) == oldname)
10513               TYPE_NAME (t) = decl;
10514
10515           if (TYPE_LANG_SPECIFIC (type))
10516             TYPE_WAS_ANONYMOUS (type) = 1;
10517
10518           /* If this is a typedef within a template class, the nested
10519              type is a (non-primary) template.  The name for the
10520              template needs updating as well.  */
10521           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10522             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10523               = TYPE_IDENTIFIER (type);
10524
10525           /* XXX Temporarily set the scope. 
10526              When returning, start_decl expects it as NULL_TREE,
10527              and will then then set it using pushdecl. */
10528           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10529           if (current_class_type)
10530             DECL_CONTEXT (decl) = current_class_type;
10531           else
10532             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10533
10534           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10535           DECL_ASSEMBLER_NAME (decl)
10536             = get_identifier (build_overload_name (type, 1, 1));
10537           DECL_CONTEXT (decl) = NULL_TREE;
10538
10539           /* FIXME remangle member functions; member functions of a
10540              type with external linkage have external linkage.  */
10541         }
10542
10543       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10544         {
10545           cp_error_at ("typedef name may not be class-qualified", decl);
10546           return NULL_TREE;
10547         }
10548       else if (quals)
10549         {
10550           if (ctype == NULL_TREE)
10551             {
10552               if (TREE_CODE (type) != METHOD_TYPE)
10553                 cp_error_at ("invalid type qualifier for non-method type", decl);
10554               else
10555                 ctype = TYPE_METHOD_BASETYPE (type);
10556             }
10557           if (ctype != NULL_TREE)
10558             grok_method_quals (ctype, decl, quals);
10559         }
10560
10561       if (RIDBIT_SETP (RID_SIGNED, specbits)
10562           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10563         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10564
10565       if (RIDBIT_SETP (RID_MUTABLE, specbits))
10566         error ("non-object member `%s' cannot be declared mutable", name);
10567
10568       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10569                       inlinep, friendp, raises != NULL_TREE);
10570
10571       if (initialized)
10572         error ("typedef declaration includes an initializer");
10573
10574       return decl;
10575     }
10576
10577   /* Detect the case of an array type of unspecified size
10578      which came, as such, direct from a typedef name.
10579      We must copy the type, so that each identifier gets
10580      a distinct type, so that each identifier's size can be
10581      controlled separately by its own initializer.  */
10582
10583   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10584       && TYPE_DOMAIN (type) == NULL_TREE)
10585     {
10586       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10587     }
10588
10589   /* If this is a type name (such as, in a cast or sizeof),
10590      compute the type and return it now.  */
10591
10592   if (decl_context == TYPENAME)
10593     {
10594       /* Note that the grammar rejects storage classes
10595          in typenames, fields or parameters.  */
10596       if (type_quals != TYPE_UNQUALIFIED)
10597         type_quals = TYPE_UNQUALIFIED;
10598
10599       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10600       if (friendp)
10601         {
10602           if (type_quals != TYPE_UNQUALIFIED)
10603             {
10604               cp_error ("type qualifiers specified for friend class declaration");
10605               type_quals = TYPE_UNQUALIFIED;
10606             }
10607           if (inlinep)
10608             {
10609               cp_error ("`inline' specified for friend class declaration");
10610               inlinep = 0;
10611             }
10612
10613           /* Only try to do this stuff if we didn't already give up.  */
10614           if (type != integer_type_node)
10615             {
10616               /* A friendly class?  */
10617               if (current_class_type)
10618                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10619               else
10620                 error ("trying to make class `%s' a friend of global scope",
10621                        TYPE_NAME_STRING (type));
10622               type = void_type_node;
10623             }
10624         }
10625       else if (quals)
10626         {
10627           tree dummy = build_decl (TYPE_DECL, declarator, type);
10628           if (ctype == NULL_TREE)
10629             {
10630               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10631               ctype = TYPE_METHOD_BASETYPE (type);
10632             }
10633           grok_method_quals (ctype, dummy, quals);
10634           type = TREE_TYPE (dummy);
10635         }
10636
10637       return type;
10638     }
10639   else if (declarator == NULL_TREE && decl_context != PARM
10640            && decl_context != CATCHPARM
10641            && TREE_CODE (type) != UNION_TYPE
10642            && ! bitfield)
10643     {
10644       cp_error ("abstract declarator `%T' used as declaration", type);
10645       declarator = make_anon_name ();
10646     }
10647
10648   /* `void' at top level (not within pointer)
10649      is allowed only in typedefs or type names.
10650      We don't complain about parms either, but that is because
10651      a better error message can be made later.  */
10652
10653   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10654     {
10655       if (! declarator)
10656         error ("unnamed variable or field declared void");
10657       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10658         {
10659           if (IDENTIFIER_OPNAME_P (declarator))
10660             my_friendly_abort (356);
10661           else
10662             error ("variable or field `%s' declared void", name);
10663         }
10664       else
10665         error ("variable or field declared void");
10666       type = integer_type_node;
10667     }
10668
10669   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10670      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10671
10672   if (decl_context == PARM || decl_context == CATCHPARM)
10673     {
10674       if (ctype || in_namespace)
10675         error ("cannot use `::' in parameter declaration");
10676
10677       /* A parameter declared as an array of T is really a pointer to T.
10678          One declared as a function is really a pointer to a function.
10679          One declared as a member is really a pointer to member.  */
10680
10681       if (TREE_CODE (type) == ARRAY_TYPE)
10682         {
10683           /* Transfer const-ness of array into that of type pointed to.  */
10684           type = build_pointer_type (TREE_TYPE (type));
10685           type_quals = TYPE_UNQUALIFIED;
10686         }
10687       else if (TREE_CODE (type) == FUNCTION_TYPE)
10688         type = build_pointer_type (type);
10689       else if (TREE_CODE (type) == OFFSET_TYPE)
10690         type = build_pointer_type (type);
10691       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10692         {
10693           error ("declaration of `%s' as void", name);
10694           return NULL_TREE;
10695         }
10696     }
10697   
10698   {
10699     register tree decl;
10700
10701     if (decl_context == PARM)
10702       {
10703         decl = build_decl (PARM_DECL, declarator, type);
10704
10705         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10706                         inlinep, friendp, raises != NULL_TREE);
10707
10708         /* Compute the type actually passed in the parmlist,
10709            for the case where there is no prototype.
10710            (For example, shorts and chars are passed as ints.)
10711            When there is a prototype, this is overridden later.  */
10712
10713         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10714       }
10715     else if (decl_context == FIELD)
10716       {
10717         if (type == error_mark_node)
10718           {
10719             /* Happens when declaring arrays of sizes which
10720                are error_mark_node, for example.  */
10721             decl = NULL_TREE;
10722           }
10723         else if (in_namespace && !friendp)
10724           {
10725             /* Something like struct S { int N::j; };  */
10726             cp_error ("invalid use of `::'");
10727             decl = NULL_TREE;
10728           }
10729         else if (TREE_CODE (type) == FUNCTION_TYPE)
10730           {
10731             int publicp = 0;
10732             tree function_context;
10733
10734             /* We catch the others as conflicts with the builtin
10735                typedefs.  */
10736             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10737               {
10738                 cp_error ("function `%D' cannot be declared friend",
10739                           declarator);
10740                 friendp = 0;
10741               }
10742
10743             if (friendp == 0)
10744               {
10745                 if (ctype == NULL_TREE)
10746                   ctype = current_class_type;
10747
10748                 if (ctype == NULL_TREE)
10749                   {
10750                     cp_error ("can't make `%D' into a method -- not in a class",
10751                               declarator);
10752                     return void_type_node;
10753                   }
10754
10755                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10756                    ARM 9.5 */
10757                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10758                   {
10759                     cp_error ("function `%D' declared virtual inside a union",
10760                               declarator);
10761                     return void_type_node;
10762                   }
10763
10764                 if (declarator == ansi_opname[(int) NEW_EXPR]
10765                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10766                     || declarator == ansi_opname[(int) DELETE_EXPR]
10767                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10768                   {
10769                     if (virtualp)
10770                       {
10771                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10772                                   declarator);
10773                         virtualp = 0;
10774                       }
10775                   }
10776                 else if (staticp < 2)
10777                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10778                                                   TYPE_ARG_TYPES (type));
10779               }
10780
10781             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10782             function_context = (ctype != NULL_TREE) ? 
10783               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10784             publicp = (! friendp || ! staticp)
10785               && function_context == NULL_TREE;
10786             decl = grokfndecl (ctype, type, 
10787                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10788                                ? declarator : dname,
10789                                declarator,
10790                                virtualp, flags, quals, raises,
10791                                friendp ? -1 : 0, friendp, publicp, inlinep,
10792                                funcdef_flag, template_count, in_namespace);
10793             if (decl == NULL_TREE)
10794               return decl;
10795 #if 0
10796             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10797             /* The decl and setting of decl_machine_attr is also turned off.  */
10798             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10799 #endif
10800
10801             /* [class.conv.ctor]
10802
10803                A constructor declared without the function-specifier
10804                explicit that can be called with a single parameter
10805                specifies a conversion from the type of its first
10806                parameter to the type of its class.  Such a constructor
10807                is called a converting constructor.  */
10808             if (explicitp == 2)
10809               DECL_NONCONVERTING_P (decl) = 1;
10810             else if (DECL_CONSTRUCTOR_P (decl))
10811               {
10812                 /* The constructor can be called with exactly one
10813                    parameter if there is at least one parameter, and
10814                    any subsequent parameters have default arguments.
10815                    We don't look at the first parameter, which is
10816                    really just the `this' parameter for the new
10817                    object.  */
10818                 tree arg_types = 
10819                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10820
10821                 /* Skip the `in_chrg' argument too, if present.  */
10822                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10823                   arg_types = TREE_CHAIN (arg_types);
10824
10825                 if (arg_types == void_list_node
10826                     || (arg_types 
10827                         && TREE_CHAIN (arg_types) 
10828                         && TREE_CHAIN (arg_types) != void_list_node
10829                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10830                   DECL_NONCONVERTING_P (decl) = 1;
10831               }
10832           }
10833         else if (TREE_CODE (type) == METHOD_TYPE)
10834           {
10835             /* We only get here for friend declarations of
10836                members of other classes.  */
10837             /* All method decls are public, so tell grokfndecl to set
10838                TREE_PUBLIC, also.  */
10839             decl = grokfndecl (ctype, type, declarator, declarator,
10840                                virtualp, flags, quals, raises,
10841                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10842                                template_count, in_namespace);
10843             if (decl == NULL_TREE)
10844               return NULL_TREE;
10845           }
10846         else if (!staticp && ! processing_template_decl
10847                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10848                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10849           {
10850             if (declarator)
10851               cp_error ("field `%D' has incomplete type", declarator);
10852             else
10853               cp_error ("name `%T' has incomplete type", type);
10854
10855             /* If we're instantiating a template, tell them which
10856                instantiation made the field's type be incomplete.  */
10857             if (current_class_type
10858                 && TYPE_NAME (current_class_type)
10859                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10860                 && declspecs && TREE_VALUE (declspecs)
10861                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10862               cp_error ("  in instantiation of template `%T'",
10863                         current_class_type);
10864
10865             type = error_mark_node;
10866             decl = NULL_TREE;
10867           }
10868         else
10869           {
10870             if (friendp)
10871               {
10872                 error ("`%s' is neither function nor method; cannot be declared friend",
10873                        IDENTIFIER_POINTER (declarator));
10874                 friendp = 0;
10875               }
10876             decl = NULL_TREE;
10877           }
10878
10879         if (friendp)
10880           {
10881             /* Friends are treated specially.  */
10882             if (ctype == current_class_type)
10883               warning ("member functions are implicitly friends of their class");
10884             else
10885               {
10886                 tree t = NULL_TREE;
10887                 if (decl && DECL_NAME (decl))
10888                   {
10889                     if (template_class_depth (current_class_type) == 0)
10890                       {
10891                         decl 
10892                           = check_explicit_specialization 
10893                           (declarator, decl,
10894                            template_count, 2 * (funcdef_flag != 0) + 4);
10895                         if (decl == error_mark_node)
10896                           return error_mark_node;
10897                       }
10898
10899                     t = do_friend (ctype, declarator, decl,
10900                                    last_function_parms, attrlist, flags, quals,
10901                                    funcdef_flag);
10902                   }
10903                 if (t && funcdef_flag)
10904                   return t;
10905                 
10906                 return void_type_node;
10907               }
10908           }
10909
10910         /* Structure field.  It may not be a function, except for C++ */
10911
10912         if (decl == NULL_TREE)
10913           {
10914             if (initialized)
10915               {
10916                 if (!staticp)
10917                   {
10918                     /* An attempt is being made to initialize a non-static
10919                        member.  But, from [class.mem]:
10920                        
10921                        4 A member-declarator can contain a
10922                        constant-initializer only if it declares a static
10923                        member (_class.static_) of integral or enumeration
10924                        type, see _class.static.data_.  
10925
10926                        This used to be relatively common practice, but
10927                        the rest of the compiler does not correctly
10928                        handle the initialization unless the member is
10929                        static so we make it static below.  */
10930                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10931                                 declarator);
10932                     cp_pedwarn ("making `%D' static", declarator);
10933                     staticp = 1;
10934                   }
10935
10936                 if (uses_template_parms (type))
10937                   /* We'll check at instantiation time.  */
10938                   ;
10939                 else if (check_static_variable_definition (declarator,
10940                                                            type))
10941                   /* If we just return the declaration, crashes
10942                      will sometimes occur.  We therefore return
10943                      void_type_node, as if this was a friend
10944                      declaration, to cause callers to completely
10945                      ignore this declaration.  */
10946                   return void_type_node;
10947               }
10948
10949             /* 9.2p13 [class.mem] */
10950             if (declarator == constructor_name (current_class_type)
10951                 /* Divergence from the standard:  In extern "C", we
10952                    allow non-static data members here, because C does
10953                    and /usr/include/netinet/in.h uses that.  */
10954                 && (staticp || ! in_system_header))
10955               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10956                           declarator);
10957
10958             if (staticp)
10959               {
10960                 /* C++ allows static class members.  All other work
10961                    for this is done by grokfield.  */
10962                 decl = build_lang_decl (VAR_DECL, declarator, type);
10963                 TREE_STATIC (decl) = 1;
10964                 /* In class context, 'static' means public access.  */
10965                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10966               }
10967             else
10968               {
10969                 decl = build_lang_decl (FIELD_DECL, declarator, type);
10970                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10971                   {
10972                     DECL_MUTABLE_P (decl) = 1;
10973                     RIDBIT_RESET (RID_MUTABLE, specbits);
10974                   }
10975               }
10976
10977             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10978                             inlinep, friendp, raises != NULL_TREE);
10979           }
10980       }
10981     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10982       {
10983         tree original_name;
10984         int publicp = 0;
10985
10986         if (! declarator)
10987           return NULL_TREE;
10988
10989         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10990           original_name = dname;
10991         else
10992           original_name = declarator;
10993
10994         if (RIDBIT_SETP (RID_AUTO, specbits))
10995           error ("storage class `auto' invalid for function `%s'", name);
10996         else if (RIDBIT_SETP (RID_REGISTER, specbits))
10997           error ("storage class `register' invalid for function `%s'", name);
10998
10999         /* Function declaration not at top level.
11000            Storage classes other than `extern' are not allowed
11001            and `extern' makes no difference.  */
11002         if (! toplevel_bindings_p ()
11003             && (RIDBIT_SETP (RID_STATIC, specbits)
11004                 || RIDBIT_SETP (RID_INLINE, specbits))
11005             && pedantic)
11006           {
11007             if (RIDBIT_SETP (RID_STATIC, specbits))
11008               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11009             else
11010               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11011           }
11012         
11013         if (ctype == NULL_TREE)
11014           {
11015             if (virtualp)
11016               {
11017                 error ("virtual non-class function `%s'", name);
11018                 virtualp = 0;
11019               }
11020           }
11021         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11022           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11023                                           TYPE_ARG_TYPES (type));
11024
11025         /* Record presence of `static'.  */
11026         publicp = (ctype != NULL_TREE
11027                    || RIDBIT_SETP (RID_EXTERN, specbits)
11028                    || !RIDBIT_SETP (RID_STATIC, specbits));
11029
11030         decl = grokfndecl (ctype, type, original_name, declarator,
11031                            virtualp, flags, quals, raises,
11032                            1, friendp,
11033                            publicp, inlinep, funcdef_flag, 
11034                            template_count, in_namespace);
11035         if (decl == NULL_TREE)
11036           return NULL_TREE;
11037
11038         if (staticp == 1)
11039           {
11040             int illegal_static = 0;
11041
11042             /* Don't allow a static member function in a class, and forbid
11043                declaring main to be static.  */
11044             if (TREE_CODE (type) == METHOD_TYPE)
11045               {
11046                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11047                 illegal_static = 1;
11048               }
11049             else if (current_function_decl)
11050               {
11051                 /* FIXME need arm citation */
11052                 error ("cannot declare static function inside another function");
11053                 illegal_static = 1;
11054               }
11055
11056             if (illegal_static)
11057               {
11058                 staticp = 0;
11059                 RIDBIT_RESET (RID_STATIC, specbits);
11060               }
11061           }
11062       }
11063     else
11064       {
11065         /* It's a variable.  */
11066
11067         /* An uninitialized decl with `extern' is a reference.  */
11068         decl = grokvardecl (type, declarator, &specbits, 
11069                             initialized, 
11070                             (type_quals & TYPE_QUAL_CONST) != 0, 
11071                             in_namespace);
11072         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11073                         inlinep, friendp, raises != NULL_TREE);
11074
11075         if (ctype)
11076           {
11077             DECL_CONTEXT (decl) = ctype;
11078             if (staticp == 1)
11079               {
11080                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11081                 staticp = 0;
11082                 RIDBIT_RESET (RID_STATIC, specbits);
11083               }
11084             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11085               {
11086                 cp_error ("static member `%D' declared `register'", decl);
11087                 RIDBIT_RESET (RID_REGISTER, specbits);
11088               }
11089             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11090               {
11091                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11092                             decl);
11093                 RIDBIT_RESET (RID_EXTERN, specbits);
11094               }
11095           }
11096       }
11097
11098     if (RIDBIT_SETP (RID_MUTABLE, specbits))
11099       {
11100         error ("`%s' cannot be declared mutable", name);
11101       }
11102
11103     /* Record `register' declaration for warnings on &
11104        and in case doing stupid register allocation.  */
11105
11106     if (RIDBIT_SETP (RID_REGISTER, specbits))
11107       DECL_REGISTER (decl) = 1;
11108
11109     if (RIDBIT_SETP (RID_EXTERN, specbits))
11110       DECL_THIS_EXTERN (decl) = 1;
11111
11112     if (RIDBIT_SETP (RID_STATIC, specbits))
11113       DECL_THIS_STATIC (decl) = 1;
11114
11115     /* Record constancy and volatility.  There's no need to do this
11116        when processing a template; we'll do this for the instantiated
11117        declaration based on the type of DECL.  */
11118     if (!processing_template_decl)
11119       c_apply_type_quals_to_decl (type_quals, decl);
11120
11121     return decl;
11122   }
11123 }
11124 \f
11125 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11126    An empty exprlist is a parmlist.  An exprlist which
11127    contains only identifiers at the global level
11128    is a parmlist.  Otherwise, it is an exprlist.  */
11129
11130 int
11131 parmlist_is_exprlist (exprs)
11132      tree exprs;
11133 {
11134   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11135     return 0;
11136
11137   if (toplevel_bindings_p ())
11138     {
11139       /* At the global level, if these are all identifiers,
11140          then it is a parmlist.  */
11141       while (exprs)
11142         {
11143           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11144             return 1;
11145           exprs = TREE_CHAIN (exprs);
11146         }
11147       return 0;
11148     }
11149   return 1;
11150 }
11151
11152 /* Subroutine of start_function.  Ensure that each of the parameter
11153    types (as listed in PARMS) is complete, as is required for a
11154    function definition.  */
11155
11156 static void
11157 require_complete_types_for_parms (parms)
11158      tree parms;
11159 {
11160   while (parms)
11161     {
11162       tree type = TREE_TYPE (parms);
11163       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11164         {
11165           if (DECL_NAME (parms))
11166             error ("parameter `%s' has incomplete type",
11167                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11168           else
11169             error ("parameter has incomplete type");
11170           TREE_TYPE (parms) = error_mark_node;
11171         }
11172       else
11173         layout_decl (parms, 0);
11174
11175       parms = TREE_CHAIN (parms);
11176     }
11177 }
11178
11179 /* Returns DECL if DECL is a local variable (or parameter).  Returns
11180    NULL_TREE otherwise.  */
11181
11182 static tree
11183 local_variable_p (t)
11184      tree t;
11185 {
11186   if ((TREE_CODE (t) == VAR_DECL 
11187        /* A VAR_DECL with a context that is a _TYPE is a static data
11188           member.  */
11189        && !TYPE_P (CP_DECL_CONTEXT (t))
11190        /* Any other non-local variable must be at namespace scope.  */
11191        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11192       || (TREE_CODE (t) == PARM_DECL))
11193     return t;
11194
11195   return NULL_TREE;
11196 }
11197
11198 /* Check that ARG, which is a default-argument expression for a
11199    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11200    something goes wrong.  DECL may also be a _TYPE node, rather than a
11201    DECL, if there is no DECL available.  */
11202
11203 tree
11204 check_default_argument (decl, arg)
11205      tree decl;
11206      tree arg;
11207 {
11208   tree var;
11209   tree decl_type;
11210
11211   if (TREE_CODE (arg) == DEFAULT_ARG)
11212     /* We get a DEFAULT_ARG when looking at an in-class declaration
11213        with a default argument.  Ignore the argument for now; we'll
11214        deal with it after the class is complete.  */
11215     return arg;
11216
11217   if (processing_template_decl || uses_template_parms (arg))
11218     /* We don't do anything checking until instantiation-time.  Note
11219        that there may be uninstantiated arguments even for an
11220        instantiated function, since default arguments are not
11221        instantiated until they are needed.  */
11222     return arg;
11223
11224   if (TYPE_P (decl))
11225     {
11226       decl_type = decl;
11227       decl = NULL_TREE;
11228     }
11229   else
11230     decl_type = TREE_TYPE (decl);
11231
11232   if (arg == error_mark_node 
11233       || decl == error_mark_node
11234       || TREE_TYPE (arg) == error_mark_node
11235       || decl_type == error_mark_node)
11236     /* Something already went wrong.  There's no need to check
11237        further.  */
11238     return error_mark_node;
11239
11240   /* [dcl.fct.default]
11241      
11242      A default argument expression is implicitly converted to the
11243      parameter type.  */
11244   if (!TREE_TYPE (arg)
11245       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11246     {
11247       if (decl)
11248         cp_error ("default argument for `%#D' has type `%T'", 
11249                   decl, TREE_TYPE (arg));
11250       else
11251         cp_error ("default argument for parameter of type `%T' has type `%T'",
11252                   decl_type, TREE_TYPE (arg));
11253
11254       return error_mark_node;
11255     }
11256
11257   /* [dcl.fct.default]
11258
11259      Local variables shall not be used in default argument
11260      expressions. 
11261
11262      The keyword `this' shall not be used in a default argument of a
11263      member function.  */
11264   var = search_tree (arg, local_variable_p);
11265   if (var)
11266     {
11267       cp_error ("default argument `%E' uses local variable `%D'",
11268                 arg, var);
11269       return error_mark_node;
11270     }
11271
11272   /* All is well.  */
11273   return arg;
11274 }
11275
11276 /* Decode the list of parameter types for a function type.
11277    Given the list of things declared inside the parens,
11278    return a list of types.
11279
11280    The list we receive can have three kinds of elements:
11281    an IDENTIFIER_NODE for names given without types,
11282    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11283    or void_type_node, to mark the end of an argument list
11284    when additional arguments are not permitted (... was not used).
11285
11286    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11287    a mere declaration.  A nonempty identifier-list gets an error message
11288    when FUNCDEF_FLAG is zero.
11289    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11290    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11291
11292    If all elements of the input list contain types,
11293    we return a list of the types.
11294    If all elements contain no type (except perhaps a void_type_node
11295    at the end), we return a null list.
11296    If some have types and some do not, it is an error, and we
11297    return a null list.
11298
11299    Also set last_function_parms to either
11300    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11301    A list of names is converted to a chain of PARM_DECLs
11302    by store_parm_decls so that ultimately it is always a chain of decls.
11303
11304    Note that in C++, parameters can take default values.  These default
11305    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11306    an error to specify default values which are followed by parameters
11307    that have no default values, or an ELLIPSES.  For simplicities sake,
11308    only parameters which are specified with their types can take on
11309    default values.  */
11310
11311 static tree
11312 grokparms (first_parm, funcdef_flag)
11313      tree first_parm;
11314      int funcdef_flag;
11315 {
11316   tree result = NULL_TREE;
11317   tree decls = NULL_TREE;
11318
11319   if (first_parm != NULL_TREE
11320       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11321     {
11322       if (! funcdef_flag)
11323         pedwarn ("parameter names (without types) in function declaration");
11324       last_function_parms = first_parm;
11325       return NULL_TREE;
11326     }
11327   else if (first_parm != NULL_TREE
11328            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11329            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11330     my_friendly_abort (145);
11331   else
11332     {
11333       /* Types were specified.  This is a list of declarators
11334          each represented as a TREE_LIST node.  */
11335       register tree parm, chain;
11336       int any_init = 0, any_error = 0;
11337
11338       if (first_parm != NULL_TREE)
11339         {
11340           tree last_result = NULL_TREE;
11341           tree last_decl = NULL_TREE;
11342
11343           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11344             {
11345               tree type = NULL_TREE, list_node = parm;
11346               register tree decl = TREE_VALUE (parm);
11347               tree init = TREE_PURPOSE (parm);
11348
11349               chain = TREE_CHAIN (parm);
11350               /* @@ weak defense against parse errors.  */
11351               if (TREE_CODE (decl) != VOID_TYPE 
11352                   && TREE_CODE (decl) != TREE_LIST)
11353                 {
11354                   /* Give various messages as the need arises.  */
11355                   if (TREE_CODE (decl) == STRING_CST)
11356                     cp_error ("invalid string constant `%E'", decl);
11357                   else if (TREE_CODE (decl) == INTEGER_CST)
11358                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11359                   continue;
11360                 }
11361
11362               if (TREE_CODE (decl) != VOID_TYPE)
11363                 {
11364                   decl = grokdeclarator (TREE_VALUE (decl),
11365                                          TREE_PURPOSE (decl),
11366                                          PARM, init != NULL_TREE,
11367                                          NULL_TREE);
11368                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11369                     continue;
11370
11371                   /* Top-level qualifiers on the parameters are
11372                      ignored for function types.  */
11373                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11374
11375                   if (TREE_CODE (type) == VOID_TYPE)
11376                     decl = void_type_node;
11377                   else if (TREE_CODE (type) == METHOD_TYPE)
11378                     {
11379                       if (DECL_NAME (decl))
11380                         /* Cannot use the decl here because
11381                            we don't have DECL_CONTEXT set up yet.  */
11382                         cp_error ("parameter `%D' invalidly declared method type",
11383                                   DECL_NAME (decl));
11384                       else
11385                         error ("parameter invalidly declared method type");
11386                       type = build_pointer_type (type);
11387                       TREE_TYPE (decl) = type;
11388                     }
11389                   else if (TREE_CODE (type) == OFFSET_TYPE)
11390                     {
11391                       if (DECL_NAME (decl))
11392                         cp_error ("parameter `%D' invalidly declared offset type",
11393                                   DECL_NAME (decl));
11394                       else
11395                         error ("parameter invalidly declared offset type");
11396                       type = build_pointer_type (type);
11397                       TREE_TYPE (decl) = type;
11398                     }
11399                   else if (abstract_virtuals_error (decl, type))
11400                     any_error = 1;  /* Seems like a good idea. */
11401                   else if (POINTER_TYPE_P (type))
11402                     {
11403                       tree t = type;
11404                       while (POINTER_TYPE_P (t)
11405                              || (TREE_CODE (t) == ARRAY_TYPE
11406                                  && TYPE_DOMAIN (t) != NULL_TREE))
11407                         t = TREE_TYPE (t);
11408                       if (TREE_CODE (t) == ARRAY_TYPE)
11409                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11410                                   type,
11411                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11412                     }
11413                 }
11414
11415               if (TREE_CODE (decl) == VOID_TYPE)
11416                 {
11417                   if (result == NULL_TREE)
11418                     {
11419                       result = void_list_node;
11420                       last_result = result;
11421                     }
11422                   else
11423                     {
11424                       TREE_CHAIN (last_result) = void_list_node;
11425                       last_result = void_list_node;
11426                     }
11427                   if (chain
11428                       && (chain != void_list_node || TREE_CHAIN (chain)))
11429                     error ("`void' in parameter list must be entire list");
11430                   break;
11431                 }
11432
11433               /* Since there is a prototype, args are passed in their own types.  */
11434               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11435               if (PROMOTE_PROTOTYPES
11436                   && (TREE_CODE (type) == INTEGER_TYPE
11437                       || TREE_CODE (type) == ENUMERAL_TYPE)
11438                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11439                 DECL_ARG_TYPE (decl) = integer_type_node;
11440               if (!any_error && init)
11441                 {
11442                   any_init++;
11443                   init = check_default_argument (decl, init);
11444                 }
11445               else
11446                 init = NULL_TREE;
11447
11448               if (decls == NULL_TREE)
11449                 {
11450                   decls = decl;
11451                   last_decl = decls;
11452                 }
11453               else
11454                 {
11455                   TREE_CHAIN (last_decl) = decl;
11456                   last_decl = decl;
11457                 }
11458               list_node = tree_cons (init, type, NULL_TREE);
11459               if (result == NULL_TREE)
11460                 {
11461                   result = list_node;
11462                   last_result = result;
11463                 }
11464               else
11465                 {
11466                   TREE_CHAIN (last_result) = list_node;
11467                   last_result = list_node;
11468                 }
11469             }
11470           if (last_result)
11471             TREE_CHAIN (last_result) = NULL_TREE;
11472           /* If there are no parameters, and the function does not end
11473              with `...', then last_decl will be NULL_TREE.  */
11474           if (last_decl != NULL_TREE)
11475             TREE_CHAIN (last_decl) = NULL_TREE;
11476         }
11477     }
11478
11479   last_function_parms = decls;
11480
11481   return result;
11482 }
11483
11484 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11485    FUNCTION_TYPE with the newly parsed version of its default argument, which
11486    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11487
11488 void
11489 replace_defarg (arg, init)
11490      tree arg, init;
11491 {
11492   if (! processing_template_decl
11493       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11494     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11495                 TREE_TYPE (init), TREE_VALUE (arg));
11496   TREE_PURPOSE (arg) = init;
11497 }
11498 \f
11499 int
11500 copy_args_p (d)
11501      tree d;
11502 {
11503   tree t = FUNCTION_ARG_CHAIN (d);
11504   if (DECL_CONSTRUCTOR_P (d)
11505       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11506     t = TREE_CHAIN (t);
11507   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11508       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11509           == DECL_CLASS_CONTEXT (d))
11510       && (TREE_CHAIN (t) == NULL_TREE
11511           || TREE_CHAIN (t) == void_list_node
11512           || TREE_PURPOSE (TREE_CHAIN (t))))
11513     return 1;
11514   return 0;
11515 }
11516
11517 /* These memoizing functions keep track of special properties which
11518    a class may have.  `grok_ctor_properties' notices whether a class
11519    has a constructor of the form X(X&), and also complains
11520    if the class has a constructor of the form X(X).
11521    `grok_op_properties' takes notice of the various forms of
11522    operator= which are defined, as well as what sorts of type conversion
11523    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11524
11525 int
11526 grok_ctor_properties (ctype, decl)
11527      tree ctype, decl;
11528 {
11529   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11530   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11531
11532   /* When a type has virtual baseclasses, a magical first int argument is
11533      added to any ctor so we can tell if the class has been initialized
11534      yet.  This could screw things up in this function, so we deliberately
11535      ignore the leading int if we're in that situation.  */
11536   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11537     {
11538       my_friendly_assert (parmtypes
11539                           && TREE_VALUE (parmtypes) == integer_type_node,
11540                           980529);
11541       parmtypes = TREE_CHAIN (parmtypes);
11542       parmtype = TREE_VALUE (parmtypes);
11543     }
11544
11545   /* [class.copy]
11546
11547      A non-template constructor for class X is a copy constructor if
11548      its first parameter is of type X&, const X&, volatile X& or const
11549      volatile X&, and either there are no other parameters or else all
11550      other parameters have default arguments.  */
11551   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11552       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11553       && (TREE_CHAIN (parmtypes) == NULL_TREE
11554           || TREE_CHAIN (parmtypes) == void_list_node
11555           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11556       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11557            && is_member_template (DECL_TI_TEMPLATE (decl))))
11558     {
11559       TYPE_HAS_INIT_REF (ctype) = 1;
11560       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11561         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11562     }
11563   /* [class.copy]
11564
11565      A declaration of a constructor for a class X is ill-formed if its
11566      first parameter is of type (optionally cv-qualified) X and either
11567      there are no other parameters or else all other parameters have
11568      default arguments.  
11569
11570      We *don't* complain about member template instantiations that
11571      have this form, though; they can occur as we try to decide what
11572      constructor to use during overload resolution.  Since overload
11573      resolution will never prefer such a constructor to the
11574      non-template copy constructor (which is either explicitly or
11575      implicitly defined), there's no need to worry about their
11576      existence.  Theoretically, they should never even be
11577      instantiated, but that's hard to forestall.  */
11578   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11579            && (TREE_CHAIN (parmtypes) == NULL_TREE
11580                || TREE_CHAIN (parmtypes) == void_list_node
11581                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11582            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11583                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11584     {
11585       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11586                 ctype, ctype);
11587       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11588       return 0;
11589     }
11590   else if (TREE_CODE (parmtype) == VOID_TYPE
11591            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11592     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11593
11594   return 1;
11595 }
11596
11597 /* An operator with this name can be either unary or binary.  */
11598
11599 static int
11600 ambi_op_p (name)
11601      tree name;
11602 {
11603   return (name == ansi_opname [(int) INDIRECT_REF]
11604           || name == ansi_opname [(int) ADDR_EXPR]
11605           || name == ansi_opname [(int) NEGATE_EXPR]
11606           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11607           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11608           || name == ansi_opname [(int) CONVERT_EXPR]);
11609 }
11610
11611 /* An operator with this name can only be unary.  */
11612
11613 static int
11614 unary_op_p (name)
11615      tree name;
11616 {
11617   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11618           || name == ansi_opname [(int) BIT_NOT_EXPR]
11619           || name == ansi_opname [(int) COMPONENT_REF]
11620           || IDENTIFIER_TYPENAME_P (name));
11621 }
11622
11623 /* Do a little sanity-checking on how they declared their operator.  */
11624
11625 void
11626 grok_op_properties (decl, virtualp, friendp)
11627      tree decl;
11628      int virtualp, friendp;
11629 {
11630   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11631   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11632   tree name = DECL_NAME (decl);
11633
11634   if (current_class_type == NULL_TREE)
11635     friendp = 1;
11636
11637   if (! friendp)
11638     {
11639       /* [class.copy]
11640
11641          A user-declared copy assignment operator X::operator= is a
11642          non-static non-template member function of class X with
11643          exactly one parameter of type X, X&, const X&, volatile X& or
11644          const volatile X&.  */
11645       if (name == ansi_opname[(int) MODIFY_EXPR]
11646           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11647                && is_member_template (DECL_TI_TEMPLATE (decl))))
11648         ;
11649       else if (name == ansi_opname[(int) CALL_EXPR])
11650         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11651       else if (name == ansi_opname[(int) ARRAY_REF])
11652         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11653       else if (name == ansi_opname[(int) COMPONENT_REF]
11654                || name == ansi_opname[(int) MEMBER_REF])
11655         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11656       else if (name == ansi_opname[(int) NEW_EXPR])
11657         TYPE_GETS_NEW (current_class_type) |= 1;
11658       else if (name == ansi_opname[(int) DELETE_EXPR])
11659         TYPE_GETS_DELETE (current_class_type) |= 1;
11660       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11661         TYPE_GETS_NEW (current_class_type) |= 2;
11662       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11663         TYPE_GETS_DELETE (current_class_type) |= 2;
11664     }
11665
11666   if (name == ansi_opname[(int) NEW_EXPR]
11667       || name == ansi_opname[(int) VEC_NEW_EXPR])
11668     {
11669       /* When the compiler encounters the definition of A::operator new, it
11670          doesn't look at the class declaration to find out if it's static.  */
11671       if (methodp)
11672         revert_static_member_fn (&decl, NULL, NULL);
11673      
11674       /* Take care of function decl if we had syntax errors.  */
11675       if (argtypes == NULL_TREE)
11676         TREE_TYPE (decl)
11677           = build_function_type (ptr_type_node,
11678                                  hash_tree_chain (integer_type_node,
11679                                                   void_list_node));
11680       else
11681         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11682     }
11683   else if (name == ansi_opname[(int) DELETE_EXPR]
11684            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11685     {
11686       if (methodp)
11687         revert_static_member_fn (&decl, NULL, NULL);
11688      
11689       if (argtypes == NULL_TREE)
11690         TREE_TYPE (decl)
11691           = build_function_type (void_type_node,
11692                                  hash_tree_chain (ptr_type_node,
11693                                                   void_list_node));
11694       else
11695         {
11696           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11697
11698           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11699               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11700                   != void_list_node))
11701             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11702         }
11703     }
11704   else
11705     {
11706       /* An operator function must either be a non-static member function
11707          or have at least one parameter of a class, a reference to a class,
11708          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11709       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11710         {
11711           if (IDENTIFIER_TYPENAME_P (name)
11712               || name == ansi_opname[(int) CALL_EXPR]
11713               || name == ansi_opname[(int) MODIFY_EXPR]
11714               || name == ansi_opname[(int) COMPONENT_REF]
11715               || name == ansi_opname[(int) ARRAY_REF])
11716             cp_error ("`%D' must be a nonstatic member function", decl);
11717           else
11718             {
11719               tree p = argtypes;
11720
11721               if (DECL_STATIC_FUNCTION_P (decl))
11722                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11723
11724               if (p)
11725                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11726                   {
11727                     tree arg = TREE_VALUE (p);
11728                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11729                       arg = TREE_TYPE (arg);
11730
11731                     /* This lets bad template code slip through.  */
11732                     if (IS_AGGR_TYPE (arg)
11733                         || TREE_CODE (arg) == ENUMERAL_TYPE
11734                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11735                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11736                       goto foundaggr;
11737                   }
11738               cp_error
11739                 ("`%D' must have an argument of class or enumerated type",
11740                  decl);
11741             foundaggr:
11742               ;
11743             }
11744         }
11745       
11746       if (name == ansi_opname[(int) CALL_EXPR])
11747         return;                 /* No restrictions on args. */
11748
11749       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11750         {
11751           tree t = TREE_TYPE (name);
11752           if (TREE_CODE (t) == VOID_TYPE)
11753             pedwarn ("void is not a valid type conversion operator");
11754           else if (! friendp)
11755             {
11756               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11757               const char *what = 0;
11758               if (ref)
11759                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11760
11761               if (t == current_class_type)
11762                 what = "the same type";
11763               /* Don't force t to be complete here.  */
11764               else if (IS_AGGR_TYPE (t)
11765                        && TYPE_SIZE (t)
11766                        && DERIVED_FROM_P (t, current_class_type))
11767                 what = "a base class";
11768
11769               if (what)
11770                 warning ("conversion to %s%s will never use a type conversion operator",
11771                          ref ? "a reference to " : "", what);
11772             }
11773         }
11774
11775       if (name == ansi_opname[(int) MODIFY_EXPR])
11776         {
11777           tree parmtype;
11778
11779           if (list_length (argtypes) != 3 && methodp)
11780             {
11781               cp_error ("`%D' must take exactly one argument", decl);
11782               return;
11783             }
11784           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11785
11786           if (copy_assignment_arg_p (parmtype, virtualp)
11787               && ! friendp)
11788             {
11789               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11790               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11791                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11792                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11793             }
11794         }
11795       else if (name == ansi_opname[(int) COND_EXPR])
11796         {
11797           /* 13.4.0.3 */
11798           cp_error ("ANSI C++ prohibits overloading operator ?:");
11799         }         
11800       else if (ambi_op_p (name))
11801         {
11802           if (list_length (argtypes) == 2)
11803             /* prefix */;
11804           else if (list_length (argtypes) == 3)
11805             {
11806               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11807                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11808                   && ! processing_template_decl
11809                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11810                 {
11811                   if (methodp)
11812                     cp_error ("postfix `%D' must take `int' as its argument",
11813                               decl);
11814                   else
11815                     cp_error
11816                       ("postfix `%D' must take `int' as its second argument",
11817                        decl);
11818                 }
11819             }
11820           else
11821             {
11822               if (methodp)
11823                 cp_error ("`%D' must take either zero or one argument", decl);
11824               else
11825                 cp_error ("`%D' must take either one or two arguments", decl);
11826             }
11827
11828           /* More Effective C++ rule 6.  */
11829           if (warn_ecpp
11830               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11831                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11832             {
11833               tree arg = TREE_VALUE (argtypes);
11834               tree ret = TREE_TYPE (TREE_TYPE (decl));
11835               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11836                 arg = TREE_TYPE (arg);
11837               arg = TYPE_MAIN_VARIANT (arg);
11838               if (list_length (argtypes) == 2)
11839                 {
11840                   if (TREE_CODE (ret) != REFERENCE_TYPE
11841                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11842                                        arg))
11843                     cp_warning ("prefix `%D' should return `%T'", decl,
11844                                 build_reference_type (arg));
11845                 }
11846               else
11847                 {
11848                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11849                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11850                 }
11851             }
11852         }
11853       else if (unary_op_p (name))
11854         {
11855           if (list_length (argtypes) != 2)
11856             {
11857               if (methodp)
11858                 cp_error ("`%D' must take `void'", decl);
11859               else
11860                 cp_error ("`%D' must take exactly one argument", decl);
11861             }
11862         }
11863       else /* if (binary_op_p (name)) */
11864         {
11865           if (list_length (argtypes) != 3)
11866             {
11867               if (methodp)
11868                 cp_error ("`%D' must take exactly one argument", decl);
11869               else
11870                 cp_error ("`%D' must take exactly two arguments", decl);
11871             }
11872
11873           /* More Effective C++ rule 7.  */
11874           if (warn_ecpp
11875               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11876                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11877                   || name == ansi_opname [COMPOUND_EXPR]))
11878             cp_warning ("user-defined `%D' always evaluates both arguments",
11879                         decl);
11880         }
11881
11882       /* Effective C++ rule 23.  */
11883       if (warn_ecpp
11884           && list_length (argtypes) == 3
11885           && (name == ansi_opname [PLUS_EXPR]
11886               || name == ansi_opname [MINUS_EXPR]
11887               || name == ansi_opname [TRUNC_DIV_EXPR]
11888               || name == ansi_opname [MULT_EXPR])
11889           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11890         cp_warning ("`%D' should return by value", decl);
11891
11892       /* 13.4.0.8 */
11893       if (argtypes)
11894         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11895           if (TREE_PURPOSE (argtypes))
11896             {
11897               TREE_PURPOSE (argtypes) = NULL_TREE;
11898               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11899                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11900                 {
11901                   if (pedantic)
11902                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11903                 }
11904               else
11905                 cp_error ("`%D' cannot have default arguments", decl);
11906             }
11907     }
11908 }
11909 \f
11910 static const char *
11911 tag_name (code)
11912      enum tag_types code;
11913 {
11914   switch (code)
11915     {
11916     case record_type:
11917       return "struct";
11918     case class_type:
11919       return "class";
11920     case union_type:
11921       return "union ";
11922     case enum_type:
11923       return "enum";
11924     default:
11925       my_friendly_abort (981122);
11926     }
11927 }
11928
11929 /* Get the struct, enum or union (CODE says which) with tag NAME.
11930    Define the tag as a forward-reference if it is not defined.
11931
11932    C++: If a class derivation is given, process it here, and report
11933    an error if multiple derivation declarations are not identical.
11934
11935    If this is a definition, come in through xref_tag and only look in
11936    the current frame for the name (since C++ allows new names in any
11937    scope.)  */
11938
11939 tree
11940 xref_tag (code_type_node, name, globalize)
11941      tree code_type_node;
11942      tree name;
11943      int globalize;
11944 {
11945   enum tag_types tag_code;
11946   enum tree_code code;
11947   int temp = 0;
11948   register tree ref, t;
11949   struct binding_level *b = current_binding_level;
11950   int got_type = 0;
11951   tree attributes = NULL_TREE;
11952   tree context = NULL_TREE;
11953
11954   /* If we are called from the parser, code_type_node will sometimes be a
11955      TREE_LIST.  This indicates that the user wrote
11956      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11957      use them later.  */
11958   if (TREE_CODE (code_type_node) == TREE_LIST)
11959     {
11960       attributes = TREE_PURPOSE (code_type_node);
11961       code_type_node = TREE_VALUE (code_type_node);
11962     }
11963
11964   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11965   switch (tag_code)
11966     {
11967     case record_type:
11968     case class_type:
11969       code = RECORD_TYPE;
11970       break;
11971     case union_type:
11972       code = UNION_TYPE;
11973       break;
11974     case enum_type:
11975       code = ENUMERAL_TYPE;
11976       break;
11977     default:
11978       my_friendly_abort (18);
11979     }
11980
11981   /* If a cross reference is requested, look up the type
11982      already defined for this tag and return it.  */
11983   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11984     {
11985       t = name;
11986       name = TYPE_IDENTIFIER (t);
11987       got_type = 1;
11988     }
11989   else
11990     t = IDENTIFIER_TYPE_VALUE (name);
11991
11992   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11993       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11994     t = NULL_TREE;
11995
11996   if (! globalize)
11997     {
11998       /* If we know we are defining this tag, only look it up in
11999          this scope and don't try to find it as a type.  */
12000       ref = lookup_tag (code, name, b, 1);
12001     }
12002   else
12003     {
12004       if (t)
12005         {
12006           /* [dcl.type.elab] If the identifier resolves to a
12007              typedef-name or a template type-parameter, the
12008              elaborated-type-specifier is ill-formed.  */
12009           if (t != TYPE_MAIN_VARIANT (t)
12010               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12011             cp_pedwarn ("using typedef-name `%D' after `%s'",
12012                         TYPE_NAME (t), tag_name (tag_code));
12013           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12014             cp_error ("using template type parameter `%T' after `%s'",
12015                       t, tag_name (tag_code));
12016
12017           ref = t;
12018         }
12019       else
12020         ref = lookup_tag (code, name, b, 0);
12021           
12022       if (! ref)
12023         {
12024           /* Try finding it as a type declaration.  If that wins,
12025              use it.  */ 
12026           ref = lookup_name (name, 1);
12027
12028           if (ref != NULL_TREE
12029               && processing_template_decl
12030               && DECL_CLASS_TEMPLATE_P (ref)
12031               && template_class_depth (current_class_type) == 0)
12032             /* Since GLOBALIZE is true, we're declaring a global
12033                template, so we want this type.  */
12034             ref = DECL_RESULT (ref);
12035
12036           if (ref && TREE_CODE (ref) == TYPE_DECL
12037               && TREE_CODE (TREE_TYPE (ref)) == code)
12038             ref = TREE_TYPE (ref);
12039           else
12040             ref = NULL_TREE;
12041         }
12042
12043       if (ref && current_class_type 
12044           && template_class_depth (current_class_type) 
12045           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12046         {
12047           /* Since GLOBALIZE is non-zero, we are not looking at a
12048              definition of this tag.  Since, in addition, we are currently
12049              processing a (member) template declaration of a template
12050              class, we must be very careful; consider:
12051
12052                template <class X>
12053                struct S1
12054
12055                template <class U>
12056                struct S2
12057                { template <class V>
12058                friend struct S1; };
12059
12060              Here, the S2::S1 declaration should not be confused with the
12061              outer declaration.  In particular, the inner version should
12062              have a template parameter of level 2, not level 1.  This
12063              would be particularly important if the member declaration
12064              were instead:
12065
12066                template <class V = U> friend struct S1;
12067
12068              say, when we should tsubst into `U' when instantiating
12069              S2.  On the other hand, when presented with:
12070
12071                  template <class T>
12072                  struct S1 {
12073                    template <class U>
12074                    struct S2 {};
12075                    template <class U>
12076                    friend struct S2;
12077                  };
12078
12079               we must find the inner binding eventually.  We
12080               accomplish this by making sure that the new type we
12081               create to represent this declaration has the right
12082               TYPE_CONTEXT.  */
12083           context = TYPE_CONTEXT (ref);
12084           ref = NULL_TREE;
12085         }
12086     }
12087
12088   push_obstacks_nochange ();
12089
12090   if (! ref)
12091     {
12092       /* If no such tag is yet defined, create a forward-reference node
12093          and record it as the "definition".
12094          When a real declaration of this type is found,
12095          the forward-reference will be altered into a real type.  */
12096
12097       /* In C++, since these migrate into the global scope, we must
12098          build them on the permanent obstack.  */
12099
12100       temp = allocation_temporary_p ();
12101       if (temp)
12102         end_temporary_allocation ();
12103
12104       if (code == ENUMERAL_TYPE)
12105         {
12106           cp_error ("use of enum `%#D' without previous declaration", name);
12107
12108           ref = make_node (ENUMERAL_TYPE);
12109
12110           /* Give the type a default layout like unsigned int
12111              to avoid crashing if it does not get defined.  */
12112           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12113           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12114           TREE_UNSIGNED (ref) = 1;
12115           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12116           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12117           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12118
12119           /* Enable us to recognize when a type is created in class context.
12120              To do nested classes correctly, this should probably be cleared
12121              out when we leave this classes scope.  Currently this in only
12122              done in `start_enum'.  */
12123
12124           pushtag (name, ref, globalize);
12125         }
12126       else
12127         {
12128           struct binding_level *old_b = class_binding_level;
12129
12130           ref = make_lang_type (code);
12131           TYPE_CONTEXT (ref) = context;
12132
12133 #ifdef NONNESTED_CLASSES
12134           /* Class types don't nest the way enums do.  */
12135           class_binding_level = (struct binding_level *)0;
12136 #endif
12137           pushtag (name, ref, globalize);
12138           class_binding_level = old_b;
12139         }
12140     }
12141   else
12142     {
12143       /* If it no longer looks like a nested type, make sure it's
12144          in global scope.  
12145          If it is not an IDENTIFIER, this is not a declaration */
12146       if (b->namespace_p && !class_binding_level
12147           && TREE_CODE (name) == IDENTIFIER_NODE
12148           && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12149         SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12150
12151       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12152         redeclare_class_template (ref, current_template_parms);
12153     }
12154
12155   /* Until the type is defined, tentatively accept whatever
12156      structure tag the user hands us.  */
12157   if (TYPE_SIZE (ref) == NULL_TREE
12158       && ref != current_class_type
12159       /* Have to check this, in case we have contradictory tag info.  */
12160       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12161     {
12162       if (tag_code == class_type)
12163         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12164       else if (tag_code == record_type)
12165         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12166     }
12167
12168   pop_obstacks ();
12169
12170   TREE_TYPE (ref) = attributes;
12171
12172   return ref;
12173 }
12174
12175 tree
12176 xref_tag_from_type (old, id, globalize)
12177      tree old, id;
12178      int globalize;
12179 {
12180   tree code_type_node;
12181
12182   if (TREE_CODE (old) == RECORD_TYPE)
12183     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12184                       ? class_type_node : record_type_node);
12185   else
12186     code_type_node = union_type_node;
12187
12188   if (id == NULL_TREE)
12189     id = TYPE_IDENTIFIER (old);
12190
12191   return xref_tag (code_type_node, id, globalize);
12192 }
12193
12194 /* REF is a type (named NAME), for which we have just seen some
12195    baseclasses.  BINFO is a list of those baseclasses; the
12196    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12197    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12198    struct, or union.  */
12199
12200 void
12201 xref_basetypes (code_type_node, name, ref, binfo)
12202      tree code_type_node;
12203      tree name, ref;
12204      tree binfo;
12205 {
12206   /* In the declaration `A : X, Y, ... Z' we mark all the types
12207      (A, X, Y, ..., Z) so we can check for duplicates.  */
12208   tree binfos;
12209   tree base;
12210
12211   int i, len;
12212   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12213
12214   if (tag_code == union_type)
12215     {
12216       cp_error ("derived union `%T' invalid", ref);
12217       return;
12218     }
12219
12220   len = list_length (binfo);
12221   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12222
12223   /* First, make sure that any templates in base-classes are
12224      instantiated.  This ensures that if we call ourselves recursively
12225      we do not get confused about which classes are marked and which
12226      are not.  */
12227   for (base = binfo; base; base = TREE_CHAIN (base))
12228     complete_type (TREE_VALUE (base));
12229
12230   SET_CLASSTYPE_MARKED (ref);
12231   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12232
12233   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12234     {
12235       /* The base of a derived struct is public by default.  */
12236       int via_public
12237         = (TREE_PURPOSE (binfo) == access_public_node
12238            || TREE_PURPOSE (binfo) == access_public_virtual_node
12239            || (tag_code != class_type
12240                && (TREE_PURPOSE (binfo) == access_default_node
12241                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12242       int via_protected
12243         = (TREE_PURPOSE (binfo) == access_protected_node
12244            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12245       int via_virtual
12246         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12247            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12248            || TREE_PURPOSE (binfo) == access_public_virtual_node
12249            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12250       tree basetype = TREE_VALUE (binfo);
12251       tree base_binfo;
12252
12253       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12254         basetype = TREE_TYPE (basetype);
12255       if (!basetype
12256           || (TREE_CODE (basetype) != RECORD_TYPE
12257               && TREE_CODE (basetype) != TYPENAME_TYPE
12258               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12259               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12260         {
12261           cp_error ("base type `%T' fails to be a struct or class type",
12262                     TREE_VALUE (binfo));
12263           continue;
12264         }
12265
12266       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12267
12268       /* This code replaces similar code in layout_basetypes.
12269          We put the complete_type first for implicit `typename'.  */
12270       if (TYPE_SIZE (basetype) == NULL_TREE
12271           && ! (current_template_parms && uses_template_parms (basetype)))
12272         {
12273           cp_error ("base class `%T' has incomplete type", basetype);
12274           continue;
12275         }
12276       else
12277         {
12278           if (CLASSTYPE_MARKED (basetype))
12279             {
12280               if (basetype == ref)
12281                 cp_error ("recursive type `%T' undefined", basetype);
12282               else
12283                 cp_error ("duplicate base type `%T' invalid", basetype);
12284               continue;
12285             }
12286
12287           if (TYPE_FOR_JAVA (basetype)
12288               && (current_lang_stack 
12289                   == &VARRAY_TREE (current_lang_base, 0)))
12290             TYPE_FOR_JAVA (ref) = 1;
12291
12292           /* Note that the BINFO records which describe individual
12293              inheritances are *not* shared in the lattice!  They
12294              cannot be shared because a given baseclass may be
12295              inherited with different `accessibility' by different
12296              derived classes.  (Each BINFO record describing an
12297              individual inheritance contains flags which say what
12298              the `accessibility' of that particular inheritance is.)  */
12299   
12300           base_binfo 
12301             = make_binfo (integer_zero_node, basetype,
12302                           CLASS_TYPE_P (basetype)
12303                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12304                           CLASS_TYPE_P (basetype)
12305                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12306  
12307           TREE_VEC_ELT (binfos, i) = base_binfo;
12308           TREE_VIA_PUBLIC (base_binfo) = via_public;
12309           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12310           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12311           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12312
12313           /* We need to unshare the binfos now so that lookups during class
12314              definition work.  */
12315           unshare_base_binfos (base_binfo);
12316
12317           SET_CLASSTYPE_MARKED (basetype);
12318
12319           /* We are free to modify these bits because they are meaningless
12320              at top level, and BASETYPE is a top-level type.  */
12321           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12322             {
12323               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12324               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12325             }
12326
12327           if (CLASS_TYPE_P (basetype))
12328             {
12329               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12330               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12331             }
12332
12333           i += 1;
12334         }
12335     }
12336   if (i)
12337     TREE_VEC_LENGTH (binfos) = i;
12338   else
12339     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12340
12341   if (i > 1)
12342     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12343   else if (i == 1)
12344     {
12345       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12346       
12347       if (CLASS_TYPE_P (basetype))
12348         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12349           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12350     }
12351
12352   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12353     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12354
12355   /* Unmark all the types.  */
12356   while (--i >= 0)
12357     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12358   CLEAR_CLASSTYPE_MARKED (ref);
12359
12360   /* Now that we know all the base-classes, set up the list of virtual
12361      bases.  */
12362   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12363
12364   pop_obstacks ();
12365 }
12366   
12367 \f
12368 /* Begin compiling the definition of an enumeration type.
12369    NAME is its name (or null if anonymous).
12370    Returns the type object, as yet incomplete.
12371    Also records info about it so that build_enumerator
12372    may be used to declare the individual values as they are read.  */
12373
12374 tree
12375 start_enum (name)
12376      tree name;
12377 {
12378   register tree enumtype = NULL_TREE;
12379   struct binding_level *b = current_binding_level;
12380
12381   /* We are wasting space here and putting these on the permanent_obstack so
12382      that typeid(local enum) will work correctly. */
12383   push_obstacks (&permanent_obstack, &permanent_obstack);
12384
12385   /* If this is the real definition for a previous forward reference,
12386      fill in the contents in the same object that used to be the
12387      forward reference.  */
12388
12389   if (name != NULL_TREE)
12390     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12391
12392   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12393     {
12394       cp_error ("multiple definition of `%#T'", enumtype);
12395       cp_error_at ("previous definition here", enumtype);
12396     }
12397   else
12398     {
12399       enumtype = make_node (ENUMERAL_TYPE);
12400       pushtag (name, enumtype, 0);
12401     }
12402
12403   if (current_class_type)
12404     TREE_ADDRESSABLE (b->tags) = 1;
12405
12406   /* We don't copy this value because build_enumerator needs to do it.  */
12407   enum_next_value = integer_zero_node;
12408   enum_overflow = 0;
12409
12410   GNU_xref_decl (current_function_decl, enumtype);
12411   return enumtype;
12412 }
12413
12414 /* After processing and defining all the values of an enumeration type,
12415    install their decls in the enumeration type and finish it off.
12416    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12417    Returns ENUMTYPE.  */
12418
12419 tree
12420 finish_enum (enumtype)
12421      tree enumtype;
12422 {
12423   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12424   /* Calculate the maximum value of any enumerator in this type.  */
12425
12426   tree values = TYPE_VALUES (enumtype);
12427   if (values)
12428     {
12429       tree pair;
12430
12431       for (pair = values; pair; pair = TREE_CHAIN (pair))
12432         {
12433           tree decl;
12434           tree value;
12435
12436           /* The TREE_VALUE is a CONST_DECL for this enumeration
12437              constant.  */
12438           decl = TREE_VALUE (pair);
12439
12440           /* The DECL_INITIAL will be NULL if we are processing a
12441              template declaration and this enumeration constant had no
12442              explicit initializer.  */
12443           value = DECL_INITIAL (decl);
12444           if (value && !processing_template_decl)
12445             {
12446               /* Set the TREE_TYPE for the VALUE as well.  That's so
12447                  that when we call decl_constant_value we get an
12448                  entity of the right type (but with the constant
12449                  value).  Since we shouldn't ever call
12450                  decl_constant_value on a template type, there's no
12451                  reason to do that when processing_template_decl.
12452                  And, if the expression is something like a
12453                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12454                  wreak havoc on the intended type of the expression.  
12455
12456                  Of course, there's also no point in trying to compute
12457                  minimum or maximum values if we're in a template.  */
12458               TREE_TYPE (value) = enumtype;
12459
12460               if (!minnode)
12461                 minnode = maxnode = value;
12462               else if (tree_int_cst_lt (maxnode, value))
12463                 maxnode = value;
12464               else if (tree_int_cst_lt (value, minnode))
12465                 minnode = value;
12466             }
12467
12468           if (processing_template_decl) 
12469             /* If this is just a template, leave the CONST_DECL
12470                alone.  That way tsubst_copy will find CONST_DECLs for
12471                CONST_DECLs, and not INTEGER_CSTs.  */
12472             ;
12473           else
12474             /* In the list we're building up, we want the enumeration
12475                values, not the CONST_DECLs.  */
12476             TREE_VALUE (pair) = value;
12477         }
12478     }
12479   else
12480     maxnode = minnode = integer_zero_node;
12481
12482   TYPE_VALUES (enumtype) = nreverse (values);
12483
12484   if (processing_template_decl)
12485     {
12486       tree scope = current_scope ();
12487       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12488         add_tree (build_min (TAG_DEFN, enumtype));
12489     }
12490   else
12491     {
12492       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12493       int lowprec = min_precision (minnode, unsignedp);
12494       int highprec = min_precision (maxnode, unsignedp);
12495       int precision = MAX (lowprec, highprec);
12496       tree tem;
12497
12498       TYPE_SIZE (enumtype) = NULL_TREE;
12499
12500       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12501
12502       TYPE_PRECISION (enumtype) = precision;
12503       if (unsignedp)
12504         fixup_unsigned_type (enumtype);
12505       else
12506         fixup_signed_type (enumtype);
12507
12508       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12509         /* Use the width of the narrowest normal C type which is wide
12510            enough.  */ 
12511         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12512                                                     (precision, 1));
12513       else
12514         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12515
12516       TYPE_SIZE (enumtype) = 0;
12517       layout_type (enumtype);
12518     
12519       /* Fix up all variant types of this enum type.  */
12520       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12521            tem = TYPE_NEXT_VARIANT (tem))
12522         {
12523           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12524           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12525           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12526           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12527           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12528           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12529           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12530           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12531           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12532         }
12533
12534       /* Finish debugging output for this type.  */
12535       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12536     }
12537
12538   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12539   pop_obstacks ();
12540
12541   return enumtype;
12542 }
12543
12544 /* Build and install a CONST_DECL for an enumeration constant of the
12545    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12546    Assignment of sequential values by default is handled here.  */
12547
12548 tree
12549 build_enumerator (name, value, type)
12550      tree name;
12551      tree value;
12552      tree type;
12553 {
12554   tree decl, result;
12555   tree context;
12556
12557   /* Remove no-op casts from the value.  */
12558   if (value)
12559     STRIP_TYPE_NOPS (value);
12560
12561  if (! processing_template_decl)
12562    {
12563      /* Validate and default VALUE.  */
12564      if (value != NULL_TREE)
12565        {
12566          if (TREE_READONLY_DECL_P (value))
12567            value = decl_constant_value (value);
12568
12569          if (TREE_CODE (value) == INTEGER_CST)
12570            {
12571              value = default_conversion (value);
12572              constant_expression_warning (value);
12573            }
12574          else
12575            {
12576              cp_error ("enumerator value for `%D' not integer constant", name);
12577              value = NULL_TREE;
12578            }
12579        }
12580
12581      /* Default based on previous value.  */
12582      if (value == NULL_TREE && ! processing_template_decl)
12583        {
12584          value = enum_next_value;
12585          if (enum_overflow)
12586            cp_error ("overflow in enumeration values at `%D'", name);
12587        }
12588
12589      /* Remove no-op casts from the value.  */
12590      if (value)
12591        STRIP_TYPE_NOPS (value);
12592 #if 0
12593      /* To fix MAX_VAL enum consts. (bkoz)  */
12594      TREE_TYPE (value) = integer_type_node;
12595 #endif
12596    }
12597
12598  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12599     Even in other cases, we will later (in finish_enum) be setting the
12600     type of VALUE.  */
12601  if (value != NULL_TREE)
12602    value = copy_node (value);
12603
12604   /* C++ associates enums with global, function, or class declarations.  */
12605  
12606  context = current_scope ();
12607  if (context && context == current_class_type)
12608    /* This enum declaration is local to the class.  */
12609    decl = build_lang_decl (CONST_DECL, name, type);
12610  else
12611    /* It's a global enum, or it's local to a function.  (Note local to
12612       a function could mean local to a class method.  */
12613    decl = build_decl (CONST_DECL, name, type);
12614
12615  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12616  DECL_INITIAL (decl) = value;
12617  TREE_READONLY (decl) = 1;
12618
12619  if (context && context == current_class_type)
12620    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12621       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12622       things like `S::i' later.)  */
12623    finish_member_declaration (decl);
12624  else
12625    {
12626      pushdecl (decl);
12627      GNU_xref_decl (current_function_decl, decl);
12628    }
12629
12630  if (! processing_template_decl)
12631    {
12632      /* Set basis for default for next value.  */
12633      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12634                                                   integer_one_node, PLUS_EXPR);
12635      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12636    }
12637
12638   result = tree_cons (name, decl, NULL_TREE);
12639   return result;
12640 }
12641
12642 \f
12643 static int function_depth;
12644
12645 /* We're defining DECL.  Make sure that it's type is OK.  */
12646
12647 static void
12648 check_function_type (decl)
12649      tree decl;
12650 {
12651   tree fntype = TREE_TYPE (decl);
12652
12653   /* In a function definition, arg types must be complete.  */
12654   require_complete_types_for_parms (current_function_parms);
12655
12656   if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12657     {
12658       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12659
12660       /* Make it return void instead, but don't change the
12661          type of the DECL_RESULT, in case we have a named return value.  */
12662       if (TREE_CODE (fntype) == METHOD_TYPE)
12663         {
12664           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12665           TREE_TYPE (decl)
12666             = build_cplus_method_type (ctype,
12667                                        void_type_node,
12668                                        FUNCTION_ARG_CHAIN (decl));
12669         }
12670       else
12671         TREE_TYPE (decl)
12672           = build_function_type (void_type_node,
12673                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
12674       TREE_TYPE (decl) 
12675         = build_exception_variant (fntype,
12676                                    TYPE_RAISES_EXCEPTIONS (fntype));
12677     }
12678   else
12679     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12680 }
12681
12682 /* Create the FUNCTION_DECL for a function definition.
12683    DECLSPECS and DECLARATOR are the parts of the declaration;
12684    they describe the function's name and the type it returns,
12685    but twisted together in a fashion that parallels the syntax of C.
12686
12687    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12688    DECLARATOR is really the DECL for the function we are about to
12689    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12690    indicating that the function is an inline defined in-class, and
12691    SF_EXPAND indicating that we should generate RTL for this
12692    function.  
12693    
12694    This function creates a binding context for the function body
12695    as well as setting up the FUNCTION_DECL in current_function_decl.
12696
12697    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12698    (it defines a datum instead), we return 0, which tells
12699    yyparse to report a parse error.
12700
12701    For C++, we must first check whether that datum makes any sense.
12702    For example, "class A local_a(1,2);" means that variable local_a
12703    is an aggregate of type A, which should have a constructor
12704    applied to it with the argument list [1, 2].  */
12705
12706 int
12707 start_function (declspecs, declarator, attrs, flags)
12708      tree declspecs, declarator, attrs;
12709      int flags;
12710 {
12711   tree decl1;
12712   tree ctype = NULL_TREE;
12713   tree fntype;
12714   tree restype;
12715   extern int have_extern_spec;
12716   extern int used_extern_spec;
12717   int doing_friend = 0;
12718   struct binding_level *bl;
12719
12720   /* Sanity check.  */
12721   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12722   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12723
12724   /* This should only be done once on the top most decl.  */
12725   if (have_extern_spec && !used_extern_spec)
12726     {
12727       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12728       used_extern_spec = 1;
12729     }
12730
12731   if (flags & SF_PRE_PARSED)
12732     {
12733       decl1 = declarator;
12734
12735       fntype = TREE_TYPE (decl1);
12736       if (TREE_CODE (fntype) == METHOD_TYPE)
12737         ctype = TYPE_METHOD_BASETYPE (fntype);
12738
12739       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12740          class is in the (lexical) scope of the class in which it is
12741          defined.  */
12742       if (!ctype && DECL_FRIEND_P (decl1))
12743         {
12744           ctype = DECL_CLASS_CONTEXT (decl1);
12745
12746           /* CTYPE could be null here if we're dealing with a template;
12747              for example, `inline friend float foo()' inside a template
12748              will have no CTYPE set.  */
12749           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12750             ctype = NULL_TREE;
12751           else
12752             doing_friend = 1;
12753         }
12754
12755       last_function_parms = DECL_ARGUMENTS (decl1);
12756       last_function_parm_tags = NULL_TREE;
12757     }
12758   else
12759     {
12760       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12761       /* If the declarator is not suitable for a function definition,
12762          cause a syntax error.  */
12763       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12764
12765       fntype = TREE_TYPE (decl1);
12766
12767       restype = TREE_TYPE (fntype);
12768       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12769         {
12770           cp_error ("semicolon missing after declaration of `%#T'", restype);
12771           shadow_tag (build_expr_list (NULL_TREE, restype));
12772           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12773           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12774             fntype = build_function_type (integer_type_node,
12775                                           TYPE_ARG_TYPES (fntype));
12776           else
12777             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12778                                               integer_type_node,
12779                                               TYPE_ARG_TYPES (fntype));
12780           TREE_TYPE (decl1) = fntype;
12781         }
12782
12783       if (TREE_CODE (fntype) == METHOD_TYPE)
12784         ctype = TYPE_METHOD_BASETYPE (fntype);
12785       else if (DECL_MAIN_P (decl1))
12786         {
12787           /* If this doesn't return integer_type, complain.  */
12788           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12789             {
12790               if (pedantic || warn_return_type)
12791                 pedwarn ("return type for `main' changed to `int'");
12792               TREE_TYPE (decl1) = fntype = default_function_type;
12793             }
12794         }
12795     }
12796   
12797   /* Sometimes we don't notice that a function is a static member, and
12798      build a METHOD_TYPE for it.  Fix that up now.  */
12799   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12800       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12801     {
12802       revert_static_member_fn (&decl1, NULL, NULL);
12803       last_function_parms = TREE_CHAIN (last_function_parms);
12804       ctype = NULL_TREE;
12805     }
12806
12807   /* Warn if function was previously implicitly declared
12808      (but not if we warned then).  */
12809   if (! warn_implicit
12810       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12811     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12812
12813   /* Set up current_class_type, and enter the scope of the class, if
12814      appropriate.  */
12815   if (ctype)
12816     push_nested_class (ctype, 1);
12817   else if (DECL_STATIC_FUNCTION_P (decl1))
12818     push_nested_class (DECL_CONTEXT (decl1), 2);
12819
12820   /* Now that we have entered the scope of the class, we must restore
12821      the bindings for any template parameters surrounding DECL1, if it
12822      is an inline member template.  (Order is important; consider the
12823      case where a template parameter has the same name as a field of
12824      the class.)  It is not until after this point that
12825      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12826   if (flags & SF_INCLASS_INLINE)
12827     maybe_begin_member_template_processing (decl1);
12828
12829   /* Effective C++ rule 15.  See also c_expand_return.  */
12830   if (warn_ecpp
12831       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12832       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12833     cp_warning ("`operator=' should return a reference to `*this'");
12834
12835   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12836      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12837   if (!DECL_INITIAL (decl1))
12838     DECL_INITIAL (decl1) = error_mark_node;
12839
12840 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12841   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12842 #endif
12843   
12844   /* This function exists in static storage.
12845      (This does not mean `static' in the C sense!)  */
12846   TREE_STATIC (decl1) = 1;
12847
12848   /* We must call push_template_decl after current_class_type is set
12849      up.  (If we are processing inline definitions after exiting a
12850      class scope, current_class_type will be NULL_TREE until set above
12851      by push_nested_class.)  */
12852   if (processing_template_decl)
12853     decl1 = push_template_decl (decl1);
12854
12855   /* We are now in the scope of the function being defined.  */
12856   current_function_decl = decl1;
12857
12858   /* Save the parm names or decls from this function's declarator
12859      where store_parm_decls will find them.  */
12860   current_function_parms = last_function_parms;
12861   current_function_parm_tags = last_function_parm_tags;
12862
12863   /* Make sure the parameter and return types are reasonable.  When
12864      you declare a function, these types can be incomplete, but they
12865      must be complete when you define the function.  */
12866   if (! processing_template_decl)
12867     check_function_type (decl1);
12868
12869   /* Build the return declaration for the function.  */
12870   restype = TREE_TYPE (fntype);
12871   if (!processing_template_decl)
12872     {
12873       if (!DECL_RESULT (decl1))
12874         {
12875           DECL_RESULT (decl1)
12876             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12877           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype), 
12878                                       DECL_RESULT (decl1)); 
12879         }
12880     }
12881   else
12882     /* Just use `void'.  Nobody will ever look at this anyhow.  */
12883     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12884
12885   /* Initialize RTL machinery.  We cannot do this until
12886      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12887      even when processing a template; this is how we get
12888      CURRENT_FUNCTION set up, and our per-function variables
12889      initialized.  */
12890   bl = current_binding_level;
12891   init_function_start (decl1, input_filename, lineno);
12892   current_binding_level = bl;
12893   expanding_p = (flags & SF_EXPAND) != 0;
12894
12895   /* Even though we're inside a function body, we still don't want to
12896      call expand_expr to calculate the size of a variable-sized array.
12897      We haven't necessarily assigned RTL to all variables yet, so it's
12898      not safe to try to expand expressions involving them.  */
12899   immediate_size_expand = 0;
12900   get_pending_sizes ();
12901
12902   /* Let the user know we're compiling this function.  */
12903   if (processing_template_decl || !building_stmt_tree ())
12904     announce_function (decl1);
12905
12906   /* Record the decl so that the function name is defined.
12907      If we already have a decl for this name, and it is a FUNCTION_DECL,
12908      use the old decl.  */
12909   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12910     {
12911       /* A specialization is not used to guide overload resolution.  */
12912       if ((flag_guiding_decls 
12913            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12914           && ! DECL_FUNCTION_MEMBER_P (decl1))
12915         decl1 = pushdecl (decl1);
12916       else
12917         {
12918           /* We need to set the DECL_CONTEXT. */
12919           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12920             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12921           /* And make sure we have enough default args.  */
12922           check_default_args (decl1);
12923         }
12924       DECL_MAIN_VARIANT (decl1) = decl1;
12925       fntype = TREE_TYPE (decl1);
12926     }
12927
12928   /* Reset these in case the call to pushdecl changed them.  */
12929   current_function_decl = decl1;
12930   current_function->decl = decl1;
12931
12932   /* Initialize the per-function data.  */
12933   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12934     {
12935       /* If we already parsed this function, and we're just expanding it
12936          now, restore saved state.  */
12937       struct binding_level *bl = current_binding_level;
12938       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12939       current_binding_level = bl;
12940
12941       /* This function is being processed in whole-function mode; we
12942          already did semantic analysis.  */
12943       current_function->x_whole_function_mode_p = 1;
12944
12945       /* We don't need the saved data anymore.  */
12946       free (DECL_SAVED_FUNCTION_DATA (decl1));
12947       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12948     }
12949   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12950     {
12951       /* We know that this was set up by `grokclassfn'.  We do not
12952          wait until `store_parm_decls', since evil parse errors may
12953          never get us to that point.  Here we keep the consistency
12954          between `current_class_type' and `current_class_ptr'.  */
12955       tree t = DECL_ARGUMENTS (decl1);
12956               
12957       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL, 
12958                           162);
12959       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12960                           19990811);
12961           
12962       cp_function_chain->x_current_class_ref 
12963         = build_indirect_ref (t, NULL_PTR);
12964       cp_function_chain->x_current_class_ptr = t;
12965
12966       if (DECL_DESTRUCTOR_P (decl1))
12967         current_in_charge_parm = TREE_CHAIN (t);
12968     }
12969
12970   if (DECL_INTERFACE_KNOWN (decl1))
12971     {
12972       tree ctx = hack_decl_function_context (decl1);
12973
12974       if (DECL_NOT_REALLY_EXTERN (decl1))
12975         DECL_EXTERNAL (decl1) = 0;
12976
12977       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12978           && TREE_PUBLIC (ctx))
12979         /* This is a function in a local class in an extern inline
12980            function.  */
12981         comdat_linkage (decl1);
12982     }
12983   /* If this function belongs to an interface, it is public.
12984      If it belongs to someone else's interface, it is also external.
12985      This only affects inlines and template instantiations.  */
12986   else if (interface_unknown == 0
12987            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
12988                || flag_alt_external_templates))
12989     {
12990       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
12991           || processing_template_decl)
12992         {
12993           DECL_EXTERNAL (decl1)
12994             = (interface_only
12995                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
12996                    && !DECL_VINDEX (decl1)));
12997
12998           /* For WIN32 we also want to put these in linkonce sections.  */
12999           maybe_make_one_only (decl1);
13000         }
13001       else
13002         DECL_EXTERNAL (decl1) = 0;
13003       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13004       DECL_INTERFACE_KNOWN (decl1) = 1;
13005     }
13006   else if (interface_unknown && interface_only
13007            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13008                || flag_alt_external_templates))
13009     {
13010       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13011          interface, we will have interface_only set but not
13012          interface_known.  In that case, we don't want to use the normal
13013          heuristics because someone will supply a #pragma implementation
13014          elsewhere, and deducing it here would produce a conflict.  */
13015       comdat_linkage (decl1);
13016       DECL_EXTERNAL (decl1) = 0;
13017       DECL_INTERFACE_KNOWN (decl1) = 1;
13018       DECL_DEFER_OUTPUT (decl1) = 1;
13019     }
13020   else
13021     {
13022       /* This is a definition, not a reference.
13023          So clear DECL_EXTERNAL.  */
13024       DECL_EXTERNAL (decl1) = 0;
13025
13026       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13027           && ! DECL_INTERFACE_KNOWN (decl1)
13028           /* Don't try to defer nested functions for now.  */
13029           && ! hack_decl_function_context (decl1))
13030         DECL_DEFER_OUTPUT (decl1) = 1;
13031       else
13032         DECL_INTERFACE_KNOWN (decl1) = 1;
13033     }
13034
13035   if (doing_semantic_analysis_p ())
13036     {
13037       pushlevel (0);
13038       current_binding_level->parm_flag = 1;
13039     }
13040
13041   if (attrs)
13042     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13043   
13044   if (!building_stmt_tree ())
13045     {
13046       GNU_xref_function (decl1, current_function_parms);
13047       make_function_rtl (decl1);
13048     }
13049
13050   /* Promote the value to int before returning it.  */
13051   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13052     restype = type_promotes_to (restype);
13053
13054   /* If this fcn was already referenced via a block-scope `extern' decl
13055      (or an implicit decl), propagate certain information about the usage.  */
13056   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13057     TREE_ADDRESSABLE (decl1) = 1;
13058
13059   if (DECL_RESULT (decl1) == NULL_TREE)
13060     {
13061       DECL_RESULT (decl1)
13062         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13063       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13064       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13065     }
13066
13067   /* Allocate further tree nodes temporarily during compilation
13068      of this function only.  Tiemann moved up here from bottom of fn.  */
13069   /* If this is a nested function, then we must continue to allocate RTL
13070      on the permanent obstack in case we need to inline it later.  */
13071   if (! hack_decl_function_context (decl1))
13072     temporary_allocation ();
13073   
13074   /* Make sure that we always have a momntary obstack while we're in a
13075      function body.  */
13076   push_momentary ();
13077
13078   if (building_stmt_tree ())
13079     begin_stmt_tree (decl1);
13080
13081   ++function_depth;
13082
13083   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13084       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13085     dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13086   else if (DECL_CONSTRUCTOR_P (decl1))
13087     ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13088
13089   return 1;
13090 }
13091 \f
13092 /* Called after store_parm_decls for a function-try-block.  We need to update
13093    last_parm_cleanup_insn so that the base initializers for a constructor
13094    are run within this block, not before it.  */
13095
13096 void
13097 expand_start_early_try_stmts ()
13098 {
13099   expand_start_try_stmts ();
13100   last_parm_cleanup_insn = get_last_insn ();
13101 }
13102
13103 /* Store the parameter declarations into the current function declaration.
13104    This is called after parsing the parameter declarations, before
13105    digesting the body of the function.
13106
13107    Also install to binding contour return value identifier, if any.  */
13108
13109 void
13110 store_parm_decls ()
13111 {
13112   register tree fndecl = current_function_decl;
13113   register tree parm;
13114   int parms_have_cleanups = 0;
13115   tree cleanups = NULL_TREE;
13116
13117   /* This is a list of types declared among parms in a prototype.  */
13118   tree parmtags = current_function_parm_tags;
13119
13120   /* This is a chain of any other decls that came in among the parm
13121      declarations.  If a parm is declared with  enum {foo, bar} x;
13122      then CONST_DECLs for foo and bar are put here.  */
13123   tree nonparms = NULL_TREE;
13124
13125   /* Create a binding level for the parms.  */
13126   if (!building_stmt_tree ())
13127     expand_start_bindings (2);
13128
13129   if (current_function_parms)
13130     {
13131       /* This case is when the function was defined with an ANSI prototype.
13132          The parms already have decls, so we need not do anything here
13133          except record them as in effect
13134          and complain if any redundant old-style parm decls were written.  */
13135
13136       tree specparms = current_function_parms;
13137       tree next;
13138
13139       if (doing_semantic_analysis_p ())
13140         {
13141           /* Must clear this because it might contain TYPE_DECLs declared
13142              at class level.  */
13143           storedecls (NULL_TREE);
13144
13145           /* If we're doing semantic analysis, then we'll call pushdecl
13146              for each of these.  We must do them in reverse order so that
13147              they end in the correct forward order.  */
13148           specparms = nreverse (specparms);
13149         }
13150
13151       for (parm = specparms; parm; parm = next)
13152         {
13153           next = TREE_CHAIN (parm);
13154           if (TREE_CODE (parm) == PARM_DECL)
13155             {
13156               tree cleanup;
13157               
13158               if (doing_semantic_analysis_p ())
13159                 {
13160                   if (DECL_NAME (parm) == NULL_TREE
13161                       || TREE_CODE (TREE_TYPE (parm)) != VOID_TYPE)
13162                     pushdecl (parm);
13163                   else
13164                     cp_error ("parameter `%D' declared void", parm);
13165                 }
13166
13167               if (! building_stmt_tree ()
13168                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13169                 {
13170                   expand_decl (parm);
13171                   parms_have_cleanups = 1;
13172
13173                   /* Keep track of the cleanups.  */
13174                   cleanups = tree_cons (parm, cleanup, cleanups);
13175                 }
13176             }
13177           else
13178             {
13179               /* If we find an enum constant or a type tag,
13180                  put it aside for the moment.  */
13181               TREE_CHAIN (parm) = NULL_TREE;
13182               nonparms = chainon (nonparms, parm);
13183             }
13184         }
13185
13186       if (doing_semantic_analysis_p ())
13187         {
13188           /* Get the decls in their original chain order
13189              and record in the function.  This is all and only the
13190              PARM_DECLs that were pushed into scope by the loop above.  */
13191           DECL_ARGUMENTS (fndecl) = getdecls ();
13192           storetags (chainon (parmtags, gettags ()));
13193
13194           /* We built up the cleanups in reversed order.  */
13195           cleanups = nreverse (cleanups);
13196         }
13197     }
13198   else
13199     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13200
13201   /* Now store the final chain of decls for the arguments
13202      as the decl-chain of the current lexical scope.
13203      Put the enumerators in as well, at the front so that
13204      DECL_ARGUMENTS is not modified.  */
13205   if (doing_semantic_analysis_p ())
13206     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13207
13208   /* Initialize the RTL code for the function.  */
13209   DECL_SAVED_INSNS (fndecl) = 0;
13210   if (! building_stmt_tree ())
13211     expand_function_start (fndecl, parms_have_cleanups);
13212
13213   current_function_parms_stored = 1;
13214
13215   /* If this function is `main', emit a call to `__main'
13216      to run global initializers, etc.  */
13217   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13218     expand_main_function ();
13219
13220   /* Now that we have initialized the parms, we can start their
13221      cleanups.  We cannot do this before, since expand_decl_cleanup
13222      should not be called before the parm can be used.  */
13223   if (cleanups && !building_stmt_tree ())
13224     while (cleanups)
13225       {
13226         if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), 
13227                                    TREE_VALUE (cleanups)))
13228           cp_error ("parser lost in parsing declaration of `%D'",
13229                     TREE_PURPOSE (cleanups));
13230         
13231         cleanups = TREE_CHAIN (cleanups);
13232       }
13233
13234   /* Create a binding contour which can be used to catch
13235      cleanup-generated temporaries.  Also, if the return value needs or
13236      has initialization, deal with that now.  */
13237   if (parms_have_cleanups)
13238     {
13239       pushlevel (0);
13240       if (!building_stmt_tree ())
13241         expand_start_bindings (2);
13242     }
13243
13244   /* Do the starting of the exception specifications, if we have any.  */
13245   if (flag_exceptions && !processing_template_decl 
13246       && building_stmt_tree () 
13247       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13248     current_eh_spec_try_block = expand_start_eh_spec ();
13249
13250   last_parm_cleanup_insn = get_last_insn ();
13251   last_dtor_insn = get_last_insn ();
13252 }
13253
13254 /* Bind a name and initialization to the return value of
13255    the current function.  */
13256
13257 void
13258 store_return_init (decl)
13259      tree decl;
13260 {
13261   /* If this named return value comes in a register, put it in a
13262      pseudo-register.  */
13263   if (DECL_REGISTER (decl))
13264     {
13265       original_result_rtx = DECL_RTL (decl);
13266       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13267     }
13268 }
13269
13270 \f
13271 /* We have finished doing semantic analysis on DECL, but have not yet
13272    generated RTL for its body.  Save away our current state, so that
13273    when we want to generate RTL later we know what to do.  */
13274
13275 static void
13276 save_function_data (decl)
13277      tree decl;
13278 {
13279   struct language_function *f;
13280
13281   /* Save the language-specific per-function data so that we can
13282      get it back when we really expand this function.  */
13283   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13284                       19990908);
13285       
13286   /* Make a copy.  */
13287   f = ((struct language_function *) 
13288        xmalloc (sizeof (struct language_function)));
13289   bcopy ((char *) cp_function_chain, (char *) f,
13290          sizeof (struct language_function));
13291   DECL_SAVED_FUNCTION_DATA (decl) = f;
13292
13293   /* Clear out the bits we don't need.  */
13294   f->x_base_init_list = NULL_TREE;
13295   f->x_member_init_list = NULL_TREE;
13296   f->x_last_tree = NULL_TREE;
13297   f->x_last_expr_type = NULL_TREE;
13298   f->x_last_dtor_insn = NULL_RTX;
13299   f->x_last_parm_cleanup_insn = NULL_RTX;
13300   f->x_result_rtx = NULL_RTX;
13301   f->x_named_label_uses = NULL;
13302   f->bindings = NULL;
13303
13304   /* When we get back here again, we will be expanding.  */
13305   f->x_expanding_p = 1;
13306 }
13307
13308 /* At the end of every destructor we generate code to restore virtual
13309    function tables to the values desired by base classes and to call
13310    to base class destructors.  Do that now, for DECL.  */
13311
13312 static void
13313 finish_destructor_body ()
13314 {
13315   tree compound_stmt;
13316   tree in_charge;
13317   tree virtual_size;
13318   tree exprstmt;
13319
13320   /* Create a block to contain all the extra code.  */
13321   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13322
13323   /* Generate the code to call destructor on base class.  If this
13324      destructor belongs to a class with virtual functions, then set
13325      the virtual function table pointer to represent the type of our
13326      base class.  */
13327
13328   /* This side-effect makes call to `build_delete' generate the code
13329      we have to have at the end of this destructor.  `build_delete'
13330      will set the flag again.  */
13331   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13332
13333   /* These are two cases where we cannot delegate deletion.  */
13334   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13335       || TYPE_GETS_REG_DELETE (current_class_type))
13336     in_charge = integer_zero_node;
13337   else
13338     in_charge = current_in_charge_parm;
13339
13340   exprstmt = build_delete (current_class_type,
13341                            current_class_ref, 
13342                            in_charge,
13343                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 
13344                            0);
13345
13346   if (exprstmt != error_mark_node
13347       && (TREE_CODE (exprstmt) != NOP_EXPR
13348           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13349           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13350     {
13351       add_tree (build_min_nt (LABEL_STMT, dtor_label));
13352       if (exprstmt != void_zero_node)
13353         /* Don't call `expand_expr_stmt' if we're not going to do
13354            anything, since -Wall will give a diagnostic.  */
13355         finish_expr_stmt (exprstmt);
13356
13357       /* Run destructor on all virtual baseclasses.  */
13358       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13359         {
13360           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13361           tree if_stmt = begin_if_stmt ();
13362           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13363                                       current_in_charge_parm, 
13364                                       integer_two_node),
13365                                if_stmt);
13366
13367           while (vbases)
13368             {
13369               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13370                 {
13371                   tree vb = get_vbase
13372                     (BINFO_TYPE (vbases),
13373                      TYPE_BINFO (current_class_type));
13374                   finish_expr_stmt
13375                     (build_scoped_method_call
13376                      (current_class_ref, vb, dtor_identifier,
13377                       build_expr_list (NULL_TREE, integer_zero_node)));
13378                 }
13379               vbases = TREE_CHAIN (vbases);
13380             }
13381
13382           finish_then_clause (if_stmt);
13383           finish_if_stmt ();
13384         }
13385     }
13386   
13387   virtual_size = c_sizeof (current_class_type);
13388
13389   /* At the end, call delete if that's what's requested.  */
13390   
13391   /* FDIS sez: At the point of definition of a virtual destructor
13392      (including an implicit definition), non-placement operator delete
13393      shall be looked up in the scope of the destructor's class and if
13394      found shall be accessible and unambiguous.
13395      
13396      This is somewhat unclear, but I take it to mean that if the class
13397      only defines placement deletes we don't do anything here.  So we
13398      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13399      they ever try to delete one of these.  */
13400   if (TYPE_GETS_REG_DELETE (current_class_type)
13401       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13402     {
13403       tree if_stmt;
13404
13405       exprstmt = build_op_delete_call
13406         (DELETE_EXPR, current_class_ptr, virtual_size,
13407          LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13408
13409       if_stmt = begin_if_stmt ();
13410       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13411                                   current_in_charge_parm,
13412                                   integer_one_node),
13413                            if_stmt);
13414       finish_expr_stmt (exprstmt);
13415       finish_then_clause (if_stmt);
13416       finish_if_stmt ();
13417     }
13418
13419   /* Close the block we started above.  */
13420   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13421 }
13422
13423 /* Finish up a function declaration and compile that function
13424    all the way to assembler language output.  The free the storage
13425    for the function definition.
13426
13427    This is called after parsing the body of the function definition.
13428    LINENO is the current line number.
13429
13430    FLAGS is a bitwise or of the following values: 
13431      1 - CALL_POPLEVEL 
13432        An extra call to poplevel (and expand_end_bindings) must be
13433        made to take care of the binding contour for the base
13434        initializers.  This is only relevant for constructors.
13435      2 - INCLASS_INLINE
13436        We just finished processing the body of an in-class inline
13437        function definition.  (This processing will have taken place
13438        after the class definition is complete.)  */
13439
13440 tree
13441 finish_function (lineno, flags)
13442      int lineno;
13443      int flags;
13444 {
13445   register tree fndecl = current_function_decl;
13446   tree fntype, ctype = NULL_TREE;
13447   /* Label to use if this function is supposed to return a value.  */
13448   tree no_return_label = NULL_TREE;
13449   int call_poplevel = (flags & 1) != 0;
13450   int inclass_inline = (flags & 2) != 0;
13451   int expand_p;
13452   int nested;
13453
13454   /* When we get some parse errors, we can end up without a
13455      current_function_decl, so cope.  */
13456   if (fndecl == NULL_TREE)
13457     return error_mark_node;
13458
13459   nested = function_depth > 1;
13460   fntype = TREE_TYPE (fndecl);
13461
13462   /*  TREE_READONLY (fndecl) = 1;
13463       This caused &foo to be of type ptr-to-const-function
13464       which then got a warning when stored in a ptr-to-function variable.  */
13465
13466   /* This happens on strange parse errors.  */
13467   if (! current_function_parms_stored)
13468     {
13469       call_poplevel = 0;
13470       store_parm_decls ();
13471     }
13472
13473   if (building_stmt_tree ())
13474     {
13475       if (DECL_CONSTRUCTOR_P (fndecl) && call_poplevel)
13476         do_poplevel ();
13477       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13478         finish_destructor_body ();
13479
13480       /* Finish dealing with exception specifiers.  */
13481       if (flag_exceptions && !processing_template_decl
13482           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13483         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS 
13484                             (TREE_TYPE (current_function_decl)),
13485                             current_eh_spec_try_block);
13486     }
13487   else
13488     {
13489       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13490         {
13491           tree ttype = target_type (fntype);
13492           tree parmdecl;
13493
13494           if (IS_AGGR_TYPE (ttype))
13495             /* Let debugger know it should output info for this type.  */
13496             note_debug_info_needed (ttype);
13497
13498           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13499             {
13500               ttype = target_type (TREE_TYPE (parmdecl));
13501               if (IS_AGGR_TYPE (ttype))
13502                 /* Let debugger know it should output info for this type.  */
13503                 note_debug_info_needed (ttype);
13504             }
13505         }
13506
13507       /* Clean house because we will need to reorder insns here.  */
13508       do_pending_stack_adjust ();
13509
13510       if (dtor_label)
13511         ;
13512       else if (DECL_CONSTRUCTOR_P (fndecl))
13513         {
13514           /* This is where the body of the constructor begins.  All
13515              subobjects have been fully constructed at this point.  */
13516           end_protect_partials ();
13517
13518           /* This is where the body of the constructor ends.  */
13519           expand_label (ctor_label);
13520           ctor_label = NULL_TREE;
13521
13522           if (call_poplevel)
13523             do_poplevel ();
13524
13525           /* c_expand_return knows to return 'this' from a constructor.  */
13526           c_expand_return (NULL_TREE);
13527         }
13528       else if (DECL_MAIN_P (fndecl))
13529         {
13530           /* Make it so that `main' always returns 0 by default.  */
13531 #ifdef VMS
13532           c_expand_return (integer_one_node);
13533 #else
13534           c_expand_return (integer_zero_node);
13535 #endif
13536         }
13537       else if (return_label != NULL_RTX
13538                && flag_this_is_variable <= 0
13539                && current_function_return_value == NULL_TREE
13540                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13541         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13542
13543       if (flag_exceptions)
13544         expand_exception_blocks ();
13545
13546       /* If this function is supposed to return a value, ensure that
13547          we do not fall into the cleanups by mistake.  The end of our
13548          function will look like this:
13549          
13550          user code (may have return stmt somewhere)
13551          goto no_return_label
13552          cleanup_label:
13553          cleanups
13554          goto return_label
13555          no_return_label:
13556          NOTE_INSN_FUNCTION_END
13557          return_label:
13558          things for return
13559          
13560          If the user omits a return stmt in the USER CODE section, we
13561          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13562          Otherwise, we won't.  */
13563       if (no_return_label)
13564         {
13565           DECL_CONTEXT (no_return_label) = fndecl;
13566           DECL_INITIAL (no_return_label) = error_mark_node;
13567           DECL_SOURCE_FILE (no_return_label) = input_filename;
13568           DECL_SOURCE_LINE (no_return_label) = lineno;
13569           expand_goto (no_return_label);
13570         }
13571
13572       if (cleanup_label)
13573         {
13574           /* Remove the binding contour which is used
13575              to catch cleanup-generated temporaries.  */
13576           expand_end_bindings (0, 0, 0);
13577           poplevel (0, 0, 0);
13578
13579           /* Emit label at beginning of cleanup code for parameters.  */
13580           emit_label (cleanup_label);
13581         }
13582
13583       /* Get return value into register if that's where it's supposed
13584          to be.  */
13585       if (original_result_rtx)
13586         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13587
13588       /* Finish building code that will trigger warnings if users forget
13589          to make their functions return values.  */
13590       if (no_return_label || cleanup_label)
13591         emit_jump (return_label);
13592       if (no_return_label)
13593         {
13594           /* We don't need to call `expand_*_return' here because we
13595              don't need any cleanups here--this path of code is only
13596              for error checking purposes.  */
13597           expand_label (no_return_label);
13598         }
13599
13600       /* We hard-wired immediate_size_expand to zero in
13601          start_function.  Expand_function_end will decrement this
13602          variable.  So, we set the variable to one here, so that after
13603          the decrement it will remain zero.  */
13604       immediate_size_expand = 1;
13605
13606       /* Generate rtl for function exit.  */
13607       expand_function_end (input_filename, lineno, 1);
13608     }
13609
13610   /* We have to save this value here in case
13611      maybe_end_member_template_processing decides to pop all the
13612      template parameters.  */
13613   expand_p = !building_stmt_tree ();
13614   
13615   /* If we're saving up tree structure, tie off the function now.  */
13616   if (!expand_p)
13617     finish_stmt_tree (fndecl);
13618
13619   /* This must come after expand_function_end because cleanups might
13620      have declarations (from inline functions) that need to go into
13621      this function's blocks.  */
13622   if (doing_semantic_analysis_p ())
13623     {
13624       if (current_binding_level->parm_flag != 1)
13625         my_friendly_abort (122);
13626       poplevel (1, 0, 1);
13627     }
13628
13629   /* Remember that we were in class scope.  */
13630   if (current_class_name)
13631     ctype = current_class_type;
13632
13633   /* Must mark the RESULT_DECL as being in this function.  */
13634   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13635
13636   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13637      to the FUNCTION_DECL node itself.  */
13638   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13639
13640   /* Undo the call to push_momentary in start_function.  */
13641   pop_momentary ();
13642
13643   /* Save away current state, if appropriate.  */
13644   if (!expanding_p && !processing_template_decl)
13645     save_function_data (fndecl);
13646
13647   if (expand_p)
13648     {
13649       int returns_null;
13650       int returns_value;
13651       int saved_flag_keep_inline_functions =
13652         flag_keep_inline_functions;
13653
13654       /* So we can tell if jump_optimize sets it to 1.  */
13655       can_reach_end = 0;
13656
13657       if (DECL_CONTEXT (fndecl) != NULL_TREE
13658           && hack_decl_function_context (fndecl))
13659         /* Trick rest_of_compilation into not deferring output of this
13660            function, even if it is inline, since the rtl_obstack for
13661            this function is the function_obstack of the enclosing
13662            function and will be deallocated when the enclosing
13663            function is gone.  See save_tree_status.  */
13664         flag_keep_inline_functions = 1;
13665
13666       /* Before we call rest_of_compilation (which will pop the
13667          CURRENT_FUNCTION), we must save these values.  */
13668       returns_null = current_function_returns_null;
13669       returns_value = current_function_returns_value;
13670
13671       /* If this is a nested function (like a template instantiation
13672          that we're compiling in the midst of compiling something
13673          else), push a new GC context.  That will keep local variables
13674          on the stack from being collected while we're doing the
13675          compilation of this function.  */
13676       if (function_depth > 1)
13677         ggc_push_context ();
13678
13679       /* Run the optimizers and output the assembler code for this
13680          function.  */
13681       if (DECL_ARTIFICIAL (fndecl))
13682         {
13683           /* Do we really *want* to inline this synthesized method?  */
13684
13685           int save_fif = flag_inline_functions;
13686           flag_inline_functions = 1;
13687
13688           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13689              will check our size.  */
13690           DECL_INLINE (fndecl) = 0;
13691
13692           rest_of_compilation (fndecl);
13693           flag_inline_functions = save_fif;
13694         }
13695       else
13696         rest_of_compilation (fndecl);
13697
13698       /* Undo the call to ggc_push_context above.  */
13699       if (function_depth > 1)
13700         ggc_pop_context ();
13701
13702       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13703
13704       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13705         {
13706           /* Set DECL_EXTERNAL so that assemble_external will be called as
13707              necessary.  We'll clear it again in finish_file.  */
13708           if (! DECL_EXTERNAL (fndecl))
13709             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13710           DECL_EXTERNAL (fndecl) = 1;
13711           mark_inline_for_output (fndecl);
13712         }
13713
13714       if (ctype && TREE_ASM_WRITTEN (fndecl))
13715         note_debug_info_needed (ctype);
13716
13717       returns_null |= can_reach_end;
13718
13719       /* Since we don't normally go through c_expand_return for constructors,
13720          this normally gets the wrong value.
13721          Also, named return values have their return codes emitted after
13722          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13723       if (DECL_CONSTRUCTOR_P (fndecl)
13724           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13725         returns_null = 0;
13726
13727       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13728         cp_warning ("`noreturn' function `%D' does return", fndecl);
13729       else if ((warn_return_type || pedantic)
13730                && returns_null
13731                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13732         {
13733           /* If this function returns non-void and control can drop through,
13734              complain.  */
13735           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13736         }
13737       /* With just -W, complain only if function returns both with
13738          and without a value.  */
13739       else if (extra_warnings && returns_value && returns_null)
13740         warning ("this function may return with or without a value");
13741     }
13742   else
13743     {
13744       /* Since we never call rest_of_compilation, we never clear
13745          CURRENT_FUNCTION.  Do so explicitly.  */
13746       free_after_compilation (current_function);
13747       current_function = NULL;
13748     }
13749
13750   /* If this is a in-class inline definition, we may have to pop the
13751      bindings for the template parameters that we added in
13752      maybe_begin_member_template_processing when start_function was
13753      called.  */
13754   if (inclass_inline)
13755     maybe_end_member_template_processing ();
13756
13757   /* Leave the scope of the class.  */
13758   if (ctype)
13759     pop_nested_class ();
13760
13761   --function_depth;
13762
13763   /* Free all the tree nodes making up this function.  */
13764   /* Switch back to allocating nodes permanently
13765      until we start another function.  */
13766   if (! nested)
13767     permanent_allocation (1);
13768
13769   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13770     {
13771       tree t;
13772
13773       /* Stop pointing to the local nodes about to be freed.  */
13774       /* But DECL_INITIAL must remain nonzero so we know this
13775          was an actual function definition.  */
13776       DECL_INITIAL (fndecl) = error_mark_node;
13777       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13778         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13779     }
13780
13781   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13782     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13783   if (DECL_STATIC_DESTRUCTOR (fndecl))
13784     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13785
13786   /* Clean up.  */
13787   if (! nested)
13788     {
13789       /* Let the error reporting routines know that we're outside a
13790          function.  For a nested function, this value is used in
13791          pop_cp_function_context and then reset via pop_function_context.  */
13792       current_function_decl = NULL_TREE;
13793     }
13794
13795   return fndecl;
13796 }
13797 \f
13798 /* Create the FUNCTION_DECL for a function definition.
13799    DECLSPECS and DECLARATOR are the parts of the declaration;
13800    they describe the return type and the name of the function,
13801    but twisted together in a fashion that parallels the syntax of C.
13802
13803    This function creates a binding context for the function body
13804    as well as setting up the FUNCTION_DECL in current_function_decl.
13805
13806    Returns a FUNCTION_DECL on success.
13807
13808    If the DECLARATOR is not suitable for a function (it defines a datum
13809    instead), we return 0, which tells yyparse to report a parse error.
13810
13811    May return void_type_node indicating that this method is actually
13812    a friend.  See grokfield for more details.
13813
13814    Came here with a `.pushlevel' .
13815
13816    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13817    CHANGES TO CODE IN `grokfield'.  */
13818
13819 tree
13820 start_method (declspecs, declarator, attrlist)
13821      tree declarator, declspecs, attrlist;
13822 {
13823   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13824                                 attrlist);
13825
13826   /* Something too ugly to handle.  */
13827   if (fndecl == NULL_TREE)
13828     return NULL_TREE;
13829
13830   /* Pass friends other than inline friend functions back.  */
13831   if (fndecl == void_type_node)
13832     return fndecl;
13833
13834   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13835     /* Not a function, tell parser to report parse error.  */
13836     return NULL_TREE;
13837
13838   if (DECL_IN_AGGR_P (fndecl))
13839     {
13840       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13841         {
13842           if (DECL_CONTEXT (fndecl) 
13843               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13844             cp_error ("`%D' is already defined in class %s", fndecl,
13845                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13846         }
13847       return void_type_node;
13848     }
13849
13850   check_template_shadow (fndecl);
13851
13852   DECL_THIS_INLINE (fndecl) = 1;
13853
13854   if (flag_default_inline)
13855     DECL_INLINE (fndecl) = 1;
13856
13857   /* We process method specializations in finish_struct_1.  */
13858   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13859     fndecl = push_template_decl (fndecl);
13860
13861   /* We read in the parameters on the maybepermanent_obstack,
13862      but we won't be getting back to them until after we
13863      may have clobbered them.  So the call to preserve_data
13864      will keep them safe.  */
13865   preserve_data ();
13866
13867   if (! DECL_FRIEND_P (fndecl))
13868     {
13869       if (TREE_CHAIN (fndecl))
13870         {
13871           fndecl = copy_node (fndecl);
13872           TREE_CHAIN (fndecl) = NULL_TREE;
13873         }
13874
13875       if (DECL_CONSTRUCTOR_P (fndecl))
13876         {
13877           if (! grok_ctor_properties (current_class_type, fndecl))
13878             return void_type_node;
13879         }
13880       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13881         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13882     }
13883
13884   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13885
13886   /* Make a place for the parms */
13887   pushlevel (0);
13888   current_binding_level->parm_flag = 1;
13889   
13890   DECL_IN_AGGR_P (fndecl) = 1;
13891   return fndecl;
13892 }
13893
13894 /* Go through the motions of finishing a function definition.
13895    We don't compile this method until after the whole class has
13896    been processed.
13897
13898    FINISH_METHOD must return something that looks as though it
13899    came from GROKFIELD (since we are defining a method, after all).
13900
13901    This is called after parsing the body of the function definition.
13902    STMTS is the chain of statements that makes up the function body.
13903
13904    DECL is the ..._DECL that `start_method' provided.  */
13905
13906 tree
13907 finish_method (decl)
13908      tree decl;
13909 {
13910   register tree fndecl = decl;
13911   tree old_initial;
13912
13913   register tree link;
13914
13915   if (decl == void_type_node)
13916     return decl;
13917
13918   old_initial = DECL_INITIAL (fndecl);
13919
13920   /* Undo the level for the parms (from start_method).
13921      This is like poplevel, but it causes nothing to be
13922      saved.  Saving information here confuses symbol-table
13923      output routines.  Besides, this information will
13924      be correctly output when this method is actually
13925      compiled.  */
13926
13927   /* Clear out the meanings of the local variables of this level;
13928      also record in each decl which block it belongs to.  */
13929
13930   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13931     {
13932       if (DECL_NAME (link) != NULL_TREE)
13933         pop_binding (DECL_NAME (link), link);
13934       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13935       DECL_CONTEXT (link) = NULL_TREE;
13936     }
13937
13938   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13939                       (HOST_WIDE_INT) current_binding_level->level_chain,
13940                       current_binding_level->parm_flag,
13941                       current_binding_level->keep);
13942
13943   poplevel (0, 0, 0);
13944
13945   DECL_INITIAL (fndecl) = old_initial;
13946
13947   /* We used to check if the context of FNDECL was different from
13948      current_class_type as another way to get inside here.  This didn't work
13949      for String.cc in libg++.  */
13950   if (DECL_FRIEND_P (fndecl))
13951     {
13952       CLASSTYPE_INLINE_FRIENDS (current_class_type)
13953         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13954       decl = void_type_node;
13955     }
13956
13957   return decl;
13958 }
13959 \f
13960 /* Called when a new struct TYPE is defined.
13961    If this structure or union completes the type of any previous
13962    variable declaration, lay it out and output its rtl.  */
13963
13964 void
13965 hack_incomplete_structures (type)
13966      tree type;
13967 {
13968   tree *list;
13969
13970   if (current_binding_level->incomplete == NULL_TREE)
13971     return;
13972
13973   if (!type) /* Don't do this for class templates.  */
13974     return;
13975
13976   for (list = &current_binding_level->incomplete; *list; )
13977     {
13978       tree decl = TREE_VALUE (*list);
13979       if ((decl && TREE_TYPE (decl) == type)
13980           || (TREE_TYPE (decl)
13981               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
13982               && TREE_TYPE (TREE_TYPE (decl)) == type))
13983         {
13984           int toplevel = toplevel_bindings_p ();
13985           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
13986               && TREE_TYPE (TREE_TYPE (decl)) == type)
13987             layout_type (TREE_TYPE (decl));
13988           layout_decl (decl, 0);
13989           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
13990           if (! toplevel)
13991             {
13992               tree cleanup;
13993               expand_decl (decl);
13994               cleanup = maybe_build_cleanup (decl);
13995               expand_decl_init (decl);
13996               if (! expand_decl_cleanup (decl, cleanup))
13997                 cp_error ("parser lost in parsing declaration of `%D'",
13998                           decl);
13999             }
14000           *list = TREE_CHAIN (*list);
14001         }
14002       else
14003         list = &TREE_CHAIN (*list);
14004     }
14005 }
14006
14007 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14008    See build_delete for information about AUTO_DELETE.
14009
14010    Don't build these on the momentary obstack; they must live
14011    the life of the binding contour.  */
14012
14013 static tree
14014 maybe_build_cleanup_1 (decl, auto_delete)
14015      tree decl, auto_delete;
14016 {
14017   tree type = TREE_TYPE (decl);
14018   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14019     {
14020       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14021       tree rval;
14022
14023       if (TREE_CODE (decl) != PARM_DECL)
14024         temp = suspend_momentary ();
14025
14026       if (TREE_CODE (type) == ARRAY_TYPE)
14027         rval = decl;
14028       else
14029         {
14030           mark_addressable (decl);
14031           rval = build_unary_op (ADDR_EXPR, decl, 0);
14032         }
14033
14034       /* Optimize for space over speed here.  */
14035       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14036           || flag_expensive_optimizations)
14037         flags |= LOOKUP_NONVIRTUAL;
14038
14039       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14040
14041       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14042           && ! TYPE_HAS_DESTRUCTOR (type))
14043         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14044                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14045
14046       if (TREE_CODE (decl) != PARM_DECL)
14047         resume_momentary (temp);
14048
14049       return rval;
14050     }
14051   return 0;
14052 }
14053
14054 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
14055
14056 tree
14057 build_target_expr (decl, value)
14058      tree decl;
14059      tree value;
14060 {
14061   tree t;
14062
14063   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
14064              maybe_build_cleanup (decl), NULL_TREE);
14065   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14066      ignore the TARGET_EXPR.  If there really turn out to be no
14067      side-effects, then the optimizer should be able to get rid of
14068      whatever code is generated anyhow.  */
14069   TREE_SIDE_EFFECTS (t) = 1;
14070
14071   return t;
14072 }
14073
14074 /* If DECL is of a type which needs a cleanup, build that cleanup
14075    here.  The cleanup does free the storage with a call to delete.  */
14076
14077 tree
14078 maybe_build_cleanup_and_delete (decl)
14079      tree decl;
14080 {
14081   return maybe_build_cleanup_1 (decl, integer_three_node);
14082 }
14083
14084 /* If DECL is of a type which needs a cleanup, build that cleanup
14085    here.  The cleanup does not free the storage with a call a delete.  */
14086
14087 tree
14088 maybe_build_cleanup (decl)
14089      tree decl;
14090 {
14091   return maybe_build_cleanup_1 (decl, integer_two_node);
14092 }
14093 \f
14094 /* Expand a C++ expression at the statement level.
14095    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14096    The C++ type checker should get all of these out when
14097    expressions are combined with other, type-providing, expressions,
14098    leaving only orphan expressions, such as:
14099
14100    &class::bar;         / / takes its address, but does nothing with it.  */
14101
14102 void
14103 cplus_expand_expr_stmt (exp)
14104      tree exp;
14105 {
14106   if (stmts_are_full_exprs_p)
14107     exp = convert_to_void (exp, "statement");
14108   
14109 #if 0
14110   /* We should do this eventually, but right now this causes regex.o from
14111      libg++ to miscompile, and tString to core dump.  */
14112   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14113 #endif
14114
14115   /* If we don't do this, we end up down inside expand_expr
14116      trying to do TYPE_MODE on the ERROR_MARK, and really
14117      go outside the bounds of the type.  */
14118   if (exp != error_mark_node)
14119     expand_expr_stmt (break_out_cleanups (exp));
14120 }
14121
14122 /* When a stmt has been parsed, this function is called.  */
14123
14124 void
14125 finish_stmt ()
14126 {
14127   /* Always assume this statement was not an expression statement.  If
14128      it actually was an expression statement, its our callers
14129      responsibility to fix this up.  */
14130   last_expr_type = NULL_TREE;
14131 }
14132
14133 /* Change a static member function definition into a FUNCTION_TYPE, instead
14134    of the METHOD_TYPE that we create when it's originally parsed.
14135
14136    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14137    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14138    other decls.  Either pass the addresses of local variables or NULL.  */
14139
14140 void
14141 revert_static_member_fn (decl, fn, argtypes)
14142      tree *decl, *fn, *argtypes;
14143 {
14144   tree tmp;
14145   tree function = fn ? *fn : TREE_TYPE (*decl);
14146   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14147
14148   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14149       != TYPE_UNQUALIFIED)
14150     cp_error ("static member function `%#D' declared with type qualifiers", 
14151               *decl);
14152
14153   args = TREE_CHAIN (args);
14154   tmp = build_function_type (TREE_TYPE (function), args);
14155   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14156   tmp = build_exception_variant (tmp,
14157                                  TYPE_RAISES_EXCEPTIONS (function));
14158   TREE_TYPE (*decl) = tmp;
14159   if (DECL_ARGUMENTS (*decl))
14160     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14161   DECL_STATIC_FUNCTION_P (*decl) = 1;
14162   if (fn)
14163     *fn = tmp;
14164   if (argtypes)
14165     *argtypes = args;
14166 }
14167
14168 /* Initialize the variables used during compilation of a C++ 
14169    function.  */ 
14170
14171 static void
14172 push_cp_function_context (f)
14173      struct function *f;
14174 {
14175   struct language_function *p 
14176     = ((struct language_function *) 
14177        xcalloc (1, sizeof (struct language_function)));
14178   f->language = p;
14179
14180   /* It takes an explicit call to expand_body to generate RTL for a
14181      function.  */
14182   expanding_p = 0;
14183
14184   /* Whenever we start a new function, we destroy temporaries in the
14185      usual way.  */
14186   stmts_are_full_exprs_p = 1;
14187 }
14188
14189 /* Free the language-specific parts of F, now that we've finished
14190    compiling the function.  */
14191
14192 static void
14193 pop_cp_function_context (f)
14194      struct function *f;
14195 {
14196   free (f->language);
14197   f->language = 0;
14198 }
14199
14200 /* Mark P for GC.  */
14201
14202 static void
14203 mark_lang_function (p)
14204      struct language_function *p;
14205 {
14206   if (!p)
14207     return;
14208
14209   ggc_mark_tree (p->x_named_labels);
14210   ggc_mark_tree (p->x_ctor_label);
14211   ggc_mark_tree (p->x_dtor_label);
14212   ggc_mark_tree (p->x_base_init_list);
14213   ggc_mark_tree (p->x_member_init_list);
14214   ggc_mark_tree (p->x_current_class_ptr);
14215   ggc_mark_tree (p->x_current_class_ref);
14216   ggc_mark_tree (p->x_last_tree);
14217   ggc_mark_tree (p->x_last_expr_type);
14218   ggc_mark_tree (p->x_eh_spec_try_block);
14219   ggc_mark_tree (p->x_scope_stmt_stack);
14220
14221   ggc_mark_rtx (p->x_last_dtor_insn);
14222   ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14223   ggc_mark_rtx (p->x_result_rtx);
14224
14225   mark_binding_level (&p->bindings);
14226 }
14227
14228 /* Mark the language-specific data in F for GC.  */
14229
14230 void
14231 mark_cp_function_context (f)
14232      struct function *f;
14233 {
14234   mark_lang_function (f->language);
14235 }
14236
14237 int
14238 in_function_p ()
14239 {
14240   return function_depth != 0;
14241 }
14242
14243
14244 void
14245 lang_mark_false_label_stack (l)
14246      struct label_node *l;
14247 {
14248   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14249   my_friendly_assert (l == NULL, 19990904);
14250 }
14251
14252 void
14253 lang_mark_tree (t)
14254      tree t;
14255 {
14256   enum tree_code code = TREE_CODE (t);
14257   if (code == IDENTIFIER_NODE)
14258     {
14259       struct lang_identifier *li = (struct lang_identifier *) t;
14260       struct lang_id2 *li2 = li->x;
14261       ggc_mark_tree (li->namespace_bindings);
14262       ggc_mark_tree (li->bindings);
14263       ggc_mark_tree (li->class_value);
14264       ggc_mark_tree (li->class_template_info);
14265
14266       if (li2)
14267         {
14268           ggc_mark_tree (li2->label_value);
14269           ggc_mark_tree (li2->implicit_decl);
14270           ggc_mark_tree (li2->error_locus);
14271         }
14272     }
14273   else if (code == CPLUS_BINDING)
14274     {
14275       if (BINDING_HAS_LEVEL_P (t))
14276         mark_binding_level (&BINDING_LEVEL (t));
14277       else
14278         ggc_mark_tree (BINDING_SCOPE (t));
14279       ggc_mark_tree (BINDING_VALUE (t));
14280     }
14281   else if (code == OVERLOAD)
14282     ggc_mark_tree (OVL_FUNCTION (t));
14283   else if (code == TEMPLATE_PARM_INDEX)
14284     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14285   else if (TREE_CODE_CLASS (code) == 'd')
14286     {
14287       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14288
14289       if (ld)
14290         {
14291           ggc_mark (ld);
14292           ggc_mark_tree (ld->decl_flags.access);
14293           ggc_mark_tree (ld->decl_flags.context);
14294           if (TREE_CODE (t) != NAMESPACE_DECL)
14295             ggc_mark_tree (ld->decl_flags.u.template_info);
14296           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14297             {
14298               ggc_mark_tree (ld->main_decl_variant);
14299               ggc_mark_tree (ld->befriending_classes);
14300               ggc_mark_tree (ld->saved_tree);
14301               if (TREE_CODE (t) == TYPE_DECL)
14302                 ggc_mark_tree (ld->u.sorted_fields);
14303               else if (TREE_CODE (t) == FUNCTION_DECL
14304                        && !DECL_PENDING_INLINE_P (t))
14305                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14306             }
14307         }
14308     }
14309   else if (TREE_CODE_CLASS (code) == 't')
14310     {
14311       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14312
14313       if (lt && !(TREE_CODE (t) == POINTER_TYPE 
14314                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14315         {
14316           ggc_mark (lt);
14317           ggc_mark_tree (lt->vfields);
14318           ggc_mark_tree (lt->vbases);
14319           ggc_mark_tree (lt->tags);
14320           ggc_mark_tree (lt->search_slot);
14321           ggc_mark_tree (lt->size);
14322           ggc_mark_tree (lt->abstract_virtuals);
14323           ggc_mark_tree (lt->friend_classes);
14324           ggc_mark_tree (lt->rtti);
14325           ggc_mark_tree (lt->methods);
14326           ggc_mark_tree (lt->template_info);
14327           ggc_mark_tree (lt->befriending_classes);
14328         }
14329       else if (lt)
14330         /* In the case of pointer-to-member function types, the
14331            TYPE_LANG_SPECIFIC is really just a tree.  */
14332         ggc_mark_tree ((tree) lt);
14333     }
14334 }
14335