OSDN Git Service

* cp-tree.def (VEC_INIT_EXPR): Remove.
[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 #ifndef WCHAR_UNSIGNED
67 #define WCHAR_UNSIGNED 0
68 #endif
69
70 #ifndef CHAR_TYPE_SIZE
71 #define CHAR_TYPE_SIZE BITS_PER_UNIT
72 #endif
73
74 #ifndef BOOL_TYPE_SIZE
75 #ifdef SLOW_BYTE_ACCESS
76 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
77 #else
78 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
79 #endif
80 #endif
81
82 /* We let tm.h override the types used here, to handle trivial differences
83    such as the choice of unsigned int or long unsigned int for size_t.
84    When machines start needing nontrivial differences in the size type,
85    it would be best to do something here to figure out automatically
86    from other information what type to use.  */
87
88 #ifndef SIZE_TYPE
89 #define SIZE_TYPE "long unsigned int"
90 #endif
91
92 #ifndef PTRDIFF_TYPE
93 #define PTRDIFF_TYPE "long int"
94 #endif
95
96 #ifndef WCHAR_TYPE
97 #define WCHAR_TYPE "int"
98 #endif
99
100 static tree grokparms                           PROTO((tree, int));
101 static const char *redeclaration_error_message  PROTO((tree, tree));
102
103 static void push_binding_level PROTO((struct binding_level *, int,
104                                       int));
105 static void pop_binding_level PROTO((void));
106 static void suspend_binding_level PROTO((void));
107 static void resume_binding_level PROTO((struct binding_level *));
108 static struct binding_level *make_binding_level PROTO((void));
109 static void declare_namespace_level PROTO((void));
110 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
111 static void storedecls PROTO((tree));
112 static void require_complete_types_for_parms PROTO((tree));
113 static void push_overloaded_decl_1 PROTO((tree));
114 static int ambi_op_p PROTO((tree));
115 static int unary_op_p PROTO((tree));
116 static tree store_bindings PROTO((tree, tree));
117 static tree lookup_tag_reverse PROTO((tree, tree));
118 static tree obscure_complex_init PROTO((tree, tree));
119 static tree maybe_build_cleanup_1 PROTO((tree, tree));
120 static tree lookup_name_real PROTO((tree, int, int, int));
121 static void warn_extern_redeclared_static PROTO((tree, tree));
122 static void grok_reference_init PROTO((tree, tree, tree));
123 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
124                               enum overload_flags, tree,
125                               tree, int, int, int, int, int, int, tree));
126 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
127 static tree lookup_tag PROTO((enum tree_code, tree,
128                               struct binding_level *, int));
129 static void set_identifier_type_value_with_scope
130         PROTO((tree, tree, struct binding_level *));
131 static void record_builtin_type PROTO((enum rid, const char *, tree));
132 static void record_unknown_type PROTO((tree, const char *));
133 static int member_function_or_else PROTO((tree, tree, const char *));
134 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
135                                   int));
136 static void lang_print_error_function PROTO((const char *));
137 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
138 static void check_for_uninitialized_const_var PROTO((tree));
139 static unsigned long typename_hash PROTO((hash_table_key));
140 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
141 static void push_binding PROTO((tree, tree, struct binding_level*));
142 static int add_binding PROTO((tree, tree));
143 static void pop_binding PROTO((tree, tree));
144 static tree local_variable_p PROTO((tree *));
145 static tree find_binding PROTO((tree, tree));
146 static tree select_decl PROTO((tree, int));
147 static int lookup_flags PROTO((int, int));
148 static tree qualify_lookup PROTO((tree, int));
149 static tree record_builtin_java_type PROTO((const char *, int));
150 static const char *tag_name PROTO((enum tag_types code));
151 static void find_class_binding_level PROTO((void));
152 static struct binding_level *innermost_nonclass_level PROTO((void));
153 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
154 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
155 static int walk_globals_r PROTO((tree, void *));
156 static void add_decl_to_level PROTO((tree, struct binding_level *));
157 static tree make_label_decl PROTO((tree, int));
158 static void pop_label PROTO((tree));
159 static void pop_labels PROTO((tree));
160 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
161 static void layout_var_decl PROTO((tree));
162 static void maybe_commonize_var PROTO((tree));
163 static tree check_initializer PROTO((tree, tree));
164 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
165 static void push_cp_function_context PROTO((struct function *));
166 static void pop_cp_function_context PROTO((struct function *));
167 static void mark_binding_level PROTO((void *));
168 static void mark_cp_function_context PROTO((struct function *));
169 static void mark_saved_scope PROTO((void *));
170 static void mark_lang_function PROTO((struct language_function *));
171 static void mark_stmt_tree PROTO((struct stmt_tree *));
172 static void save_function_data PROTO((tree));
173 static void check_function_type PROTO((tree));
174 static void destroy_local_static PROTO((tree));
175 static void destroy_local_var PROTO((tree));
176 static void finish_constructor_body PROTO((void));
177 static void finish_destructor_body PROTO((void));
178
179 #if defined (DEBUG_CP_BINDING_LEVELS)
180 static void indent PROTO((void));
181 #endif
182
183 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
184 tree error_mark_list;
185
186 /* The following symbols are subsumed in the cp_global_trees array, and
187    listed here individually for documentation purposes. 
188
189    C++ extensions
190         tree wchar_decl_node;
191         tree void_zero_node;
192
193         tree vtable_entry_type;
194         tree delta_type_node;
195 #if 0
196    Old rtti stuff.
197         tree __baselist_desc_type_node;
198         tree __i_desc_type_node, __m_desc_type_node;
199         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
200 #endif
201         tree __t_desc_type_node;
202 #if 0
203         tree __tp_desc_type_node;
204 #endif
205         tree __access_mode_type_node;
206         tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
207         tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
208         tree __ptmf_desc_type_node, __ptmd_desc_type_node;
209 #if 0
210    Not needed yet?  May be needed one day?
211         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
212         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
213         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
214 #endif
215
216         tree class_star_type_node;
217         tree class_type_node, record_type_node, union_type_node, enum_type_node;
218         tree unknown_type_node;
219
220    Array type `vtable_entry_type[]'
221
222         tree vtbl_type_node;
223         tree vtbl_ptr_type_node;
224
225    Nnamespace std
226
227         tree std_node;
228
229    A FUNCTION_DECL which can call `abort'.  Not necessarily the
230    one that the user will declare, but sufficient to be called
231    by routines that want to abort the program.
232
233         tree abort_fndecl;
234
235    The FUNCTION_DECL for the default `::operator delete'.
236
237         tree global_delete_fndecl;
238
239    Used by RTTI
240         tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
241
242 */
243
244 tree cp_global_trees[CPTI_MAX];
245
246 /* Indicates that there is a type value in some namespace, although
247    that is not necessarily in scope at the moment.  */
248
249 static tree global_type_node;
250
251 /* Namespace std.  */
252 int in_std;
253
254 /* Expect only namespace names now. */
255 static int only_namespace_names;
256
257 /* In a destructor, the last insn emitted after the start of the
258    function and the parms.  */
259
260 #define last_dtor_insn cp_function_chain->x_last_dtor_insn
261
262 /* In a constructor, the last insn emitted after the start of the
263    function and the parms, the exception specification and any
264    function-try-block.  The constructor initializers are emitted after
265    this insn.  */
266
267 #define last_parm_cleanup_insn cp_function_chain->x_last_parm_cleanup_insn
268
269 /* If original DECL_RESULT of current function was a register,
270    but due to being an addressable named return value, would up
271    on the stack, this variable holds the named return value's
272    original location.  */
273
274 #define original_result_rtx cp_function_chain->x_result_rtx
275
276 struct named_label_list
277 {
278   struct binding_level *binding_level;
279   tree names_in_scope;
280   tree label_decl;
281   const char *filename_o_goto;
282   int lineno_o_goto;
283   struct named_label_list *next;
284 };
285
286 /* Used only for jumps to as-yet undefined labels, since jumps to
287    defined labels can have their validity checked by stmt.c.  */
288
289 #define named_label_uses cp_function_chain->x_named_label_uses
290
291 /* A list of objects which have constructors or destructors
292    which reside in the global scope.  The decl is stored in
293    the TREE_VALUE slot and the initializer is stored
294    in the TREE_PURPOSE slot.  */
295 tree static_aggregates;
296
297 /* -- end of C++ */
298
299 /* A node for the integer constants 2, and 3.  */
300
301 tree integer_two_node, integer_three_node;
302
303 /* While defining an enum type, this is 1 plus the last enumerator
304    constant value.  */
305
306 static tree enum_next_value;
307
308 /* Nonzero means that there was overflow computing enum_next_value.  */
309
310 static int enum_overflow;
311
312 /* Parsing a function declarator leaves here a chain of structure
313    and enum types declared in the parmlist.  */
314
315 static tree last_function_parm_tags;
316
317 /* Similar, for last_function_parm_tags.  */
318 tree last_function_parms;
319 static tree current_function_parm_tags;
320
321 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
322    that have names.  Here so we can clear out their names' definitions
323    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
324    TREE_PURPOSE is the previous binding of the label.  */
325
326 #define named_labels cp_function_chain->x_named_labels
327
328 /* The FUNCTION_DECL for the function currently being compiled,
329    or 0 if between functions.  */
330 tree current_function_decl;
331
332 /* Set to 0 at beginning of a function definition, and whenever
333    a label (case or named) is defined.  Set to value of expression
334    returned from function when that value can be transformed into
335    a named return value.  */
336
337 tree current_function_return_value;
338
339 /* Nonzero means give `double' the same size as `float'.  */
340
341 extern int flag_short_double;
342
343 /* Nonzero means don't recognize any builtin functions.  */
344
345 extern int flag_no_builtin;
346
347 /* Nonzero means don't recognize the non-ANSI builtin functions.
348    -ansi sets this.  */
349
350 extern int flag_no_nonansi_builtin;
351
352 /* Nonzero means enable obscure ANSI features and disable GNU extensions
353    that might cause ANSI-compliant code to be miscompiled.  */
354
355 extern int flag_ansi;
356
357 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
358    objects.  */
359 extern int flag_huge_objects;
360
361 /* Nonzero if we want to conserve space in the .o files.  We do this
362    by putting uninitialized data and runtime initialized data into
363    .common instead of .data at the expense of not flagging multiple
364    definitions.  */
365 extern int flag_conserve_space;
366 \f
367 /* C and C++ flags are in decl2.c.  */
368
369 /* Flag used when debugging spew.c */
370
371 extern int spew_debug;
372
373 /* A expression of value 0 with the same precision as a sizetype
374    node, but signed.  */
375 tree signed_size_zero_node;
376
377 /* The name of the anonymous namespace, throughout this translation
378    unit.  */
379 tree anonymous_namespace_name;
380
381 \f
382 /* For each binding contour we allocate a binding_level structure
383    which records the names defined in that contour.
384    Contours include:
385     0) the global one
386     1) one for each function definition,
387        where internal declarations of the parameters appear.
388     2) one for each compound statement,
389        to record its declarations.
390
391    The current meaning of a name can be found by searching the levels
392    from the current one out to the global one.
393
394    Off to the side, may be the class_binding_level.  This exists only
395    to catch class-local declarations.  It is otherwise nonexistent.
396
397    Also there may be binding levels that catch cleanups that must be
398    run when exceptions occur.  Thus, to see whether a name is bound in
399    the current scope, it is not enough to look in the
400    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
401    instead.  */
402
403 /* Note that the information in the `names' component of the global contour
404    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
405
406 struct binding_level
407   {
408     /* A chain of _DECL nodes for all variables, constants, functions,
409        and typedef types.  These are in the reverse of the order
410        supplied.  There may be OVERLOADs on this list, too, but they
411        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
412     tree names;
413
414     /* A list of structure, union and enum definitions, for looking up
415        tag names.
416        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
417        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
418        or ENUMERAL_TYPE node.
419
420        C++: the TREE_VALUE nodes can be simple types for
421        component_bindings.  */
422     tree tags;
423
424     /* A list of USING_DECL nodes. */
425     tree usings;
426
427     /* A list of used namespaces. PURPOSE is the namespace,
428        VALUE the common ancestor with this binding_level's namespace. */
429     tree using_directives;
430
431     /* If this binding level is the binding level for a class, then
432        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
433        is the name of an entity bound in the class; the TREE_VALUE is
434        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
435        when leaving class scope, we can restore the
436        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
437        the DECL bound by this name in the class.  */
438     tree class_shadowed;
439
440     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
441        is used for all binding levels.  */
442     tree type_shadowed;
443
444     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
445        label in this scope.  The TREE_PURPOSE is the previous value of
446        the IDENTIFIER_LABEL VALUE.  */
447     tree shadowed_labels;
448
449     /* For each level (except not the global one),
450        a chain of BLOCK nodes for all the levels
451        that were entered and exited one level down.  */
452     tree blocks;
453
454     /* The BLOCK node for this level, if one has been preallocated.
455        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
456     tree this_block;
457
458     /* The binding level which this one is contained in (inherits from).  */
459     struct binding_level *level_chain;
460
461     /* List of decls in `names' that have incomplete
462        structure or union types.  */
463     tree incomplete;
464
465     /* List of VAR_DECLS saved from a previous for statement.
466        These would be dead in ANSI-conforming code, but might
467        be referenced in ARM-era code.  These are stored in a
468        TREE_LIST; the TREE_VALUE is the actual declaration.  */
469     tree dead_vars_from_for;
470
471     /* 1 for the level that holds the parameters of a function.
472        2 for the level that holds a class declaration.
473        3 for levels that hold parameter declarations.  */
474     unsigned parm_flag : 4;
475
476     /* 1 means make a BLOCK for this level regardless of all else.
477        2 for temporary binding contours created by the compiler.  */
478     unsigned keep : 3;
479
480     /* Nonzero if this level "doesn't exist" for tags.  */
481     unsigned tag_transparent : 1;
482
483     /* Nonzero if this level can safely have additional
484        cleanup-needing variables added to it.  */
485     unsigned more_cleanups_ok : 1;
486     unsigned have_cleanups : 1;
487
488     /* Nonzero if this level is for storing the decls for template
489        parameters and generic decls; these decls will be discarded and
490        replaced with a TEMPLATE_DECL.  */
491     unsigned pseudo_global : 1;
492
493     /* This is set for a namespace binding level.  */
494     unsigned namespace_p : 1;
495
496     /* True if this level is that of a for-statement where we need to
497        worry about ambiguous (ARM or ANSI) scope rules.  */
498     unsigned is_for_scope : 1;
499
500     /* True if this level corresponds to an EH region, as for a try block.  */
501     unsigned eh_region : 1;
502
503     /* One bit left for this word.  */
504
505 #if defined(DEBUG_CP_BINDING_LEVELS)
506     /* Binding depth at which this level began.  */
507     unsigned binding_depth;
508 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
509   };
510
511 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
512   
513 /* The binding level currently in effect.  */
514
515 #define current_binding_level                   \
516   (current_function                             \
517    ? cp_function_chain->bindings                \
518    : scope_chain->bindings)
519
520 /* The binding level of the current class, if any.  */
521
522 #define class_binding_level scope_chain->class_bindings
523
524 /* A chain of binding_level structures awaiting reuse.  */
525
526 static struct binding_level *free_binding_level;
527
528 /* The outermost binding level, for names of file scope.
529    This is created when the compiler is started and exists
530    through the entire run.  */
531
532 static struct binding_level *global_binding_level;
533
534 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
535
536 static int keep_next_level_flag;
537
538 #if defined(DEBUG_CP_BINDING_LEVELS)
539 static int binding_depth = 0;
540 static int is_class_level = 0;
541
542 static void
543 indent ()
544 {
545   register unsigned i;
546
547   for (i = 0; i < binding_depth*2; i++)
548     putc (' ', stderr);
549 }
550 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
551
552 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
553
554 static void
555 push_binding_level (newlevel, tag_transparent, keep)
556      struct binding_level *newlevel;
557      int tag_transparent, keep;
558 {
559   /* Add this level to the front of the chain (stack) of levels that
560      are active.  */
561   bzero ((char*) newlevel, sizeof (struct binding_level));
562   newlevel->level_chain = current_binding_level;
563   current_binding_level = newlevel;
564   newlevel->tag_transparent = tag_transparent;
565   newlevel->more_cleanups_ok = 1;
566
567   /* We are called before expand_start_bindings, but after
568      expand_eh_region_start for a try block; so we check this now,
569      before the EH block is covered up.  */
570   newlevel->eh_region = is_eh_region ();
571
572   newlevel->keep = keep;
573 #if defined(DEBUG_CP_BINDING_LEVELS)
574   newlevel->binding_depth = binding_depth;
575   indent ();
576   fprintf (stderr, "push %s level 0x%08x line %d\n",
577            (is_class_level) ? "class" : "block", newlevel, lineno);
578   is_class_level = 0;
579   binding_depth++;
580 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
581 }
582
583 /* Find the innermost enclosing class scope, and reset
584    CLASS_BINDING_LEVEL appropriately.  */
585
586 static void
587 find_class_binding_level ()
588 {
589   struct binding_level *level = current_binding_level;
590
591   while (level && level->parm_flag != 2)
592     level = level->level_chain;
593   if (level && level->parm_flag == 2)
594     class_binding_level = level;
595   else
596     class_binding_level = 0;
597 }
598
599 static void
600 pop_binding_level ()
601 {
602   if (global_binding_level)
603     {
604       /* Cannot pop a level, if there are none left to pop.  */
605       if (current_binding_level == global_binding_level)
606         my_friendly_abort (123);
607     }
608   /* Pop the current level, and free the structure for reuse.  */
609 #if defined(DEBUG_CP_BINDING_LEVELS)
610   binding_depth--;
611   indent ();
612   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
613           (is_class_level) ? "class" : "block",
614           current_binding_level, lineno);
615   if (is_class_level != (current_binding_level == class_binding_level))
616     {
617       indent ();
618       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
619     }
620   is_class_level = 0;
621 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
622   {
623     register struct binding_level *level = current_binding_level;
624     current_binding_level = current_binding_level->level_chain;
625     level->level_chain = free_binding_level;
626 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
627     if (level->binding_depth != binding_depth)
628       abort ();
629 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
630     free_binding_level = level;
631     find_class_binding_level ();
632   }
633 }
634
635 static void
636 suspend_binding_level ()
637 {
638   if (class_binding_level)
639     current_binding_level = class_binding_level;
640
641   if (global_binding_level)
642     {
643       /* Cannot suspend a level, if there are none left to suspend.  */
644       if (current_binding_level == global_binding_level)
645         my_friendly_abort (123);
646     }
647   /* Suspend the current level.  */
648 #if defined(DEBUG_CP_BINDING_LEVELS)
649   binding_depth--;
650   indent ();
651   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
652           (is_class_level) ? "class" : "block",
653           current_binding_level, lineno);
654   if (is_class_level != (current_binding_level == class_binding_level))
655     {
656       indent ();
657       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
658     }
659   is_class_level = 0;
660 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
661   current_binding_level = current_binding_level->level_chain;
662   find_class_binding_level ();
663 }
664
665 static void
666 resume_binding_level (b)
667      struct binding_level *b;
668 {
669   /* Resuming binding levels is meant only for namespaces,
670      and those cannot nest into classes. */
671   my_friendly_assert(!class_binding_level, 386);
672   /* Also, resuming a non-directly nested namespace is a no-no.  */
673   my_friendly_assert(b->level_chain == current_binding_level, 386);
674   current_binding_level = b;
675 #if defined(DEBUG_CP_BINDING_LEVELS)
676   b->binding_depth = binding_depth;
677   indent ();
678   fprintf (stderr, "resume %s level 0x%08x line %d\n",
679            (is_class_level) ? "class" : "block", b, lineno);
680   is_class_level = 0;
681   binding_depth++;
682 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
683 }
684 \f
685 /* Create a new `struct binding_level'.  */
686
687 static
688 struct binding_level *
689 make_binding_level ()
690 {
691   /* NOSTRICT */
692   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
693 }
694
695 /* Nonzero if we are currently in the global binding level.  */
696
697 int
698 global_bindings_p ()
699 {
700   return current_binding_level == global_binding_level;
701 }
702
703 /* Return the innermost binding level that is not for a class scope.  */
704
705 static struct binding_level *
706 innermost_nonclass_level ()
707 {
708   struct binding_level *b;
709
710   b = current_binding_level;
711   while (b->parm_flag == 2)
712     b = b->level_chain;
713
714   return b;
715 }
716
717 /* Nonzero if we are currently in a toplevel binding level.  This
718    means either the global binding level or a namespace in a toplevel
719    binding level.  Since there are no non-toplevel namespace levels,
720    this really means any namespace or pseudo-global level.  We also
721    include a class whose context is toplevel.  */
722
723 int
724 toplevel_bindings_p ()
725 {
726   struct binding_level *b = innermost_nonclass_level ();
727
728   return b->namespace_p || b->pseudo_global;
729 }
730
731 /* Nonzero if this is a namespace scope, or if we are defining a class
732    which is itself at namespace scope, or whose enclosing class is
733    such a class, etc.  */
734
735 int
736 namespace_bindings_p ()
737 {
738   struct binding_level *b = innermost_nonclass_level ();
739
740   return b->namespace_p;
741 }
742
743 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
744    unconditionally.  Otherwise, use the normal logic to decide whether
745    or not to create a BLOCK.  */
746
747 void
748 keep_next_level (keep)
749      int keep;
750 {
751   keep_next_level_flag = keep;
752 }
753
754 /* Nonzero if the current level needs to have a BLOCK made.  */
755
756 int
757 kept_level_p ()
758 {
759   return (current_binding_level->blocks != NULL_TREE
760           || current_binding_level->keep
761           || current_binding_level->names != NULL_TREE
762           || (current_binding_level->tags != NULL_TREE
763               && !current_binding_level->tag_transparent));
764 }
765
766 void
767 declare_pseudo_global_level ()
768 {
769   current_binding_level->pseudo_global = 1;
770 }
771
772 static void
773 declare_namespace_level ()
774 {
775   current_binding_level->namespace_p = 1;
776 }
777
778 int
779 pseudo_global_level_p ()
780 {
781   return current_binding_level->pseudo_global;
782 }
783
784 void
785 set_class_shadows (shadows)
786      tree shadows;
787 {
788   class_binding_level->class_shadowed = shadows;
789 }
790
791 /* Enter a new binding level.
792    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
793    not for that of tags.  */
794
795 void
796 pushlevel (tag_transparent)
797      int tag_transparent;
798 {
799   struct binding_level *newlevel;
800
801   if (current_function && !doing_semantic_analysis_p ())
802     return;
803
804   /* Reuse or create a struct for this binding level.  */
805 #if defined(DEBUG_CP_BINDING_LEVELS)
806   if (0)
807 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
808   if (free_binding_level)
809 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
810     {
811       newlevel = free_binding_level;
812       free_binding_level = free_binding_level->level_chain;
813     }
814   else
815     newlevel = make_binding_level ();
816
817   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
818   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
819   keep_next_level_flag = 0;
820 }
821
822 void
823 note_level_for_for ()
824 {
825   current_binding_level->is_for_scope = 1;
826 }
827
828 void
829 pushlevel_temporary (tag_transparent)
830      int tag_transparent;
831 {
832   pushlevel (tag_transparent);
833   current_binding_level->keep = 2;
834   clear_last_expr ();
835
836   /* Note we don't call push_momentary() here.  Otherwise, it would cause
837      cleanups to be allocated on the momentary obstack, and they will be
838      overwritten by the next statement.  */
839
840   expand_start_bindings (0);
841 }
842
843 /* For a binding between a name and an entity at a block scope,
844    this is the `struct binding_level' for the block.  */
845 #define BINDING_LEVEL(NODE) \
846    (((struct tree_binding*)NODE)->scope.level)
847
848 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
849    level at which this declaration is being bound.  */
850
851 static void
852 push_binding (id, decl, level)
853      tree id;
854      tree decl;
855      struct binding_level* level;
856 {
857   tree binding;
858
859   binding = make_node (CPLUS_BINDING);
860
861   /* Now, fill in the binding information.  */
862   BINDING_VALUE (binding) = decl;
863   BINDING_TYPE (binding) = NULL_TREE;
864   BINDING_LEVEL (binding) = level;
865   INHERITED_VALUE_BINDING_P (binding) = 0;
866   LOCAL_BINDING_P (binding) = (level != class_binding_level);
867   BINDING_HAS_LEVEL_P (binding) = 1;
868
869   /* And put it on the front of the list of bindings for ID.  */
870   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
871   IDENTIFIER_BINDING (id) = binding;
872 }
873
874 /* ID is already bound in the current scope.  But, DECL is an
875    additional binding for ID in the same scope.  This is the `struct
876    stat' hack whereby a non-typedef class-name or enum-name can be
877    bound at the same level as some other kind of entity.  It's the
878    responsibility of the caller to check that inserting this name is
879    legal here.  Returns nonzero if the new binding was successful.  */
880 static int
881 add_binding (id, decl)
882      tree id;
883      tree decl;
884 {
885   tree binding = IDENTIFIER_BINDING (id);
886   int ok = 1;
887
888   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
889     /* The new name is the type name.  */
890     BINDING_TYPE (binding) = decl;
891   else if (!BINDING_VALUE (binding))
892     /* This situation arises when push_class_level_binding moves an
893        inherited type-binding out of the way to make room for a new
894        value binding.  */
895     BINDING_VALUE (binding) = decl;
896   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
897            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
898     {
899       /* The old binding was a type name.  It was placed in
900          BINDING_VALUE because it was thought, at the point it was
901          declared, to be the only entity with such a name.  Move the
902          type name into the type slot; it is now hidden by the new
903          binding.  */
904       BINDING_TYPE (binding) = BINDING_VALUE (binding);
905       BINDING_VALUE (binding) = decl;
906       INHERITED_VALUE_BINDING_P (binding) = 0;
907     }
908   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
909            && TREE_CODE (decl) == TYPE_DECL
910            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
911            && same_type_p (TREE_TYPE (decl),
912                            TREE_TYPE (BINDING_VALUE (binding))))
913     /* We have two typedef-names, both naming the same type to have
914        the same name.  This is OK because of:
915
916          [dcl.typedef]
917
918          In a given scope, a typedef specifier can be used to redefine
919          the name of any type declared in that scope to refer to the
920          type to which it already refers.  */
921     ok = 0;
922   else
923     {
924       cp_error ("declaration of `%#D'", decl);
925       cp_error_at ("conflicts with previous declaration `%#D'",
926                    BINDING_VALUE (binding));
927       ok = 0;
928     }
929
930   return ok;
931 }
932
933 /* Add DECL to the list of things declared in B.  */
934
935 static void
936 add_decl_to_level (decl, b)
937      tree decl;
938      struct binding_level *b;
939 {
940   /* We build up the list in reverse order, and reverse it later if
941      necessary.  */
942   TREE_CHAIN (decl) = b->names;
943   b->names = decl;
944 }
945
946 /* Bind DECL to ID in the current_binding_level, assumed to be a local
947    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
948    doesn't really belong to this binding level, that it got here
949    through a using-declaration.  */
950
951 void
952 push_local_binding (id, decl, flags)
953      tree id;
954      tree decl;
955      int flags;
956 {
957   struct binding_level *b;
958
959   /* Skip over any local classes.  This makes sense if we call
960      push_local_binding with a friend decl of a local class.  */
961   b = current_binding_level;
962   while (b->parm_flag == 2)
963     b = b->level_chain;
964
965   if (lookup_name_current_level (id))
966     {
967       /* Supplement the existing binding.  */
968       if (!add_binding (id, decl))
969         /* It didn't work.  Something else must be bound at this
970            level.  Do not add DECL to the list of things to pop
971            later.  */
972         return;
973     }
974   else
975     /* Create a new binding.  */
976     push_binding (id, decl, b);
977
978   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
979     /* We must put the OVERLOAD into a TREE_LIST since the
980        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
981        decls that got here through a using-declaration.  */
982     decl = build_tree_list (NULL_TREE, decl);
983
984   /* And put DECL on the list of things declared by the current
985      binding level.  */
986   add_decl_to_level (decl, b);
987 }
988
989 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
990    binding was successful.  */
991
992 int
993 push_class_binding (id, decl)
994      tree id;
995      tree decl;
996 {
997   int result = 1;
998   tree binding = IDENTIFIER_BINDING (id);
999   tree context;
1000
1001   /* Note that we declared this value so that we can issue an error if
1002      this an illegal redeclaration of a name already used for some
1003      other purpose.  */
1004   note_name_declared_in_class (id, decl);
1005
1006   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1007     /* Supplement the existing binding.  */
1008     result = add_binding (id, decl);
1009   else
1010     /* Create a new binding.  */
1011     push_binding (id, decl, class_binding_level);
1012
1013   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1014      class-level declaration.  Note that we do not use DECL here
1015      because of the possibility of the `struct stat' hack; if DECL is
1016      a class-name or enum-name we might prefer a field-name, or some
1017      such.  */
1018   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1019
1020   /* If this is a binding from a base class, mark it as such.  */
1021   binding = IDENTIFIER_BINDING (id);
1022   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1023     {
1024       /* Any implicit typename must be from a base-class.  The
1025          context for an implicit typename declaration is always
1026          the derived class in which the lookup was done, so the checks
1027          based on the context of DECL below will not trigger.  */
1028       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1029         INHERITED_VALUE_BINDING_P (binding) = 1;
1030       else
1031         {
1032           if (TREE_CODE (decl) == OVERLOAD)
1033             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1034           else
1035             {
1036               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1037                                   0);
1038               context = DECL_REAL_CONTEXT (decl);
1039             }
1040
1041           if (is_properly_derived_from (current_class_type, context))
1042             INHERITED_VALUE_BINDING_P (binding) = 1;
1043           else
1044             INHERITED_VALUE_BINDING_P (binding) = 0;
1045         }
1046     }
1047   else if (BINDING_VALUE (binding) == decl)
1048     /* We only encounter a TREE_LIST when push_class_decls detects an
1049        ambiguity.  Such an ambiguity can be overridden by a definition
1050        in this class.  */
1051     INHERITED_VALUE_BINDING_P (binding) = 1;
1052
1053   return result;
1054 }
1055
1056 /* Remove the binding for DECL which should be the innermost binding
1057    for ID.  */
1058
1059 static void 
1060 pop_binding (id, decl) 
1061      tree id;
1062      tree decl;
1063 {
1064   tree binding;
1065     
1066   if (id == NULL_TREE)
1067     /* It's easiest to write the loops that call this function without
1068        checking whether or not the entities involved have names.  We
1069        get here for such an entity.  */
1070     return;
1071
1072   /* Get the innermost binding for ID.  */
1073   binding = IDENTIFIER_BINDING (id);
1074
1075   /* The name should be bound.  */
1076   my_friendly_assert (binding != NULL_TREE, 0);
1077
1078   /* The DECL will be either the ordinary binding or the type
1079      binding for this identifier.  Remove that binding.  */
1080   if (BINDING_VALUE (binding) == decl)
1081     BINDING_VALUE (binding) = NULL_TREE;
1082   else if (BINDING_TYPE (binding) == decl)
1083     BINDING_TYPE (binding) = NULL_TREE;
1084   else
1085     my_friendly_abort (0);
1086
1087   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1088     /* We're completely done with the innermost binding for this
1089        identifier.  Unhook it from the list of bindings.  */
1090     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1091 }
1092
1093 /* When a label goes out of scope, check to see if that label was used
1094    in a valid manner, and issue any appropriate warnings or errors.  */
1095
1096 static void
1097 pop_label (link)
1098      tree link;
1099 {
1100   tree label = TREE_VALUE (link);
1101
1102   if (!processing_template_decl && doing_semantic_analysis_p ())
1103     {
1104       if (DECL_INITIAL (label) == NULL_TREE)
1105         {
1106           cp_error_at ("label `%D' used but not defined", label);
1107           /* Avoid crashing later.  */
1108           define_label (input_filename, 1, DECL_NAME (label));
1109         }
1110       else if (warn_unused && !TREE_USED (label))
1111         cp_warning_at ("label `%D' defined but not used", label);
1112     }
1113
1114   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1115 }
1116
1117 /* At the end of a function, all labels declared within the fucntion
1118    go out of scope.  BLOCK is the top-level block for the 
1119    function.  */
1120
1121 static void
1122 pop_labels (block)
1123      tree block;
1124 {
1125   tree link;
1126
1127   /* Clear out the definitions of all label names, since their scopes
1128      end here.  */
1129   for (link = named_labels; link; link = TREE_CHAIN (link))
1130     {
1131       pop_label (link);
1132       /* Put the labels into the "variables" of the top-level block,
1133          so debugger can see them.  */
1134       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1135       BLOCK_VARS (block) = TREE_VALUE (link);
1136     }
1137
1138   named_labels = NULL_TREE;
1139 }
1140
1141 /* Exit a binding level.
1142    Pop the level off, and restore the state of the identifier-decl mappings
1143    that were in effect when this level was entered.
1144
1145    If KEEP == 1, this level had explicit declarations, so
1146    and create a "block" (a BLOCK node) for the level
1147    to record its declarations and subblocks for symbol table output.
1148
1149    If FUNCTIONBODY is nonzero, this level is the body of a function,
1150    so create a block as if KEEP were set and also clear out all
1151    label names.
1152
1153    If REVERSE is nonzero, reverse the order of decls before putting
1154    them into the BLOCK.  */
1155
1156 tree
1157 poplevel (keep, reverse, functionbody)
1158      int keep;
1159      int reverse;
1160      int functionbody;
1161 {
1162   register tree link;
1163   /* The chain of decls was accumulated in reverse order.
1164      Put it into forward order, just for cleanliness.  */
1165   tree decls;
1166   int tmp = functionbody;
1167   int real_functionbody;
1168   tree tags;
1169   tree subblocks;
1170   tree block = NULL_TREE;
1171   tree decl;
1172   int block_previously_created;
1173   int leaving_for_scope;
1174
1175   if (current_function && !doing_semantic_analysis_p ())
1176     return NULL_TREE;
1177
1178   my_friendly_assert (current_binding_level->parm_flag != 2,
1179                       19990916);
1180
1181   real_functionbody = (current_binding_level->keep == 2
1182                        ? ((functionbody = 0), tmp) : functionbody);
1183   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1184   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1185
1186   my_friendly_assert (!current_binding_level->class_shadowed,
1187                       19990414);
1188
1189   /* We used to use KEEP == 2 to indicate that the new block should go
1190      at the beginning of the list of blocks at this binding level,
1191      rather than the end.  This hack is no longer used.  */
1192   my_friendly_assert (keep == 0 || keep == 1, 0);
1193
1194   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1195                       (HOST_WIDE_INT) current_binding_level->level_chain,
1196                       current_binding_level->parm_flag,
1197                       current_binding_level->keep);
1198
1199   if (current_binding_level->keep == 1)
1200     keep = 1;
1201
1202   /* Get the decls in the order they were written.
1203      Usually current_binding_level->names is in reverse order.
1204      But parameter decls were previously put in forward order.  */
1205
1206   if (reverse)
1207     current_binding_level->names
1208       = decls = nreverse (current_binding_level->names);
1209   else
1210     decls = current_binding_level->names;
1211
1212   /* Output any nested inline functions within this block
1213      if they weren't already output.  */
1214
1215   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1216     if (TREE_CODE (decl) == FUNCTION_DECL
1217         && ! TREE_ASM_WRITTEN (decl)
1218         && DECL_INITIAL (decl) != NULL_TREE
1219         && TREE_ADDRESSABLE (decl)
1220         && decl_function_context (decl) == current_function_decl)
1221       {
1222         /* If this decl was copied from a file-scope decl
1223            on account of a block-scope extern decl,
1224            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1225         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1226           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1227         else
1228           {
1229             push_function_context ();
1230             output_inline_function (decl);
1231             pop_function_context ();
1232           }
1233       }
1234
1235   /* If there were any declarations or structure tags in that level,
1236      or if this level is a function body,
1237      create a BLOCK to record them for the life of this function.  */
1238
1239   block = NULL_TREE;
1240   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1241   if (block_previously_created)
1242     block = current_binding_level->this_block;
1243   else if (keep == 1 || functionbody)
1244     block = make_node (BLOCK);
1245   if (block != NULL_TREE)
1246     {
1247       if (block_previously_created)
1248         {
1249           if (decls || tags || subblocks)
1250             {
1251               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1252                 warning ("internal compiler error: debugging info corrupted");
1253
1254               BLOCK_VARS (block) = decls;
1255               BLOCK_TYPE_TAGS (block) = tags;
1256
1257               /* We can have previous subblocks and new subblocks when
1258                  doing fixup_gotos with complex cleanups.  We chain the new
1259                  subblocks onto the end of any pre-existing subblocks.  */
1260               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1261                                                  subblocks);
1262             }
1263           /* If we created the block earlier on, and we are just
1264              diddling it now, then it already should have a proper
1265              BLOCK_END_NOTE value associated with it.  */
1266         }
1267       else
1268         {
1269           BLOCK_VARS (block) = decls;
1270           BLOCK_TYPE_TAGS (block) = tags;
1271           BLOCK_SUBBLOCKS (block) = subblocks;
1272           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1273              value.  */ 
1274           remember_end_note (block);
1275         }
1276     }
1277
1278   /* In each subblock, record that this is its superior.  */
1279
1280   if (keep >= 0)
1281     for (link = subblocks; link; link = TREE_CHAIN (link))
1282       BLOCK_SUPERCONTEXT (link) = block;
1283
1284   /* We still support the old for-scope rules, whereby the variables
1285      in a for-init statement were in scope after the for-statement
1286      ended.  We only use the new rules in flag_new_for_scope is
1287      nonzero.  */
1288   leaving_for_scope 
1289     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1290
1291   /* Remove declarations for all the DECLs in this level.  */
1292   for (link = decls; link; link = TREE_CHAIN (link))
1293     {
1294       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1295         {
1296           tree outer_binding 
1297             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1298           tree ns_binding;
1299
1300           if (!outer_binding)
1301             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1302           else
1303             ns_binding = NULL_TREE;
1304
1305           if (outer_binding 
1306               && (BINDING_LEVEL (outer_binding) 
1307                   == current_binding_level->level_chain))
1308             /* We have something like:
1309                
1310                  int i;
1311                  for (int i; ;);
1312                  
1313                and we are leaving the `for' scope.  There's no reason to
1314                keep the binding of the inner `i' in this case.  */
1315             pop_binding (DECL_NAME (link), link);
1316           else if ((outer_binding 
1317                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1318                         == TYPE_DECL))
1319                    || (ns_binding 
1320                        && TREE_CODE (ns_binding) == TYPE_DECL))
1321             /* Here, we have something like:
1322
1323                  typedef int I;
1324
1325                  void f () {
1326                    for (int I; ;);
1327                  }
1328
1329                We must pop the for-scope binding so we know what's a
1330                type and what isn't.  */
1331             pop_binding (DECL_NAME (link), link);
1332           else
1333             {
1334               /* Mark this VAR_DECL as dead so that we can tell we left it
1335                  there only for backward compatibility.  */
1336               DECL_DEAD_FOR_LOCAL (link) = 1;
1337               
1338               /* Keep track of what should of have happenned when we
1339                  popped the binding.  */
1340               if (outer_binding && BINDING_VALUE (outer_binding))
1341                 DECL_SHADOWED_FOR_VAR (link) 
1342                   = BINDING_VALUE (outer_binding);
1343
1344               /* Add it to the list of dead variables in the next
1345                  outermost binding to that we can remove these when we
1346                  leave that binding.  */
1347               current_binding_level->level_chain->dead_vars_from_for
1348                 = tree_cons (NULL_TREE, link,
1349                              current_binding_level->level_chain->
1350                              dead_vars_from_for);
1351
1352               /* Although we don't pop the CPLUS_BINDING, we do clear
1353                  its BINDING_LEVEL since the level is going away now.  */
1354               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1355                 = 0;
1356             }
1357         }
1358       else 
1359         {
1360           /* Remove the binding.  */
1361           decl = link;
1362           if (TREE_CODE (decl) == TREE_LIST)
1363             decl = TREE_VALUE (decl);
1364           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1365             pop_binding (DECL_NAME (decl), decl);
1366           else if (TREE_CODE (decl) == OVERLOAD)
1367             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1368           else 
1369             my_friendly_abort (0);
1370         }
1371     }
1372
1373   /* Remove declarations for any `for' variables from inner scopes
1374      that we kept around.  */
1375   for (link = current_binding_level->dead_vars_from_for;
1376        link; link = TREE_CHAIN (link))
1377     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1378
1379   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1380   for (link = current_binding_level->type_shadowed;
1381        link; link = TREE_CHAIN (link))
1382     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1383
1384   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1385   for (link = current_binding_level->shadowed_labels;
1386        link; 
1387        link = TREE_CHAIN (link))
1388     pop_label (link);
1389
1390   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1391      list if a `using' declaration put them there.  The debugging
1392      back-ends won't understand OVERLOAD, so we remove them here.
1393      Because the BLOCK_VARS are (temporarily) shared with
1394      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1395      popped all the bindings.  */
1396   if (block)
1397     {
1398       tree* d;
1399
1400       for (d = &BLOCK_VARS (block); *d; )
1401         {
1402           if (TREE_CODE (*d) == TREE_LIST)
1403             *d = TREE_CHAIN (*d);
1404           else
1405             d = &TREE_CHAIN (*d);
1406         }
1407     }
1408
1409   /* If the level being exited is the top level of a function,
1410      check over all the labels.  */
1411   if (functionbody)
1412     {
1413       /* Since this is the top level block of a function, the vars are
1414          the function's parameters.  Don't leave them in the BLOCK
1415          because they are found in the FUNCTION_DECL instead.  */
1416       BLOCK_VARS (block) = 0;
1417       pop_labels (block);
1418     }
1419
1420   /* Any uses of undefined labels now operate under constraints
1421      of next binding contour.  */
1422   if (current_function)
1423     {
1424       struct binding_level *level_chain;
1425       level_chain = current_binding_level->level_chain;
1426       if (level_chain)
1427         {
1428           struct named_label_list *labels;
1429           for (labels = named_label_uses; labels; labels = labels->next)
1430             if (labels->binding_level == current_binding_level)
1431               {
1432                 labels->binding_level = level_chain;
1433                 labels->names_in_scope = level_chain->names;
1434               }
1435         }
1436     }
1437
1438   tmp = current_binding_level->keep;
1439
1440   pop_binding_level ();
1441   if (functionbody)
1442     DECL_INITIAL (current_function_decl) = block;
1443   else if (block)
1444     {
1445       if (!block_previously_created)
1446         current_binding_level->blocks
1447           = chainon (current_binding_level->blocks, block);
1448     }
1449   /* If we did not make a block for the level just exited,
1450      any blocks made for inner levels
1451      (since they cannot be recorded as subblocks in that level)
1452      must be carried forward so they will later become subblocks
1453      of something else.  */
1454   else if (subblocks)
1455     current_binding_level->blocks
1456       = chainon (current_binding_level->blocks, subblocks);
1457
1458   /* Take care of compiler's internal binding structures.  */
1459   if (tmp == 2)
1460     {
1461       expand_end_bindings (getdecls (), keep, 1);
1462       /* Each and every BLOCK node created here in `poplevel' is important
1463          (e.g. for proper debugging information) so if we created one
1464          earlier, mark it as "used".  */
1465       if (block)
1466         TREE_USED (block) = 1;
1467       block = poplevel (keep, reverse, real_functionbody);
1468     }
1469
1470   /* Each and every BLOCK node created here in `poplevel' is important
1471      (e.g. for proper debugging information) so if we created one
1472      earlier, mark it as "used".  */
1473   if (block)
1474     TREE_USED (block) = 1;
1475   return block;
1476 }
1477
1478 /* Delete the node BLOCK from the current binding level.
1479    This is used for the block inside a stmt expr ({...})
1480    so that the block can be reinserted where appropriate.  */
1481
1482 void
1483 delete_block (block)
1484      tree block;
1485 {
1486   tree t;
1487   if (current_binding_level->blocks == block)
1488     current_binding_level->blocks = TREE_CHAIN (block);
1489   for (t = current_binding_level->blocks; t;)
1490     {
1491       if (TREE_CHAIN (t) == block)
1492         TREE_CHAIN (t) = TREE_CHAIN (block);
1493       else
1494         t = TREE_CHAIN (t);
1495     }
1496   TREE_CHAIN (block) = NULL_TREE;
1497   /* Clear TREE_USED which is always set by poplevel.
1498      The flag is set again if insert_block is called.  */
1499   TREE_USED (block) = 0;
1500 }
1501
1502 /* Insert BLOCK at the end of the list of subblocks of the
1503    current binding level.  This is used when a BIND_EXPR is expanded,
1504    to handle the BLOCK node inside the BIND_EXPR.  */
1505
1506 void
1507 insert_block (block)
1508      tree block;
1509 {
1510   TREE_USED (block) = 1;
1511   current_binding_level->blocks
1512     = chainon (current_binding_level->blocks, block);
1513 }
1514
1515 /* Set the BLOCK node for the innermost scope
1516    (the one we are currently in).  */
1517
1518 void
1519 set_block (block)
1520     register tree block;
1521 {
1522   current_binding_level->this_block = block;
1523 }
1524
1525 /* Do a pushlevel for class declarations.  */
1526
1527 void
1528 pushlevel_class ()
1529 {
1530   register struct binding_level *newlevel;
1531
1532   /* Reuse or create a struct for this binding level.  */
1533 #if defined(DEBUG_CP_BINDING_LEVELS)
1534   if (0)
1535 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1536   if (free_binding_level)
1537 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1538     {
1539       newlevel = free_binding_level;
1540       free_binding_level = free_binding_level->level_chain;
1541     }
1542   else
1543     newlevel = make_binding_level ();
1544
1545 #if defined(DEBUG_CP_BINDING_LEVELS)
1546   is_class_level = 1;
1547 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1548
1549   push_binding_level (newlevel, 0, 0);
1550
1551   class_binding_level = current_binding_level;
1552   class_binding_level->parm_flag = 2;
1553 }
1554
1555 /* ...and a poplevel for class declarations.  */
1556
1557 void
1558 poplevel_class ()
1559 {
1560   register struct binding_level *level = class_binding_level;
1561   tree shadowed;
1562
1563   my_friendly_assert (level != 0, 354);
1564   
1565   /* If we're leaving a toplevel class, don't bother to do the setting
1566      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1567      shouldn't even be used when current_class_type isn't set, and second,
1568      if we don't touch it here, we're able to use the cache effect if the
1569      next time we're entering a class scope, it is the same class.  */
1570   if (current_class_depth != 1)
1571     {
1572       struct binding_level* b;
1573
1574       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1575       for (shadowed = level->class_shadowed;
1576            shadowed;
1577            shadowed = TREE_CHAIN (shadowed))
1578         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1579         
1580       /* Find the next enclosing class, and recreate
1581          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1582       b = level->level_chain;
1583       while (b && b->parm_flag != 2)
1584         b = b->level_chain;
1585
1586       if (b)
1587         for (shadowed = b->class_shadowed; 
1588              shadowed; 
1589              shadowed = TREE_CHAIN (shadowed))
1590           {
1591             tree t;
1592
1593             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1594             while (t && BINDING_LEVEL (t) != b)
1595               t = TREE_CHAIN (t);
1596       
1597             if (t)
1598               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1599                 = BINDING_VALUE (t);
1600           }
1601     }
1602   else
1603     /* Remember to save what IDENTIFIER's were bound in this scope so we
1604        can recover from cache misses.  */
1605     {
1606       previous_class_type = current_class_type;
1607       previous_class_values = class_binding_level->class_shadowed;
1608     }
1609   for (shadowed = level->type_shadowed;
1610        shadowed;
1611        shadowed = TREE_CHAIN (shadowed))
1612     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1613
1614   /* Remove the bindings for all of the class-level declarations.  */
1615   for (shadowed = level->class_shadowed; 
1616        shadowed; 
1617        shadowed = TREE_CHAIN (shadowed))
1618     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1619
1620   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1621                       (HOST_WIDE_INT) class_binding_level->level_chain,
1622                       class_binding_level->parm_flag,
1623                       class_binding_level->keep);
1624
1625   /* Now, pop out of the binding level which we created up in the
1626      `pushlevel_class' routine.  */
1627 #if defined(DEBUG_CP_BINDING_LEVELS)
1628   is_class_level = 1;
1629 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1630
1631   pop_binding_level ();
1632 }
1633
1634 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1635    for any names in enclosing classes.  */
1636
1637 void
1638 clear_identifier_class_values ()
1639 {
1640   tree t;
1641
1642   if (!class_binding_level)
1643     return;
1644
1645   for (t = class_binding_level->class_shadowed;
1646        t;
1647        t = TREE_CHAIN (t))
1648     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1649 }
1650
1651 /* Returns non-zero if T is a virtual function table.  */
1652
1653 int
1654 vtable_decl_p (t, data)
1655      tree t;
1656      void *data ATTRIBUTE_UNUSED;
1657 {
1658   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1659 }
1660
1661 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1662    functions.  */
1663
1664 int
1665 vtype_decl_p (t, data)
1666      tree t;
1667      void *data ATTRIBUTE_UNUSED;
1668 {
1669   return (TREE_CODE (t) == TYPE_DECL
1670           && TREE_TYPE (t) != error_mark_node
1671           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1672           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1673 }
1674
1675 /* Return the declarations that are members of the namespace NS.  */
1676
1677 tree
1678 cp_namespace_decls (ns)
1679      tree ns;
1680 {
1681   return NAMESPACE_LEVEL (ns)->names;
1682 }
1683
1684 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1685    itself, calling F for each.  The DATA is passed to F as well.  */
1686
1687 static int
1688 walk_namespaces_r (namespace, f, data)
1689      tree namespace;
1690      walk_namespaces_fn f;
1691      void *data;
1692 {
1693   tree current;
1694   int result = 0;
1695
1696   result |= (*f) (namespace, data);
1697
1698   for (current = cp_namespace_decls (namespace);
1699        current;
1700        current = TREE_CHAIN (current))
1701     {
1702       if (TREE_CODE (current) != NAMESPACE_DECL
1703           || DECL_NAMESPACE_ALIAS (current))
1704         continue;
1705       if (!DECL_LANG_SPECIFIC (current))
1706         {
1707           /* Hmm. std. */
1708           my_friendly_assert (current == std_node, 393);
1709           continue;
1710         }
1711
1712       /* We found a namespace.  */
1713       result |= walk_namespaces_r (current, f, data);
1714     }
1715
1716   return result;
1717 }
1718
1719 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1720    F as well.  */
1721
1722 int
1723 walk_namespaces (f, data)
1724      walk_namespaces_fn f;
1725      void *data;
1726 {
1727   return walk_namespaces_r (global_namespace, f, data);
1728 }
1729
1730 struct walk_globals_data {
1731   walk_globals_pred p;
1732   walk_globals_fn f;
1733   void *data;
1734 };
1735
1736 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1737    for which P returns non-zero, call F with its address.  If any call
1738    to F returns a non-zero value, return a non-zero value.  */
1739
1740 static int 
1741 walk_globals_r (namespace, data)
1742      tree namespace;
1743      void *data;
1744 {
1745   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1746   walk_globals_pred p = wgd->p;
1747   walk_globals_fn f = wgd->f;
1748   void *d = wgd->data;
1749   tree *t;
1750   int result = 0;
1751
1752   t = &NAMESPACE_LEVEL (namespace)->names;
1753
1754   while (*t)
1755     {
1756       tree glbl = *t;
1757
1758       if ((*p) (glbl, d))
1759         result |= (*f) (t, d);
1760
1761       /* If F changed *T, then *T still points at the next item to
1762          examine.  */
1763       if (*t == glbl)
1764         t = &TREE_CHAIN (*t);
1765     }
1766
1767   return result;
1768 }
1769
1770 /* Walk the global declarations.  Whenever one is found for which P
1771    returns non-zero, call F with its address.  If any call to F
1772    returns a non-zero value, return a non-zero value.  */
1773
1774 int
1775 walk_globals (p, f, data)
1776      walk_globals_pred p;
1777      walk_globals_fn f;
1778      void *data;
1779 {
1780   struct walk_globals_data wgd;
1781   wgd.p = p;
1782   wgd.f = f;
1783   wgd.data = data;
1784
1785   return walk_namespaces (walk_globals_r, &wgd);
1786 }
1787
1788 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1789    DATA is non-NULL, this is the last time we will call
1790    wrapup_global_declarations for this NAMESPACE.  */
1791
1792 int
1793 wrapup_globals_for_namespace (namespace, data)
1794      tree namespace;
1795      void *data;
1796 {
1797   tree globals = cp_namespace_decls (namespace);
1798   int len = list_length (globals);
1799   tree *vec = (tree *) alloca (sizeof (tree) * len);
1800   int i;
1801   int result;
1802   tree decl;
1803   int last_time = (data != 0);
1804
1805   if (last_time && namespace == global_namespace)
1806     /* Let compile_file handle the global namespace.  */
1807     return 0;
1808
1809   /* Process the decls in reverse order--earliest first.
1810      Put them into VEC from back to front, then take out from front.  */
1811   
1812   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1813     vec[len - i - 1] = decl;
1814   
1815   if (last_time)
1816     {
1817       check_global_declarations (vec, len);
1818       return 0;
1819     }
1820
1821   /* Temporarily mark vtables as external.  That prevents
1822      wrapup_global_declarations from writing them out; we must process
1823      them ourselves in finish_vtable_vardecl.  */
1824   for (i = 0; i < len; ++i)
1825     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1826       {
1827         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1828         DECL_EXTERNAL (vec[i]) = 1;
1829       }
1830
1831   /* Write out any globals that need to be output.  */
1832   result = wrapup_global_declarations (vec, len);
1833
1834   /* Undo the hack to DECL_EXTERNAL above.  */
1835   for (i = 0; i < len; ++i)
1836     if (vtable_decl_p (vec[i], /*data=*/0)
1837         && DECL_NOT_REALLY_EXTERN (vec[i]))
1838       {
1839         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1840         DECL_EXTERNAL (vec[i]) = 0;
1841       }
1842
1843   return result;
1844 }
1845
1846 \f
1847 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1848
1849 static void
1850 mark_binding_level (arg)
1851      void *arg;
1852 {
1853   struct binding_level *lvl = *(struct binding_level **)arg;
1854
1855   while (lvl)
1856     {
1857       ggc_mark_tree (lvl->names);
1858       ggc_mark_tree (lvl->tags);
1859       ggc_mark_tree (lvl->usings);
1860       ggc_mark_tree (lvl->using_directives);
1861       ggc_mark_tree (lvl->class_shadowed);
1862       ggc_mark_tree (lvl->type_shadowed);
1863       ggc_mark_tree (lvl->shadowed_labels);
1864       ggc_mark_tree (lvl->blocks);
1865       ggc_mark_tree (lvl->this_block);
1866       ggc_mark_tree (lvl->incomplete);
1867       ggc_mark_tree (lvl->dead_vars_from_for);
1868
1869       lvl = lvl->level_chain;
1870     }
1871 }
1872 \f
1873 /* For debugging.  */
1874 static int no_print_functions = 0;
1875 static int no_print_builtins = 0;
1876
1877 void
1878 print_binding_level (lvl)
1879      struct binding_level *lvl;
1880 {
1881   tree t;
1882   int i = 0, len;
1883   fprintf (stderr, " blocks=");
1884   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1885   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1886            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1887   if (lvl->tag_transparent)
1888     fprintf (stderr, " tag-transparent");
1889   if (lvl->more_cleanups_ok)
1890     fprintf (stderr, " more-cleanups-ok");
1891   if (lvl->have_cleanups)
1892     fprintf (stderr, " have-cleanups");
1893   fprintf (stderr, "\n");
1894   if (lvl->names)
1895     {
1896       fprintf (stderr, " names:\t");
1897       /* We can probably fit 3 names to a line?  */
1898       for (t = lvl->names; t; t = TREE_CHAIN (t))
1899         {
1900           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1901             continue;
1902           if (no_print_builtins
1903               && (TREE_CODE (t) == TYPE_DECL)
1904               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1905             continue;
1906
1907           /* Function decls tend to have longer names.  */
1908           if (TREE_CODE (t) == FUNCTION_DECL)
1909             len = 3;
1910           else
1911             len = 2;
1912           i += len;
1913           if (i > 6)
1914             {
1915               fprintf (stderr, "\n\t");
1916               i = len;
1917             }
1918           print_node_brief (stderr, "", t, 0);
1919           if (t == error_mark_node)
1920             break;
1921         }
1922       if (i)
1923         fprintf (stderr, "\n");
1924     }
1925   if (lvl->tags)
1926     {
1927       fprintf (stderr, " tags:\t");
1928       i = 0;
1929       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1930         {
1931           if (TREE_PURPOSE (t) == NULL_TREE)
1932             len = 3;
1933           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1934             len = 2;
1935           else
1936             len = 4;
1937           i += len;
1938           if (i > 5)
1939             {
1940               fprintf (stderr, "\n\t");
1941               i = len;
1942             }
1943           if (TREE_PURPOSE (t) == NULL_TREE)
1944             {
1945               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1946               fprintf (stderr, ">");
1947             }
1948           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1949             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1950           else
1951             {
1952               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1953               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1954               fprintf (stderr, ">");
1955             }
1956         }
1957       if (i)
1958         fprintf (stderr, "\n");
1959     }
1960   if (lvl->class_shadowed)
1961     {
1962       fprintf (stderr, " class-shadowed:");
1963       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1964         {
1965           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1966         }
1967       fprintf (stderr, "\n");
1968     }
1969   if (lvl->type_shadowed)
1970     {
1971       fprintf (stderr, " type-shadowed:");
1972       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1973         {
1974           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1975         }
1976       fprintf (stderr, "\n");
1977     }
1978 }
1979
1980 void
1981 print_other_binding_stack (stack)
1982      struct binding_level *stack;
1983 {
1984   struct binding_level *level;
1985   for (level = stack; level != global_binding_level; level = level->level_chain)
1986     {
1987       fprintf (stderr, "binding level ");
1988       fprintf (stderr, HOST_PTR_PRINTF, level);
1989       fprintf (stderr, "\n");
1990       print_binding_level (level);
1991     }
1992 }
1993
1994 void
1995 print_binding_stack ()
1996 {
1997   struct binding_level *b;
1998   fprintf (stderr, "current_binding_level=");
1999   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2000   fprintf (stderr, "\nclass_binding_level=");
2001   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2002   fprintf (stderr, "\nglobal_binding_level=");
2003   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2004   fprintf (stderr, "\n");
2005   if (class_binding_level)
2006     {
2007       for (b = class_binding_level; b; b = b->level_chain)
2008         if (b == current_binding_level)
2009           break;
2010       if (b)
2011         b = class_binding_level;
2012       else
2013         b = current_binding_level;
2014     }
2015   else
2016     b = current_binding_level;
2017   print_other_binding_stack (b);
2018   fprintf (stderr, "global:\n");
2019   print_binding_level (global_binding_level);
2020 }
2021
2022 /* Namespace binding access routines: The namespace_bindings field of
2023    the identifier is polymorphic, with three possible values:
2024    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2025    indicating the BINDING_VALUE of global_namespace. */
2026
2027 /* Check whether the a binding for the name to scope is known.
2028    Assumes that the bindings of the name are already a list
2029    of bindings. Returns the binding found, or NULL_TREE. */
2030
2031 static tree
2032 find_binding (name, scope)
2033      tree name;
2034      tree scope;
2035 {
2036   tree iter, prev = NULL_TREE;
2037
2038   scope = ORIGINAL_NAMESPACE (scope);
2039   
2040   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2041        iter = TREE_CHAIN (iter))
2042     {
2043       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2044       if (BINDING_SCOPE (iter) == scope)
2045         {
2046           /* Move binding found to the front of the list, so
2047              subsequent lookups will find it faster. */
2048           if (prev)
2049             {
2050               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2051               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2052               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2053             }
2054           return iter;
2055         }
2056       prev = iter;
2057     }
2058   return NULL_TREE;
2059 }
2060
2061 /* Always returns a binding for name in scope. If the
2062    namespace_bindings is not a list, convert it to one first.
2063    If no binding is found, make a new one. */
2064
2065 tree
2066 binding_for_name (name, scope)
2067      tree name;
2068      tree scope;
2069 {
2070   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2071   tree result;
2072
2073   scope = ORIGINAL_NAMESPACE (scope);
2074   
2075   if (b && TREE_CODE (b) != CPLUS_BINDING)
2076     {
2077       /* Get rid of optimization for global scope. */
2078       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2079       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2080       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2081     }
2082   if (b && (result = find_binding (name, scope)))
2083     return result;
2084   /* Not found, make a new permanent one. */
2085   push_obstacks (&permanent_obstack, &permanent_obstack);
2086   result = make_node (CPLUS_BINDING);
2087   TREE_CHAIN (result) = b;
2088   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2089   BINDING_SCOPE (result) = scope;
2090   BINDING_TYPE (result) = NULL_TREE;
2091   BINDING_VALUE (result) = NULL_TREE;
2092   pop_obstacks ();
2093   return result;
2094 }
2095
2096 /* Return the binding value for name in scope, considering that
2097    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2098
2099 tree
2100 namespace_binding (name, scope)
2101      tree name;
2102      tree scope;
2103 {
2104   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2105   if (b == NULL_TREE)
2106     return NULL_TREE;
2107   if (scope == NULL_TREE)
2108     scope = global_namespace;
2109   if (TREE_CODE (b) != CPLUS_BINDING)
2110     return (scope == global_namespace) ? b : NULL_TREE;
2111   name = find_binding (name,scope);
2112   if (name == NULL_TREE)
2113     return name;
2114   return BINDING_VALUE (name);
2115 }
2116
2117 /* Set the binding value for name in scope. If modifying the binding
2118    of global_namespace is attempted, try to optimize it. */
2119
2120 void
2121 set_namespace_binding (name, scope, val)
2122      tree name;
2123      tree scope;
2124      tree val;
2125 {
2126   tree b;
2127
2128   if (scope == NULL_TREE)
2129     scope = global_namespace;
2130   
2131   if (scope == global_namespace)
2132     {
2133       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2134       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2135         {
2136           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2137           return;
2138         }
2139     }
2140   b = binding_for_name (name, scope);
2141   BINDING_VALUE (b) = val;
2142 }
2143
2144 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2145    select a name that is unique to this compilation unit.  */
2146
2147 void
2148 push_namespace (name)
2149      tree name;
2150 {
2151   tree d = NULL_TREE;
2152   int need_new = 1;
2153   int implicit_use = 0;
2154   int global = 0;
2155   if (!global_namespace)
2156     {
2157       /* This must be ::. */
2158       my_friendly_assert (name == get_identifier ("::"), 377);
2159       global = 1;
2160     }
2161   else if (!name)
2162     {
2163       /* The name of anonymous namespace is unique for the translation
2164          unit.  */
2165       if (!anonymous_namespace_name)
2166         anonymous_namespace_name = get_file_function_name ('N');
2167       name = anonymous_namespace_name;
2168       d = IDENTIFIER_NAMESPACE_VALUE (name);
2169       if (d)
2170         /* Reopening anonymous namespace.  */
2171         need_new = 0;
2172       implicit_use = 1;
2173     }
2174   else if (current_namespace == global_namespace
2175            && name == DECL_NAME (std_node))
2176     {
2177       in_std++;
2178       return;
2179     }
2180   else
2181     {
2182       /* Check whether this is an extended namespace definition. */
2183       d = IDENTIFIER_NAMESPACE_VALUE (name);
2184       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2185         {
2186           need_new = 0;
2187           if (DECL_NAMESPACE_ALIAS (d))
2188             {
2189               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2190                         d, DECL_NAMESPACE_ALIAS (d));
2191               d = DECL_NAMESPACE_ALIAS (d);
2192             }
2193         }
2194     }
2195   
2196   if (need_new)
2197     {
2198       /* Make a new namespace, binding the name to it. */
2199       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2200       /* The global namespace is not pushed, and the global binding
2201          level is set elsewhere.  */
2202       if (!global)
2203         {
2204           d = pushdecl (d);
2205           pushlevel (0);
2206           declare_namespace_level ();
2207           NAMESPACE_LEVEL (d) = current_binding_level;
2208         }
2209     }
2210   else
2211     resume_binding_level (NAMESPACE_LEVEL (d));
2212
2213   if (implicit_use)
2214     do_using_directive (d);
2215   /* Enter the name space. */
2216   current_namespace = d;
2217 }
2218
2219 /* Pop from the scope of the current namespace.  */
2220
2221 void
2222 pop_namespace ()
2223 {
2224   if (current_namespace == global_namespace)
2225     {
2226       my_friendly_assert (in_std>0, 980421);
2227       in_std--;
2228       return;
2229     }
2230   current_namespace = CP_DECL_CONTEXT (current_namespace);
2231   /* The binding level is not popped, as it might be re-opened later.  */
2232   suspend_binding_level ();
2233 }
2234
2235 /* Push into the scope of the namespace NS, even if it is deeply
2236    nested within another namespace.  */
2237
2238 void
2239 push_nested_namespace (ns)
2240      tree ns;
2241 {
2242   if (ns == global_namespace)
2243     push_to_top_level ();
2244   else
2245     {
2246       push_nested_namespace (CP_DECL_CONTEXT (ns));
2247       push_namespace (DECL_NAME (ns));
2248     }
2249 }
2250
2251 /* Pop back from the scope of the namespace NS, which was previously
2252    entered with push_nested_namespace.  */
2253      
2254 void
2255 pop_nested_namespace (ns)
2256      tree ns;
2257 {
2258   while (ns != global_namespace)
2259     {
2260       pop_namespace ();
2261       ns = CP_DECL_CONTEXT (ns);
2262     }
2263
2264   pop_from_top_level ();
2265 }
2266
2267 \f
2268 /* Subroutines for reverting temporarily to top-level for instantiation
2269    of templates and such.  We actually need to clear out the class- and
2270    local-value slots of all identifiers, so that only the global values
2271    are at all visible.  Simply setting current_binding_level to the global
2272    scope isn't enough, because more binding levels may be pushed.  */
2273 struct saved_scope *scope_chain;
2274
2275 /* Mark ST for GC.  */
2276
2277 static void
2278 mark_stmt_tree (st)
2279      struct stmt_tree *st;
2280 {
2281   ggc_mark_tree (st->x_last_stmt);
2282   ggc_mark_tree (st->x_last_expr_type);
2283 }
2284
2285 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2286
2287 static void
2288 mark_saved_scope (arg)
2289      void *arg;
2290 {
2291   struct saved_scope *t = *(struct saved_scope **)arg;
2292   while (t)
2293     {
2294       mark_binding_level (&t->class_bindings);
2295       ggc_mark_tree (t->old_bindings);
2296       ggc_mark_tree (t->old_namespace);
2297       ggc_mark_tree (t->class_name);
2298       ggc_mark_tree (t->class_type);
2299       ggc_mark_tree (t->access_specifier);
2300       ggc_mark_tree (t->function_decl);
2301       if (t->lang_base)
2302         ggc_mark_tree_varray (t->lang_base);
2303       ggc_mark_tree (t->lang_name);
2304       ggc_mark_tree (t->x_function_parms);
2305       ggc_mark_tree (t->template_parms);
2306       ggc_mark_tree (t->x_previous_class_type);
2307       ggc_mark_tree (t->x_previous_class_values);
2308       ggc_mark_tree (t->x_saved_tree);
2309
2310       mark_stmt_tree (&t->x_stmt_tree);
2311       mark_binding_level (&t->bindings);
2312       t = t->prev;
2313     }
2314 }
2315
2316 static tree
2317 store_bindings (names, old_bindings)
2318      tree names, old_bindings;
2319 {
2320   tree t;
2321   for (t = names; t; t = TREE_CHAIN (t))
2322     {
2323       tree binding, t1, id;
2324
2325       if (TREE_CODE (t) == TREE_LIST)
2326         id = TREE_PURPOSE (t);
2327       else
2328         id = DECL_NAME (t);
2329
2330       if (!id 
2331           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2332              we have no IDENTIFIER_BINDING if we have left the class
2333              scope, but cached the class-level declarations.  */
2334           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2335         continue;
2336
2337       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2338         if (TREE_VEC_ELT (t1, 0) == id)
2339           goto skip_it;
2340
2341       binding = make_tree_vec (4);
2342
2343       if (id)
2344         {
2345           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2346           TREE_VEC_ELT (binding, 0) = id;
2347           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2348           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2349           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2350           IDENTIFIER_BINDING (id) = NULL_TREE;
2351           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2352         }
2353       TREE_CHAIN (binding) = old_bindings;
2354       old_bindings = binding;
2355     skip_it:
2356       ;
2357     }
2358   return old_bindings;
2359 }
2360
2361 void
2362 maybe_push_to_top_level (pseudo)
2363      int pseudo;
2364 {
2365   struct saved_scope *s;
2366   struct binding_level *b;
2367   tree old_bindings;
2368   int need_pop;
2369
2370   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2371
2372   b = scope_chain ? current_binding_level : 0;
2373
2374   /* If we're in the middle of some function, save our state.  */
2375   if (current_function)
2376     {
2377       need_pop = 1;
2378       push_function_context_to (NULL_TREE);
2379     }
2380   else
2381     need_pop = 0;
2382
2383   old_bindings = NULL_TREE;
2384   if (scope_chain && previous_class_type)
2385     old_bindings = store_bindings (previous_class_values, old_bindings);
2386
2387   /* Have to include global_binding_level, because class-level decls
2388      aren't listed anywhere useful.  */
2389   for (; b; b = b->level_chain)
2390     {
2391       tree t;
2392
2393       /* Template IDs are inserted into the global level. If they were
2394          inserted into namespace level, finish_file wouldn't find them
2395          when doing pending instantiations. Therefore, don't stop at
2396          namespace level, but continue until :: .  */
2397       if (b == global_binding_level || (pseudo && b->pseudo_global))
2398         break;
2399
2400       old_bindings = store_bindings (b->names, old_bindings);
2401       /* We also need to check class_shadowed to save class-level type
2402          bindings, since pushclass doesn't fill in b->names.  */
2403       if (b->parm_flag == 2)
2404         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2405
2406       /* Unwind type-value slots back to top level.  */
2407       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2408         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2409     }
2410   s->prev = scope_chain;
2411   s->old_bindings = old_bindings;
2412   s->bindings = b;
2413   s->need_pop_function_context = need_pop;
2414   s->function_decl = current_function_decl;
2415
2416   scope_chain = s;
2417   current_function_decl = NULL_TREE;
2418   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2419   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2420   current_lang_name = lang_name_cplusplus;
2421   strict_prototype = strict_prototypes_lang_cplusplus;
2422   current_namespace = global_namespace;
2423
2424   push_obstacks (&permanent_obstack, &permanent_obstack);
2425 }
2426
2427 void
2428 push_to_top_level ()
2429 {
2430   maybe_push_to_top_level (0);
2431 }
2432
2433 void
2434 pop_from_top_level ()
2435 {
2436   struct saved_scope *s = scope_chain;
2437   tree t;
2438
2439   /* Clear out class-level bindings cache.  */
2440   if (previous_class_type)
2441     invalidate_class_lookup_cache ();
2442
2443   pop_obstacks ();
2444
2445   VARRAY_FREE (current_lang_base);
2446
2447   scope_chain = s->prev;
2448   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2449     {
2450       tree id = TREE_VEC_ELT (t, 0);
2451       if (id)
2452         {
2453           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2454           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2455           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2456         }
2457     }
2458
2459   if (current_lang_name == lang_name_cplusplus)
2460     strict_prototype = strict_prototypes_lang_cplusplus;
2461   else if (current_lang_name == lang_name_c)
2462     strict_prototype = strict_prototypes_lang_c;
2463
2464   /* If we were in the middle of compiling a function, restore our
2465      state.  */
2466   if (s->need_pop_function_context)
2467     pop_function_context_from (NULL_TREE);
2468   current_function_decl = s->function_decl;
2469
2470   free (s);
2471 }
2472 \f
2473 /* Push a definition of struct, union or enum tag "name".
2474    into binding_level "b".   "type" should be the type node, 
2475    We assume that the tag "name" is not already defined.
2476
2477    Note that the definition may really be just a forward reference.
2478    In that case, the TYPE_SIZE will be a NULL_TREE.
2479
2480    C++ gratuitously puts all these tags in the name space.  */
2481
2482 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2483    record the shadowed value for this binding contour.  TYPE is
2484    the type that ID maps to.  */
2485
2486 static void
2487 set_identifier_type_value_with_scope (id, type, b)
2488      tree id;
2489      tree type;
2490      struct binding_level *b;
2491 {
2492   if (!b->namespace_p)
2493     {
2494       /* Shadow the marker, not the real thing, so that the marker
2495          gets restored later. */
2496       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2497       b->type_shadowed
2498         = tree_cons (id, old_type_value, b->type_shadowed);
2499     }
2500   else
2501     {
2502       tree binding = binding_for_name (id, current_namespace);
2503       BINDING_TYPE (binding) = type;
2504       /* Store marker instead of real type. */
2505       type = global_type_node;
2506     }
2507   SET_IDENTIFIER_TYPE_VALUE (id, type);
2508 }
2509
2510 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2511
2512 void
2513 set_identifier_type_value (id, type)
2514      tree id;
2515      tree type;
2516 {
2517   set_identifier_type_value_with_scope (id, type, current_binding_level);
2518 }
2519
2520 /* Return the type associated with id. */
2521
2522 tree
2523 identifier_type_value (id)
2524      tree id;
2525 {
2526   /* There is no type with that name, anywhere. */
2527   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2528     return NULL_TREE;
2529   /* This is not the type marker, but the real thing. */
2530   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2531     return REAL_IDENTIFIER_TYPE_VALUE (id);
2532   /* Have to search for it. It must be on the global level, now.
2533      Ask lookup_name not to return non-types. */
2534   id = lookup_name_real (id, 2, 1, 0);
2535   if (id)
2536     return TREE_TYPE (id);
2537   return NULL_TREE;
2538 }
2539
2540 /* Pop off extraneous binding levels left over due to syntax errors.
2541
2542    We don't pop past namespaces, as they might be valid.  */
2543
2544 void
2545 pop_everything ()
2546 {
2547 #ifdef DEBUG_CP_BINDING_LEVELS
2548   fprintf (stderr, "XXX entering pop_everything ()\n");
2549 #endif
2550   while (!toplevel_bindings_p ())
2551     {
2552       if (current_binding_level->parm_flag == 2)
2553         pop_nested_class ();
2554       else
2555         poplevel (0, 0, 0);
2556     }
2557 #ifdef DEBUG_CP_BINDING_LEVELS
2558   fprintf (stderr, "XXX leaving pop_everything ()\n");
2559 #endif
2560 }
2561
2562 /* The type TYPE is being declared.  If it is a class template, or a
2563    specialization of a class template, do any processing required and
2564    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2565    being declared a friend.  B is the binding level at which this TYPE
2566    should be bound.
2567
2568    Returns the TYPE_DECL for TYPE, which may have been altered by this
2569    processing.  */
2570
2571 static tree 
2572 maybe_process_template_type_declaration (type, globalize, b)
2573      tree type;
2574      int globalize;
2575      struct binding_level* b;
2576 {
2577   tree decl = TYPE_NAME (type);
2578  
2579   if (processing_template_parmlist)
2580     /* You can't declare a new template type in a template parameter
2581        list.  But, you can declare a non-template type:
2582        
2583          template <class A*> struct S;
2584        
2585        is a forward-declaration of `A'.  */
2586     ;
2587   else 
2588     {
2589       maybe_check_template_type (type);
2590
2591       my_friendly_assert (IS_AGGR_TYPE (type) 
2592                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2593                           
2594                           
2595       if (processing_template_decl)
2596         {
2597           /* This may change after the call to
2598              push_template_decl_real, but we want the original value.  */
2599           tree name = DECL_NAME (decl);
2600
2601           decl = push_template_decl_real (decl, globalize);
2602           /* If the current binding level is the binding level for the
2603              template parameters (see the comment in
2604              begin_template_parm_list) and the enclosing level is a class
2605              scope, and we're not looking at a friend, push the
2606              declaration of the member class into the class scope.  In the
2607              friend case, push_template_decl will already have put the
2608              friend into global scope, if appropriate.  */
2609           if (TREE_CODE (type) != ENUMERAL_TYPE
2610               && !globalize && b->pseudo_global
2611               && b->level_chain->parm_flag == 2)
2612             {
2613               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2614               /* Put this tag on the list of tags for the class, since
2615                  that won't happen below because B is not the class
2616                  binding level, but is instead the pseudo-global level.  */
2617               b->level_chain->tags = 
2618                 tree_cons (name, type, b->level_chain->tags);
2619               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2620                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2621             }
2622         }
2623     }
2624
2625   return decl;
2626 }
2627
2628 /* In C++, you don't have to write `struct S' to refer to `S'; you
2629    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2630    if the user had written `typedef struct S S'.  Create and return
2631    the TYPE_DECL for TYPE.  */
2632
2633 tree
2634 create_implicit_typedef (name, type)
2635      tree name;
2636      tree type;
2637 {
2638   tree decl;
2639
2640   decl = build_decl (TYPE_DECL, name, type);
2641   SET_DECL_ARTIFICIAL (decl);
2642   /* There are other implicit type declarations, like the one *within*
2643      a class that allows you to write `S::S'.  We must distinguish
2644      amongst these.  */
2645   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2646   TYPE_NAME (type) = decl;
2647
2648   return decl;
2649 }
2650
2651 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2652    Normally put it into the inner-most non-tag-transparent scope,
2653    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2654    The latter is needed for implicit declarations.  */
2655
2656 void
2657 pushtag (name, type, globalize)
2658      tree name, type;
2659      int globalize;
2660 {
2661   register struct binding_level *b;
2662
2663   b = current_binding_level;
2664   while (b->tag_transparent
2665          || (globalize && b->parm_flag == 2))
2666     b = b->level_chain;
2667
2668   b->tags = tree_cons (name, type, b->tags);
2669
2670   if (name)
2671     {
2672       /* Do C++ gratuitous typedefing.  */
2673       if (IDENTIFIER_TYPE_VALUE (name) != type)
2674         {
2675           register tree d = NULL_TREE;
2676           int in_class = 0;
2677           tree context = TYPE_CONTEXT (type);
2678
2679           if (! context)
2680             {
2681               tree cs = current_scope ();
2682
2683               if (! globalize)
2684                 context = cs;
2685               else if (cs != NULL_TREE 
2686                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2687                 /* When declaring a friend class of a local class, we want
2688                    to inject the newly named class into the scope
2689                    containing the local class, not the namespace scope.  */
2690                 context = hack_decl_function_context (get_type_decl (cs));
2691             }
2692           if (!context)
2693             context = current_namespace;
2694
2695           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2696               || b->parm_flag == 2)
2697             in_class = 1;
2698
2699           if (current_lang_name == lang_name_java)
2700             TYPE_FOR_JAVA (type) = 1;
2701
2702           d = create_implicit_typedef (name, type);
2703           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2704           if (! in_class)
2705             set_identifier_type_value_with_scope (name, type, b);
2706
2707           d = maybe_process_template_type_declaration (type,
2708                                                        globalize, b);
2709
2710           if (b->parm_flag == 2)
2711             {
2712               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2713                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2714                    class.  But if it's a member template class, we
2715                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2716                    is done later.  */
2717                 finish_member_declaration (d);
2718               else
2719                 pushdecl_class_level (d);
2720             }
2721           else
2722             d = pushdecl_with_scope (d, b);
2723
2724           if (ANON_AGGRNAME_P (name))
2725             DECL_IGNORED_P (d) = 1;
2726
2727           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2728           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2729           if (!uses_template_parms (type))
2730             DECL_ASSEMBLER_NAME (d)
2731               = get_identifier (build_overload_name (type, 1, 1));
2732         }
2733       if (b->parm_flag == 2)
2734         {
2735           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2736             CLASSTYPE_TAGS (current_class_type) = b->tags;
2737         }
2738     }
2739
2740   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2741     /* Use the canonical TYPE_DECL for this node.  */
2742     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2743   else
2744     {
2745       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2746          will be the tagged type we just added to the current
2747          binding level.  This fake NULL-named TYPE_DECL node helps
2748          dwarfout.c to know when it needs to output a
2749          representation of a tagged type, and it also gives us a
2750          convenient place to record the "scope start" address for
2751          the tagged type.  */
2752
2753       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2754       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2755     }
2756 }
2757
2758 /* Counter used to create anonymous type names.  */
2759
2760 static int anon_cnt = 0;
2761
2762 /* Return an IDENTIFIER which can be used as a name for
2763    anonymous structs and unions.  */
2764
2765 tree
2766 make_anon_name ()
2767 {
2768   char buf[32];
2769
2770   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2771   return get_identifier (buf);
2772 }
2773
2774 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2775    This keeps dbxout from getting confused.  */
2776
2777 void
2778 clear_anon_tags ()
2779 {
2780   register struct binding_level *b;
2781   register tree tags;
2782   static int last_cnt = 0;
2783
2784   /* Fast out if no new anon names were declared.  */
2785   if (last_cnt == anon_cnt)
2786     return;
2787
2788   b = current_binding_level;
2789   while (b->tag_transparent)
2790     b = b->level_chain;
2791   tags = b->tags;
2792   while (tags)
2793     {
2794       /* A NULL purpose means we have already processed all tags
2795          from here to the end of the list.  */
2796       if (TREE_PURPOSE (tags) == NULL_TREE)
2797         break;
2798       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2799         TREE_PURPOSE (tags) = NULL_TREE;
2800       tags = TREE_CHAIN (tags);
2801     }
2802   last_cnt = anon_cnt;
2803 }
2804 \f
2805 /* Subroutine of duplicate_decls: return truthvalue of whether
2806    or not types of these decls match.
2807
2808    For C++, we must compare the parameter list so that `int' can match
2809    `int&' in a parameter position, but `int&' is not confused with
2810    `const int&'.  */
2811
2812 int
2813 decls_match (newdecl, olddecl)
2814      tree newdecl, olddecl;
2815 {
2816   int types_match;
2817
2818   if (newdecl == olddecl)
2819     return 1;
2820
2821   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2822     /* If the two DECLs are not even the same kind of thing, we're not
2823        interested in their types.  */
2824     return 0;
2825
2826   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2827     {
2828       tree f1 = TREE_TYPE (newdecl);
2829       tree f2 = TREE_TYPE (olddecl);
2830       tree p1 = TYPE_ARG_TYPES (f1);
2831       tree p2 = TYPE_ARG_TYPES (f2);
2832
2833       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2834           && ! (DECL_LANGUAGE (newdecl) == lang_c
2835                 && DECL_LANGUAGE (olddecl) == lang_c))
2836         return 0;
2837
2838       /* When we parse a static member function definition,
2839          we put together a FUNCTION_DECL which thinks its type
2840          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2841          proceed.  */
2842       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2843         revert_static_member_fn (&newdecl, &f1, &p1);
2844       else if (TREE_CODE (f2) == METHOD_TYPE
2845                && DECL_STATIC_FUNCTION_P (newdecl))
2846         revert_static_member_fn (&olddecl, &f2, &p2);
2847
2848       /* Here we must take care of the case where new default
2849          parameters are specified.  Also, warn if an old
2850          declaration becomes ambiguous because default
2851          parameters may cause the two to be ambiguous.  */
2852       if (TREE_CODE (f1) != TREE_CODE (f2))
2853         {
2854           if (TREE_CODE (f1) == OFFSET_TYPE)
2855             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2856           else
2857             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2858           return 0;
2859         }
2860
2861       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2862         {
2863           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2864               && p2 == NULL_TREE)
2865             {
2866               types_match = self_promoting_args_p (p1);
2867               if (p1 == void_list_node)
2868                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2869             }
2870           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2871                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2872             {
2873               types_match = self_promoting_args_p (p2);
2874               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2875             }
2876           else
2877             types_match = compparms (p1, p2);
2878         }
2879       else
2880         types_match = 0;
2881     }
2882   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2883     {
2884       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2885                                 DECL_TEMPLATE_PARMS (olddecl)))
2886         return 0;
2887       
2888       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2889         types_match = 1;
2890       else
2891         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2892                                    DECL_TEMPLATE_RESULT (newdecl));
2893     }
2894   else
2895     {
2896       if (TREE_TYPE (newdecl) == error_mark_node)
2897         types_match = TREE_TYPE (olddecl) == error_mark_node;
2898       else if (TREE_TYPE (olddecl) == NULL_TREE)
2899         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2900       else if (TREE_TYPE (newdecl) == NULL_TREE)
2901         types_match = 0;
2902       else
2903         types_match = comptypes (TREE_TYPE (newdecl),
2904                                  TREE_TYPE (olddecl),
2905                                  COMPARE_REDECLARATION);
2906     }
2907
2908   return types_match;
2909 }
2910
2911 /* If NEWDECL is `static' and an `extern' was seen previously,
2912    warn about it.  OLDDECL is the previous declaration.
2913
2914    Note that this does not apply to the C++ case of declaring
2915    a variable `extern const' and then later `const'.
2916
2917    Don't complain about built-in functions, since they are beyond
2918    the user's control.  */
2919
2920 static void
2921 warn_extern_redeclared_static (newdecl, olddecl)
2922      tree newdecl, olddecl;
2923 {
2924   static const char *explicit_extern_static_warning
2925     = "`%D' was declared `extern' and later `static'";
2926   static const char *implicit_extern_static_warning
2927     = "`%D' was declared implicitly `extern' and later `static'";
2928
2929   tree name;
2930
2931   if (TREE_CODE (newdecl) == TYPE_DECL)
2932     return;
2933   
2934   /* Don't get confused by static member functions; that's a different
2935      use of `static'.  */
2936   if (TREE_CODE (newdecl) == FUNCTION_DECL
2937       && DECL_STATIC_FUNCTION_P (newdecl))
2938     return;
2939
2940   /* If the old declaration was `static', or the new one isn't, then
2941      then everything is OK.  */
2942   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2943     return;
2944
2945   /* It's OK to declare a builtin function as `static'.  */
2946   if (TREE_CODE (olddecl) == FUNCTION_DECL
2947       && DECL_ARTIFICIAL (olddecl))
2948     return;
2949
2950   name = DECL_ASSEMBLER_NAME (newdecl);
2951   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2952               ? implicit_extern_static_warning
2953               : explicit_extern_static_warning, newdecl);
2954   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2955 }
2956
2957 /* Handle when a new declaration NEWDECL has the same name as an old
2958    one OLDDECL in the same binding contour.  Prints an error message
2959    if appropriate.
2960
2961    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2962    Otherwise, return 0.  */
2963
2964 int
2965 duplicate_decls (newdecl, olddecl)
2966      tree newdecl, olddecl;
2967 {
2968   unsigned olddecl_uid = DECL_UID (olddecl);
2969   int olddecl_friend = 0, types_match = 0;
2970   int new_defines_function = 0;
2971
2972   if (newdecl == olddecl)
2973     return 1;
2974
2975   types_match = decls_match (newdecl, olddecl);
2976
2977   /* If either the type of the new decl or the type of the old decl is an
2978      error_mark_node, then that implies that we have already issued an
2979      error (earlier) for some bogus type specification, and in that case,
2980      it is rather pointless to harass the user with yet more error message
2981      about the same declaration, so just pretend the types match here.  */
2982   if (TREE_TYPE (newdecl) == error_mark_node
2983       || TREE_TYPE (olddecl) == error_mark_node)
2984     types_match = 1;
2985  
2986   /* Check for redeclaration and other discrepancies. */
2987   if (TREE_CODE (olddecl) == FUNCTION_DECL
2988       && DECL_ARTIFICIAL (olddecl))
2989     {
2990       if (TREE_CODE (newdecl) != FUNCTION_DECL)
2991         {
2992           /* If you declare a built-in or predefined function name as static,
2993              the old definition is overridden, but optionally warn this was a
2994              bad choice of name.  */
2995           if (! TREE_PUBLIC (newdecl))
2996             {
2997               if (warn_shadow)
2998                 cp_warning ("shadowing %s function `%#D'",
2999                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3000                             olddecl);
3001               /* Discard the old built-in function.  */
3002               return 0;
3003             }
3004           /* If the built-in is not ansi, then programs can override
3005              it even globally without an error.  */
3006           else if (! DECL_BUILT_IN (olddecl))
3007             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3008                         olddecl, newdecl);
3009           else
3010             {
3011               cp_error ("declaration of `%#D'", newdecl);
3012               cp_error ("conflicts with built-in declaration `%#D'",
3013                         olddecl);
3014             }
3015           return 0;
3016         }
3017       else if (!types_match)
3018         {
3019           if ((DECL_LANGUAGE (newdecl) == lang_c
3020                && DECL_LANGUAGE (olddecl) == lang_c)
3021               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3022                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3023             {
3024               /* A near match; override the builtin.  */
3025
3026               if (TREE_PUBLIC (newdecl))
3027                 {
3028                   cp_warning ("new declaration `%#D'", newdecl);
3029                   cp_warning ("ambiguates built-in declaration `%#D'",
3030                               olddecl);
3031                 }
3032               else if (warn_shadow)
3033                 cp_warning ("shadowing %s function `%#D'",
3034                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3035                             olddecl);
3036             }
3037           else
3038             /* Discard the old built-in function.  */
3039             return 0;
3040         }
3041       
3042       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3043         {
3044           /* If a builtin function is redeclared as `static', merge
3045              the declarations, but make the original one static.  */
3046           DECL_THIS_STATIC (olddecl) = 1;
3047           TREE_PUBLIC (olddecl) = 0;
3048
3049           /* Make the olddeclaration consistent with the new one so that
3050              all remnants of the builtin-ness of this function will be
3051              banished.  */
3052           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3053           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3054           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3055           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3056                                        newdecl);
3057         }
3058     }
3059   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3060     {
3061       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3062            && TREE_CODE (newdecl) != TYPE_DECL
3063            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3064                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3065           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3066               && TREE_CODE (olddecl) != TYPE_DECL
3067               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3068                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3069                         == TYPE_DECL))))
3070         {
3071           /* We do nothing special here, because C++ does such nasty
3072              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3073              get shadowed, and know that if we need to find a TYPE_DECL
3074              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3075              slot of the identifier.  */
3076           return 0;
3077         }
3078
3079       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3080            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3081           || (TREE_CODE (olddecl) == FUNCTION_DECL
3082               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3083         return 0;
3084
3085       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3086       if (TREE_CODE (olddecl) == TREE_LIST)
3087         olddecl = TREE_VALUE (olddecl);
3088       cp_error_at ("previous declaration of `%#D'", olddecl);
3089
3090       /* New decl is completely inconsistent with the old one =>
3091          tell caller to replace the old one.  */
3092
3093       return 0;
3094     }
3095   else if (!types_match)
3096     {
3097       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3098         /* These are certainly not duplicate declarations; they're
3099            from different scopes.  */
3100         return 0;
3101
3102       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3103         {
3104           /* The name of a class template may not be declared to refer to
3105              any other template, class, function, object, namespace, value,
3106              or type in the same scope.  */
3107           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3108               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3109             {
3110               cp_error ("declaration of template `%#D'", newdecl);
3111               cp_error_at ("conflicts with previous declaration `%#D'",
3112                            olddecl);
3113             }
3114           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3115                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3116                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3117                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3118                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3119                                            DECL_TEMPLATE_PARMS (olddecl)))
3120             {
3121               cp_error ("new declaration `%#D'", newdecl);
3122               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3123             }
3124           return 0;
3125         }
3126       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3127         {
3128           if (DECL_LANGUAGE (newdecl) == lang_c
3129               && DECL_LANGUAGE (olddecl) == lang_c)
3130             {
3131               cp_error ("declaration of C function `%#D' conflicts with",
3132                         newdecl);
3133               cp_error_at ("previous declaration `%#D' here", olddecl);
3134             }
3135           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3136                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3137             {
3138               cp_error ("new declaration `%#D'", newdecl);
3139               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3140             }
3141           else
3142             return 0;
3143         }
3144
3145       /* Already complained about this, so don't do so again.  */
3146       else if (current_class_type == NULL_TREE
3147           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3148         {
3149           cp_error ("conflicting types for `%#D'", newdecl);
3150           cp_error_at ("previous declaration as `%#D'", olddecl);
3151         }
3152     }
3153   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3154             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3155                  && (!DECL_TEMPLATE_INFO (newdecl)
3156                      || (DECL_TI_TEMPLATE (newdecl) 
3157                          != DECL_TI_TEMPLATE (olddecl))))
3158                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3159                     && (!DECL_TEMPLATE_INFO (olddecl)
3160                         || (DECL_TI_TEMPLATE (olddecl) 
3161                             != DECL_TI_TEMPLATE (newdecl))))))
3162     /* It's OK to have a template specialization and a non-template
3163        with the same type, or to have specializations of two
3164        different templates with the same type.  Note that if one is a
3165        specialization, and the other is an instantiation of the same
3166        template, that we do not exit at this point.  That situation
3167        can occur if we instantiate a template class, and then
3168        specialize one of its methods.  This situation is legal, but
3169        the declarations must be merged in the usual way.  */
3170     return 0;
3171   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3172            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3173                 && !DECL_USE_TEMPLATE (newdecl))
3174                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3175                    && !DECL_USE_TEMPLATE (olddecl))))
3176     /* One of the declarations is a template instantiation, and the
3177        other is not a template at all.  That's OK.  */
3178     return 0;
3179   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3180            && DECL_NAMESPACE_ALIAS (newdecl)
3181            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3182     /* Redeclaration of namespace alias, ignore it. */
3183     return 1;
3184   else
3185     {
3186       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3187       if (errmsg)
3188         {
3189           cp_error (errmsg, newdecl);
3190           if (DECL_NAME (olddecl) != NULL_TREE)
3191             cp_error_at ((DECL_INITIAL (olddecl)
3192                           && namespace_bindings_p ())
3193                          ? "`%#D' previously defined here"
3194                          : "`%#D' previously declared here", olddecl);
3195         }
3196       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3197                && DECL_INITIAL (olddecl) != NULL_TREE
3198                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3199                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3200         {
3201           /* Prototype decl follows defn w/o prototype.  */
3202           cp_warning_at ("prototype for `%#D'", newdecl);
3203           cp_warning_at ("follows non-prototype definition here", olddecl);
3204         }
3205       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3206                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3207         {
3208           /* extern "C" int foo ();
3209              int foo () { bar (); }
3210              is OK.  */
3211           if (current_lang_stack
3212               == &VARRAY_TREE (current_lang_base, 0))
3213             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3214           else
3215             {
3216               cp_error_at ("previous declaration of `%#D' with %L linkage",
3217                            olddecl, DECL_LANGUAGE (olddecl));
3218               cp_error ("conflicts with new declaration with %L linkage",
3219                         DECL_LANGUAGE (newdecl));
3220             }
3221         }
3222
3223       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3224         ;
3225       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3226         {
3227           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3228           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3229           int i = 1;
3230
3231           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3232             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3233         
3234           for (; t1 && t1 != void_list_node;
3235                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3236             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3237               {
3238                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3239                                            TREE_PURPOSE (t2)))
3240                   {
3241                     if (pedantic)
3242                       {
3243                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3244                                     i, newdecl);
3245                         cp_pedwarn_at ("after previous specification in `%#D'",
3246                                        olddecl);
3247                       }
3248                   }
3249                 else
3250                   {
3251                     cp_error ("default argument given for parameter %d of `%#D'",
3252                               i, newdecl);
3253                     cp_error_at ("after previous specification in `%#D'",
3254                                  olddecl);
3255                   }
3256               }
3257
3258           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3259               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3260             {
3261               cp_warning ("`%#D' was used before it was declared inline",
3262                           newdecl);
3263               cp_warning_at ("previous non-inline declaration here",
3264                              olddecl);
3265             }
3266         }
3267     }
3268
3269   /* If new decl is `static' and an `extern' was seen previously,
3270      warn about it.  */
3271   warn_extern_redeclared_static (newdecl, olddecl);
3272
3273   /* We have committed to returning 1 at this point.  */
3274   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3275     {
3276       /* Now that functions must hold information normally held
3277          by field decls, there is extra work to do so that
3278          declaration information does not get destroyed during
3279          definition.  */
3280       if (DECL_VINDEX (olddecl))
3281         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3282       if (DECL_CONTEXT (olddecl))
3283         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3284       if (DECL_CLASS_CONTEXT (olddecl))
3285         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3286       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3287         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3288       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3289       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3290       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3291       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3292       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3293       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3294       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3295       
3296       /* Optionally warn about more than one declaration for the same
3297          name, but don't warn about a function declaration followed by a
3298          definition.  */
3299       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3300           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3301           /* Don't warn about extern decl followed by definition. */
3302           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3303           /* Don't warn about friends, let add_friend take care of it. */
3304           && ! DECL_FRIEND_P (newdecl))
3305         {
3306           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3307           cp_warning_at ("previous declaration of `%D'", olddecl);
3308         }
3309     }
3310
3311   /* Deal with C++: must preserve virtual function table size.  */
3312   if (TREE_CODE (olddecl) == TYPE_DECL)
3313     {
3314       register tree newtype = TREE_TYPE (newdecl);
3315       register tree oldtype = TREE_TYPE (olddecl);
3316
3317       if (newtype != error_mark_node && oldtype != error_mark_node
3318           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3319         {
3320           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3321           CLASSTYPE_FRIEND_CLASSES (newtype)
3322             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3323         }
3324     }
3325
3326   /* Copy all the DECL_... slots specified in the new decl
3327      except for any that we copy here from the old type.  */
3328   DECL_MACHINE_ATTRIBUTES (newdecl) 
3329     = merge_machine_decl_attributes (olddecl, newdecl);
3330
3331   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3332     {
3333       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3334                              DECL_TEMPLATE_RESULT (olddecl)))
3335         cp_error ("invalid redeclaration of %D", newdecl);
3336       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3337       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3338         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3339                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3340  
3341       return 1;
3342     }
3343     
3344   if (types_match)
3345     {
3346       /* Automatically handles default parameters.  */
3347       tree oldtype = TREE_TYPE (olddecl);
3348       tree newtype;
3349
3350       /* Make sure we put the new type in the same obstack as the old one.  */
3351       if (oldtype)
3352         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3353       else
3354         push_permanent_obstack ();
3355
3356       /* Merge the data types specified in the two decls.  */
3357       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3358
3359       if (TREE_CODE (newdecl) == VAR_DECL)
3360         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3361       /* Do this after calling `common_type' so that default
3362          parameters don't confuse us.  */
3363       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3364           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3365               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3366         {
3367           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3368                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3369           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3370                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3371
3372           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3373               && DECL_SOURCE_LINE (olddecl) != 0
3374               && flag_exceptions
3375               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3376                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3377             {
3378               cp_error ("declaration of `%F' throws different exceptions",
3379                         newdecl);
3380               cp_error_at ("to previous declaration `%F'", olddecl);
3381             }
3382         }
3383       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3384
3385       /* Lay the type out, unless already done.  */
3386       if (! same_type_p (newtype, oldtype)
3387           && TREE_TYPE (newdecl) != error_mark_node
3388           && !(processing_template_decl && uses_template_parms (newdecl)))
3389         layout_type (TREE_TYPE (newdecl));
3390
3391       if ((TREE_CODE (newdecl) == VAR_DECL
3392            || TREE_CODE (newdecl) == PARM_DECL
3393            || TREE_CODE (newdecl) == RESULT_DECL
3394            || TREE_CODE (newdecl) == FIELD_DECL
3395            || TREE_CODE (newdecl) == TYPE_DECL)
3396           && !(processing_template_decl && uses_template_parms (newdecl)))
3397         layout_decl (newdecl, 0);
3398
3399       /* Merge the type qualifiers.  */
3400       if (TREE_READONLY (newdecl))
3401         TREE_READONLY (olddecl) = 1;
3402       if (TREE_THIS_VOLATILE (newdecl))
3403         TREE_THIS_VOLATILE (olddecl) = 1;
3404
3405       /* Merge the initialization information.  */
3406       if (DECL_INITIAL (newdecl) == NULL_TREE
3407           && DECL_INITIAL (olddecl) != NULL_TREE)
3408         {
3409           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3410           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3411           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3412           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3413               && DECL_LANG_SPECIFIC (newdecl)
3414               && DECL_LANG_SPECIFIC (olddecl))
3415             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3416         }
3417
3418       /* Merge the section attribute.
3419          We want to issue an error if the sections conflict but that must be
3420          done later in decl_attributes since we are called before attributes
3421          are assigned.  */
3422       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3423         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3424
3425       /* Keep the old rtl since we can safely use it.  */
3426       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3427
3428       pop_obstacks ();
3429     }
3430   /* If cannot merge, then use the new type and qualifiers,
3431      and don't preserve the old rtl.  */
3432   else
3433     {
3434       /* Clean out any memory we had of the old declaration.  */
3435       tree oldstatic = value_member (olddecl, static_aggregates);
3436       if (oldstatic)
3437         TREE_VALUE (oldstatic) = error_mark_node;
3438
3439       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3440       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3441       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3442       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3443     }
3444
3445   /* Merge the storage class information.  */
3446   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3447   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3448   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3449   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3450   if (! DECL_EXTERNAL (olddecl))
3451     DECL_EXTERNAL (newdecl) = 0;
3452   
3453   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3454     {
3455       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3456       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3457       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3458       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3459         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3460       /* Don't really know how much of the language-specific
3461          values we should copy from old to new.  */
3462       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3463       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3464       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3465       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3466       olddecl_friend = DECL_FRIEND_P (olddecl);
3467
3468       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3469       if (TREE_CODE (newdecl) == FUNCTION_DECL
3470           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3471         DECL_BEFRIENDING_CLASSES (newdecl)
3472           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3473                      DECL_BEFRIENDING_CLASSES (olddecl));
3474     }
3475
3476   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3477     {
3478       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3479           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3480         {
3481           /* If newdecl is not a specialization, then it is not a
3482              template-related function at all.  And that means that we
3483              shoud have exited above, returning 0.  */
3484           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3485                               0);
3486
3487           if (TREE_USED (olddecl)) 
3488             /* From [temp.expl.spec]:
3489                
3490                If a template, a member template or the member of a class
3491                template is explicitly specialized then that
3492                specialization shall be declared before the first use of
3493                that specialization that would cause an implicit
3494                instantiation to take place, in every translation unit in
3495                which such a use occurs.  */
3496             cp_error ("explicit specialization of %D after first use", 
3497                       olddecl);
3498
3499           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3500         }
3501       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3502
3503       /* If either decl says `inline', this fn is inline, unless its
3504          definition was passed already.  */
3505       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3506         DECL_INLINE (olddecl) = 1;
3507       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3508
3509       if (! types_match)
3510         {
3511           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3512           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3513           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3514         }
3515       if (! types_match || new_defines_function)
3516         {
3517           /* These need to be copied so that the names are available.
3518              Note that if the types do match, we'll preserve inline
3519              info and other bits, but if not, we won't.  */
3520           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3521           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3522         }
3523       if (new_defines_function)
3524         /* If defining a function declared with other language
3525            linkage, use the previously declared language linkage.  */
3526         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3527       else if (types_match)
3528         {
3529           /* If redeclaring a builtin function, and not a definition,
3530              it stays built in.  */
3531           if (DECL_BUILT_IN (olddecl))
3532             {
3533               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3534               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3535               /* If we're keeping the built-in definition, keep the rtl,
3536                  regardless of declaration matches.  */
3537               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3538             }
3539           else
3540             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3541
3542           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3543           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3544             /* Previously saved insns go together with
3545                the function's previous definition.  */
3546             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3547           /* Don't clear out the arguments if we're redefining a function.  */
3548           if (DECL_ARGUMENTS (olddecl))
3549             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3550         }
3551       if (DECL_LANG_SPECIFIC (olddecl))
3552         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3553     }
3554
3555   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3556     {
3557       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3558     }
3559
3560   /* Now preserve various other info from the definition.  */
3561   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3562   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3563   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3564   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3565
3566   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3567     {
3568       int function_size;
3569
3570       function_size = sizeof (struct tree_decl);
3571
3572       bcopy ((char *) newdecl + sizeof (struct tree_common),
3573              (char *) olddecl + sizeof (struct tree_common),
3574              function_size - sizeof (struct tree_common));
3575
3576       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3577         {
3578           /* If newdecl is a template instantiation, it is possible that
3579              the following sequence of events has occurred:
3580
3581              o A friend function was declared in a class template.  The
3582              class template was instantiated.  
3583
3584              o The instantiation of the friend declaration was 
3585              recorded on the instantiation list, and is newdecl.  
3586
3587              o Later, however, instantiate_class_template called pushdecl
3588              on the newdecl to perform name injection.  But, pushdecl in
3589              turn called duplicate_decls when it discovered that another
3590              declaration of a global function with the same name already
3591              existed. 
3592
3593              o Here, in duplicate_decls, we decided to clobber newdecl.
3594
3595              If we're going to do that, we'd better make sure that
3596              olddecl, and not newdecl, is on the list of
3597              instantiations so that if we try to do the instantiation
3598              again we won't get the clobbered declaration.  */
3599
3600           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3601           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3602
3603           for (; decls; decls = TREE_CHAIN (decls))
3604             if (TREE_VALUE (decls) == newdecl)
3605               TREE_VALUE (decls) = olddecl;
3606         }
3607     }
3608   else
3609     {
3610       bcopy ((char *) newdecl + sizeof (struct tree_common),
3611              (char *) olddecl + sizeof (struct tree_common),
3612              sizeof (struct tree_decl) - sizeof (struct tree_common)
3613              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3614     }
3615
3616   DECL_UID (olddecl) = olddecl_uid;
3617   if (olddecl_friend)
3618     DECL_FRIEND_P (olddecl) = 1;
3619
3620   /* NEWDECL contains the merged attribute lists.
3621      Update OLDDECL to be the same.  */
3622   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3623
3624   return 1;
3625 }
3626
3627 /* Record a decl-node X as belonging to the current lexical scope.
3628    Check for errors (such as an incompatible declaration for the same
3629    name already seen in the same scope).
3630
3631    Returns either X or an old decl for the same name.
3632    If an old decl is returned, it may have been smashed
3633    to agree with what X says.  */
3634
3635 tree
3636 pushdecl (x)
3637      tree x;
3638 {
3639   register tree t;
3640   register tree name;
3641   int need_new_binding;
3642
3643   /* We shouldn't be calling pushdecl when we're generating RTL for a
3644      function that we already did semantic analysis on previously.  */
3645   my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3646                       19990913);
3647
3648   name = DECL_ASSEMBLER_NAME (x);
3649   need_new_binding = 1;
3650
3651   if (DECL_TEMPLATE_PARM_P (x))
3652     /* Template parameters have no context; they are not X::T even
3653        when declared within a class or namespace.  */
3654     ;
3655   else
3656     {
3657       if (current_function_decl && x != current_function_decl
3658           /* A local declaration for a function doesn't constitute
3659              nesting.  */
3660           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3661           /* A local declaration for an `extern' variable is in the
3662              scoped of the current namespace, not the current
3663              function.  */
3664           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3665           /* Don't change DECL_CONTEXT of virtual methods.  */
3666           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3667           && !DECL_CONTEXT (x))
3668         DECL_CONTEXT (x) = current_function_decl;
3669       if (!DECL_CONTEXT (x))
3670         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3671     }
3672
3673   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3674      compiler wants to use.  */
3675   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3676       || TREE_CODE (x) == NAMESPACE_DECL)
3677     name = DECL_NAME (x);
3678
3679   if (name)
3680     {
3681 #if 0
3682       /* Not needed...see below.  */
3683       char *file;
3684       int line;
3685 #endif
3686       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3687         name = TREE_OPERAND (name, 0);
3688       
3689       /* Namespace-scoped variables are not found in the current level. */
3690       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3691         t = namespace_binding (name, DECL_CONTEXT (x));
3692       else
3693         t = lookup_name_current_level (name);
3694       if (t == error_mark_node)
3695         {
3696           /* error_mark_node is 0 for a while during initialization!  */
3697           t = NULL_TREE;
3698           cp_error_at ("`%#D' used prior to declaration", x);
3699         }
3700
3701       else if (t != NULL_TREE)
3702         {
3703 #if 0
3704           /* This is turned off until I have time to do it right (bpk).  */
3705           /* With the code below that uses it...  */
3706           file = DECL_SOURCE_FILE (t);
3707           line = DECL_SOURCE_LINE (t);
3708 #endif
3709           if (TREE_CODE (t) == PARM_DECL)
3710             {
3711               if (DECL_CONTEXT (t) == NULL_TREE)
3712                 fatal ("parse errors have confused me too much");
3713
3714               /* Check for duplicate params.  */
3715               if (duplicate_decls (x, t))
3716                 return t;
3717             }
3718           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3719                     || DECL_FUNCTION_TEMPLATE_P (x))
3720                    && is_overloaded_fn (t))
3721             /* Don't do anything just yet. */;
3722           else if (t == wchar_decl_node)
3723             {
3724               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3725                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3726
3727               /* Throw away the redeclaration.  */
3728               return t;
3729             }
3730           else if (TREE_CODE (t) != TREE_CODE (x))
3731             {
3732               if (duplicate_decls (x, t))
3733                 return t;
3734             }
3735           else if (duplicate_decls (x, t))
3736             {
3737 #if 0
3738               /* This is turned off until I have time to do it right (bpk).  */
3739
3740               /* Also warn if they did a prototype with `static' on it, but
3741                  then later left the `static' off.  */
3742               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3743                 {
3744                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3745                     return t;
3746
3747                   if (extra_warnings)
3748                     {
3749                       cp_warning ("`static' missing from declaration of `%D'",
3750                                   t);
3751                       warning_with_file_and_line (file, line,
3752                                                   "previous declaration of `%s'",
3753                                                   decl_as_string (t, 0));
3754                     }
3755
3756                   /* Now fix things so it'll do what they expect.  */
3757                   if (current_function_decl)
3758                     TREE_PUBLIC (current_function_decl) = 0;
3759                 }
3760               /* Due to interference in memory reclamation (X may be
3761                  obstack-deallocated at this point), we must guard against
3762                  one really special case.  [jason: This should be handled
3763                  by start_function]  */
3764               if (current_function_decl == x)
3765                 current_function_decl = t;
3766 #endif
3767               if (TREE_CODE (t) == TYPE_DECL)
3768                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3769               else if (TREE_CODE (t) == FUNCTION_DECL)
3770                 check_default_args (t);
3771
3772               return t;
3773             }
3774           else if (DECL_MAIN_P (x))
3775             {
3776               /* A redeclaration of main, but not a duplicate of the
3777                  previous one. 
3778
3779                  [basic.start.main]
3780
3781                  This function shall not be overloaded.  */
3782               cp_error_at ("invalid redeclaration of `%D'", t);
3783               cp_error ("as `%D'", x);
3784               /* We don't try to push this declaration since that
3785                  causes a crash.  */
3786               return x;
3787             }
3788         }
3789
3790       check_template_shadow (x);
3791
3792       /* If this is a function conjured up by the backend, massage it
3793          so it looks friendly.  */
3794       if (TREE_CODE (x) == FUNCTION_DECL
3795           && ! DECL_LANG_SPECIFIC (x))
3796         {
3797           retrofit_lang_decl (x);
3798           DECL_LANGUAGE (x) = lang_c;
3799         }
3800
3801       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3802         {
3803           t = push_overloaded_decl (x, PUSH_LOCAL);
3804           if (t != x)
3805             return t;
3806           if (!namespace_bindings_p ())
3807             /* We do not need to create a binding for this name;
3808                push_overloaded_decl will have already done so if
3809                necessary.  */
3810             need_new_binding = 0;
3811         }
3812       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3813         {
3814           t = push_overloaded_decl (x, PUSH_GLOBAL);
3815           if (t == x)
3816             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3817           return t;
3818         }
3819
3820       /* If declaring a type as a typedef, copy the type (unless we're
3821          at line 0), and install this TYPE_DECL as the new type's typedef
3822          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3823       if (TREE_CODE (x) == TYPE_DECL)
3824         {
3825           tree type = TREE_TYPE (x);
3826           if (DECL_SOURCE_LINE (x) == 0)
3827             {
3828               if (TYPE_NAME (type) == 0)
3829                 TYPE_NAME (type) = x;
3830             }
3831           else if (type != error_mark_node && TYPE_NAME (type) != x
3832                    /* We don't want to copy the type when all we're
3833                       doing is making a TYPE_DECL for the purposes of
3834                       inlining.  */
3835                    && (!TYPE_NAME (type) 
3836                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3837             {
3838               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3839
3840               DECL_ORIGINAL_TYPE (x) = type;
3841               type = build_type_copy (type);
3842               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3843               TYPE_NAME (type) = x;
3844               TREE_TYPE (x) = type;
3845
3846               pop_obstacks ();
3847             }
3848
3849           if (type != error_mark_node
3850               && TYPE_NAME (type)
3851               && TYPE_IDENTIFIER (type))
3852             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3853                                                   current_binding_level);
3854
3855         }
3856
3857       /* Multiple external decls of the same identifier ought to match.
3858
3859          We get warnings about inline functions where they are defined.
3860          We get warnings about other functions from push_overloaded_decl.
3861          
3862          Avoid duplicate warnings where they are used.  */
3863       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3864         {
3865           tree decl;
3866
3867           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3868               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3869                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3870             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3871           else
3872             decl = NULL_TREE;
3873
3874           if (decl
3875               /* If different sort of thing, we already gave an error.  */
3876               && TREE_CODE (decl) == TREE_CODE (x)
3877               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3878             {
3879               cp_pedwarn ("type mismatch with previous external decl", x);
3880               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3881             }
3882         }
3883
3884       /* This name is new in its binding level.
3885          Install the new declaration and return it.  */
3886       if (namespace_bindings_p ())
3887         {
3888           /* Install a global value.  */
3889
3890           /* If the first global decl has external linkage,
3891              warn if we later see static one.  */
3892           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3893             TREE_PUBLIC (name) = 1;
3894
3895           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3896                 && t != NULL_TREE)
3897               /* For an ordinary function, we create a binding from
3898                  the mangled name (i.e., NAME) to the DECL.  But, for
3899                  an `extern "C"' function, the mangled name and the
3900                  ordinary name are the same so we need not do this.  */
3901               && !(TREE_CODE (x) == FUNCTION_DECL && 
3902                    DECL_LANGUAGE (x) == lang_c))
3903             {
3904               if (TREE_CODE (x) == FUNCTION_DECL)
3905                 my_friendly_assert 
3906                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3907                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3908               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3909             }
3910
3911           /* Don't forget if the function was used via an implicit decl.  */
3912           if (IDENTIFIER_IMPLICIT_DECL (name)
3913               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3914             TREE_USED (x) = 1;
3915
3916           /* Don't forget if its address was taken in that way.  */
3917           if (IDENTIFIER_IMPLICIT_DECL (name)
3918               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3919             TREE_ADDRESSABLE (x) = 1;
3920
3921           /* Warn about mismatches against previous implicit decl.  */
3922           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3923               /* If this real decl matches the implicit, don't complain.  */
3924               && ! (TREE_CODE (x) == FUNCTION_DECL
3925                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3926             cp_warning
3927               ("`%D' was previously implicitly declared to return `int'", x);
3928
3929           /* If new decl is `static' and an `extern' was seen previously,
3930              warn about it.  */
3931           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3932             warn_extern_redeclared_static (x, t);
3933         }
3934       else
3935         {
3936           /* Here to install a non-global value.  */
3937           tree oldlocal = IDENTIFIER_VALUE (name);
3938           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3939
3940           if (need_new_binding)
3941             {
3942               push_local_binding (name, x, 0);
3943               /* Because push_local_binding will hook X on to the
3944                  current_binding_level's name list, we don't want to
3945                  do that again below.  */
3946               need_new_binding = 0;
3947             }
3948
3949           /* If this is a TYPE_DECL, push it into the type value slot.  */
3950           if (TREE_CODE (x) == TYPE_DECL)
3951             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3952                                                   current_binding_level);
3953
3954           /* Clear out any TYPE_DECL shadowed by a namespace so that
3955              we won't think this is a type.  The C struct hack doesn't
3956              go through namespaces.  */
3957           if (TREE_CODE (x) == NAMESPACE_DECL)
3958             set_identifier_type_value_with_scope (name, NULL_TREE, 
3959                                                   current_binding_level);
3960
3961           /* If this is an extern function declaration, see if we
3962              have a global definition or declaration for the function.  */
3963           if (oldlocal == NULL_TREE
3964               && DECL_EXTERNAL (x)
3965               && oldglobal != NULL_TREE
3966               && TREE_CODE (x) == FUNCTION_DECL
3967               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3968             {
3969               /* We have one.  Their types must agree.  */
3970               if (decls_match (x, oldglobal))
3971                 /* OK */;
3972               else
3973                 {
3974                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3975                   cp_warning_at ("global declaration `%#D'", oldglobal);
3976                 }
3977             }
3978           /* If we have a local external declaration,
3979              and no file-scope declaration has yet been seen,
3980              then if we later have a file-scope decl it must not be static.  */
3981           if (oldlocal == NULL_TREE
3982               && oldglobal == NULL_TREE
3983               && DECL_EXTERNAL (x)
3984               && TREE_PUBLIC (x))
3985             TREE_PUBLIC (name) = 1;
3986
3987           if (DECL_FROM_INLINE (x))
3988             /* Inline decls shadow nothing.  */;
3989
3990           /* Warn if shadowing an argument at the top level of the body.  */
3991           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3992                    && TREE_CODE (oldlocal) == PARM_DECL
3993                    /* Don't complain if it's from an enclosing function.  */
3994                    && DECL_CONTEXT (oldlocal) == current_function_decl
3995                    && TREE_CODE (x) != PARM_DECL)
3996             {
3997               /* Go to where the parms should be and see if we
3998                  find them there.  */
3999               struct binding_level *b = current_binding_level->level_chain;
4000
4001               if (cleanup_label)
4002                 b = b->level_chain;
4003
4004               /* ARM $8.3 */
4005               if (b->parm_flag == 1)
4006                 cp_error ("declaration of `%#D' shadows a parameter", name);
4007             }
4008           else if (warn_shadow && oldlocal != NULL_TREE
4009                    && current_binding_level->is_for_scope
4010                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
4011             {
4012               warning ("variable `%s' shadows local",
4013                        IDENTIFIER_POINTER (name));
4014               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4015             }              
4016           /* Maybe warn if shadowing something else.  */
4017           else if (warn_shadow && !DECL_EXTERNAL (x)
4018                    /* No shadow warnings for internally generated vars.  */
4019                    && ! DECL_ARTIFICIAL (x)
4020                    /* No shadow warnings for vars made for inlining.  */
4021                    && ! DECL_FROM_INLINE (x))
4022             {
4023               const char *warnstring = NULL;
4024
4025               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4026                 warnstring = "declaration of `%s' shadows a parameter";
4027               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4028                        && current_class_ptr
4029                        && !TREE_STATIC (name))
4030                 warnstring = "declaration of `%s' shadows a member of `this'";
4031               else if (oldlocal != NULL_TREE)
4032                 warnstring = "declaration of `%s' shadows previous local";
4033               else if (oldglobal != NULL_TREE)
4034                 /* XXX shadow warnings in outer-more namespaces */
4035                 warnstring = "declaration of `%s' shadows global declaration";
4036
4037               if (warnstring)
4038                 warning (warnstring, IDENTIFIER_POINTER (name));
4039             }
4040         }
4041
4042       if (TREE_CODE (x) == FUNCTION_DECL)
4043         check_default_args (x);
4044
4045       /* Keep count of variables in this level with incomplete type.  */
4046       if (TREE_CODE (x) == VAR_DECL
4047           && TREE_TYPE (x) != error_mark_node
4048           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4049                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4050               /* RTTI TD entries are created while defining the type_info.  */
4051               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4052                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4053         current_binding_level->incomplete 
4054           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4055     }
4056
4057   if (need_new_binding)
4058     add_decl_to_level (x, 
4059                        DECL_NAMESPACE_SCOPE_P (x)
4060                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4061                        : current_binding_level);
4062
4063   return x;
4064 }
4065
4066 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4067    caller to set DECL_CONTEXT properly.  */
4068
4069 static tree
4070 pushdecl_with_scope (x, level)
4071      tree x;
4072      struct binding_level *level;
4073 {
4074   register struct binding_level *b;
4075   tree function_decl = current_function_decl;
4076
4077   current_function_decl = NULL_TREE;
4078   if (level->parm_flag == 2)
4079     {
4080       b = class_binding_level;
4081       class_binding_level = level;
4082       pushdecl_class_level (x);
4083       class_binding_level = b;
4084     }
4085   else
4086     {
4087       b = current_binding_level;
4088       current_binding_level = level;
4089       x = pushdecl (x);
4090       current_binding_level = b;
4091     }
4092   current_function_decl = function_decl;
4093   return x;
4094 }
4095
4096 /* Like pushdecl, only it places X in the current namespace,
4097    if appropriate.  */
4098
4099 tree
4100 pushdecl_namespace_level (x)
4101      tree x;
4102 {
4103   register struct binding_level *b = current_binding_level;
4104   register tree t;
4105
4106   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4107
4108   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4109      what we want.  */
4110   if (TREE_CODE (x) == TYPE_DECL)
4111     {
4112       tree name = DECL_NAME (x);
4113       tree newval;
4114       tree *ptr = (tree *)0;
4115       for (; b != global_binding_level; b = b->level_chain)
4116         {
4117           tree shadowed = b->type_shadowed;
4118           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4119             if (TREE_PURPOSE (shadowed) == name)
4120               {
4121                 ptr = &TREE_VALUE (shadowed);
4122                 /* Can't break out of the loop here because sometimes
4123                    a binding level will have duplicate bindings for
4124                    PT names.  It's gross, but I haven't time to fix it.  */
4125               }
4126         }
4127       newval = TREE_TYPE (x);
4128       if (ptr == (tree *)0)
4129         {
4130           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4131              up here if this is changed to an assertion.  --KR  */
4132           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4133         }
4134       else
4135         {
4136           *ptr = newval;
4137         }
4138     }
4139   return t;
4140 }
4141
4142 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4143    if appropriate.  */
4144
4145 tree
4146 pushdecl_top_level (x)
4147      tree x;
4148 {
4149   push_to_top_level ();
4150   x = pushdecl_namespace_level (x);
4151   pop_from_top_level ();
4152   return x;
4153 }
4154
4155 /* Make the declaration of X appear in CLASS scope.  */
4156
4157 void
4158 pushdecl_class_level (x)
4159      tree x;
4160 {
4161   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4162      scope looks for the pre-mangled name.  */
4163   register tree name;
4164
4165   if (TREE_CODE (x) == OVERLOAD)
4166     x = OVL_CURRENT (x);
4167   name = DECL_NAME (x);
4168
4169   if (name)
4170     {
4171       push_class_level_binding (name, x);
4172       if (TREE_CODE (x) == TYPE_DECL)
4173         set_identifier_type_value (name, TREE_TYPE (x));
4174     }
4175   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4176     {
4177       tree f;
4178
4179       for (f = TYPE_FIELDS (TREE_TYPE (x));
4180            f;
4181            f = TREE_CHAIN (f))
4182         pushdecl_class_level (f);
4183     }
4184 }
4185
4186 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4187    DECL, or a modified version thereof.  */
4188
4189 tree
4190 maybe_push_decl (decl)
4191      tree decl;
4192 {
4193   tree type = TREE_TYPE (decl);
4194
4195   /* Add this decl to the current binding level, but not if it comes
4196      from another scope, e.g. a static member variable.  TEM may equal
4197      DECL or it may be a previous decl of the same name.  */
4198   if ((TREE_CODE (decl) != PARM_DECL 
4199        && DECL_CONTEXT (decl) != NULL_TREE 
4200        /* Definitions of namespace members outside their namespace are
4201           possible. */
4202        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4203       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4204       || TREE_CODE (type) == UNKNOWN_TYPE
4205       /* The declaration of a template specialization does not affect
4206          the functions available for overload resolution, so we do not
4207          call pushdecl.  */
4208       || (TREE_CODE (decl) == FUNCTION_DECL
4209           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4210     return decl;
4211   else
4212     return pushdecl (decl);
4213 }
4214
4215 #if 0
4216 /* This function is used to push the mangled decls for nested types into
4217    the appropriate scope.  Previously pushdecl_top_level was used, but that
4218    is incorrect for members of local classes.  */
4219
4220 void
4221 pushdecl_nonclass_level (x)
4222      tree x;
4223 {
4224   struct binding_level *b = current_binding_level;
4225
4226   my_friendly_assert (b->parm_flag != 2, 180);
4227
4228 #if 0
4229   /* Get out of template binding levels */
4230   while (b->pseudo_global)
4231     b = b->level_chain;
4232 #endif
4233
4234   pushdecl_with_scope (x, b);
4235 }
4236 #endif
4237
4238 /* Make the declaration(s) of X appear in CLASS scope
4239    under the name NAME.  */
4240
4241 void
4242 push_class_level_binding (name, x)
4243      tree name;
4244      tree x;
4245 {
4246   tree binding;
4247   /* The class_binding_level will be NULL if x is a template 
4248      parameter name in a member template.  */
4249   if (!class_binding_level)
4250     return;
4251
4252   /* Make sure that this new member does not have the same name
4253      as a template parameter.  */
4254   if (TYPE_BEING_DEFINED (current_class_type))
4255     check_template_shadow (x);
4256
4257   /* If this declaration shadows a declaration from an enclosing
4258      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4259      we leave this class.  Record the shadowed declaration here.  */
4260   binding = IDENTIFIER_BINDING (name);
4261   if (binding 
4262       && ((TREE_CODE (x) == OVERLOAD
4263            && BINDING_VALUE (binding)
4264            && is_overloaded_fn (BINDING_VALUE (binding)))
4265           || INHERITED_VALUE_BINDING_P (binding)))
4266     {
4267       tree shadow;
4268       tree old_decl;
4269
4270       /* If the old binding was from a base class, and was for a tag
4271          name, slide it over to make room for the new binding.  The
4272          old binding is still visible if explicitly qualified with a
4273          class-key.  */
4274       if (INHERITED_VALUE_BINDING_P (binding)
4275           && BINDING_VALUE (binding)
4276           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4277           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4278           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4279         {
4280           old_decl = BINDING_TYPE (binding);
4281           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4282           BINDING_VALUE (binding) = NULL_TREE;
4283           INHERITED_VALUE_BINDING_P (binding) = 0;
4284         }
4285       else
4286         old_decl = BINDING_VALUE (binding);
4287
4288       /* There was already a binding for X containing fewer
4289          functions than are named in X.  Find the previous
4290          declaration of X on the class-shadowed list, and update it.  */
4291       for (shadow = class_binding_level->class_shadowed;
4292            shadow;
4293            shadow = TREE_CHAIN (shadow))
4294         if (TREE_PURPOSE (shadow) == name
4295             && TREE_TYPE (shadow) == old_decl)
4296           {
4297             BINDING_VALUE (binding) = x;
4298             INHERITED_VALUE_BINDING_P (binding) = 0;
4299             TREE_TYPE (shadow) = x;
4300             return;
4301           }
4302     }
4303
4304   /* If we didn't replace an existing binding, put the binding on the
4305      stack of bindings for the identifier, and update
4306      IDENTIFIER_CLASS_VALUE.  */
4307   if (push_class_binding (name, x))
4308     {
4309       class_binding_level->class_shadowed
4310         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4311                      class_binding_level->class_shadowed);
4312       /* Record the value we are binding NAME to so that we can know
4313          what to pop later.  */
4314       TREE_TYPE (class_binding_level->class_shadowed) = x;
4315     }
4316 }
4317
4318 /* Insert another USING_DECL into the current binding level,
4319    returning this declaration. If this is a redeclaration,
4320    do nothing and return NULL_TREE.  */
4321
4322 tree
4323 push_using_decl (scope, name)
4324      tree scope;
4325      tree name;
4326 {
4327   tree decl;
4328   
4329   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4330   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4331   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4332     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4333       break;
4334   if (decl)
4335     return NULL_TREE;
4336   decl = build_lang_decl (USING_DECL, name, void_type_node);
4337   DECL_INITIAL (decl) = scope;
4338   TREE_CHAIN (decl) = current_binding_level->usings;
4339   current_binding_level->usings = decl;
4340   return decl;
4341 }
4342
4343 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4344    changed (i.e. there was already a directive), or the fresh
4345    TREE_LIST otherwise.  */
4346
4347 tree
4348 push_using_directive (used)
4349      tree used;
4350 {
4351   tree ud = current_binding_level->using_directives;
4352   tree iter, ancestor;
4353   
4354   /* Check if we already have this. */
4355   if (purpose_member (used, ud) != NULL_TREE)
4356     return NULL_TREE;
4357
4358   /* Recursively add all namespaces used. */
4359   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4360     push_using_directive (TREE_PURPOSE (iter));
4361
4362   ancestor = namespace_ancestor (current_decl_namespace (), used);
4363   ud = current_binding_level->using_directives;
4364   ud = tree_cons (used, ancestor, ud);
4365   current_binding_level->using_directives = ud;
4366   return ud;
4367 }
4368
4369 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4370    other definitions already in place.  We get around this by making
4371    the value of the identifier point to a list of all the things that
4372    want to be referenced by that name.  It is then up to the users of
4373    that name to decide what to do with that list.
4374
4375    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4376    slot.  It is dealt with the same way.
4377
4378    FLAGS is a bitwise-or of the following values:
4379      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4380                  namespace scope.
4381      PUSH_USING: DECL is being pushed as the result of a using
4382                  declaration. 
4383
4384    The value returned may be a previous declaration if we guessed wrong
4385    about what language DECL should belong to (C or C++).  Otherwise,
4386    it's always DECL (and never something that's not a _DECL).  */
4387
4388 tree
4389 push_overloaded_decl (decl, flags)
4390      tree decl;
4391      int flags;
4392 {
4393   tree name = DECL_NAME (decl);
4394   tree old;
4395   tree new_binding;
4396   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4397
4398   if (doing_global)
4399     old = namespace_binding (name, DECL_CONTEXT (decl));
4400   else
4401     old = lookup_name_current_level (name);
4402
4403   if (old)
4404     {
4405       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4406         {
4407           tree t = TREE_TYPE (old);
4408           if (IS_AGGR_TYPE (t) && warn_shadow
4409               && (! DECL_IN_SYSTEM_HEADER (decl)
4410                   || ! DECL_IN_SYSTEM_HEADER (old)))
4411             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4412           old = NULL_TREE;
4413         }
4414       else if (is_overloaded_fn (old))
4415         {
4416           tree tmp;
4417           
4418           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4419             {
4420               tree fn = OVL_CURRENT (tmp);
4421
4422               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4423                   && !(flags & PUSH_USING)
4424                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4425                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4426                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4427                           decl, fn);
4428               
4429               if (duplicate_decls (decl, fn))
4430                 return fn;
4431             }
4432         }
4433       else
4434         {
4435           cp_error_at ("previous non-function declaration `%#D'", old);
4436           cp_error ("conflicts with function declaration `%#D'", decl);
4437           return decl;
4438         }
4439     }
4440
4441   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4442     {
4443       if (old && TREE_CODE (old) != OVERLOAD)
4444         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4445       else
4446         new_binding = ovl_cons (decl, old);
4447       if (flags & PUSH_USING)
4448         OVL_USED (new_binding) = 1;
4449     }
4450   else
4451     /* NAME is not ambiguous.  */
4452     new_binding = decl;
4453
4454   if (doing_global)
4455     set_namespace_binding (name, current_namespace, new_binding);
4456   else
4457     {
4458       /* We only create an OVERLOAD if there was a previous binding at
4459          this level, or if decl is a template. In the former case, we
4460          need to remove the old binding and replace it with the new
4461          binding.  We must also run through the NAMES on the binding
4462          level where the name was bound to update the chain.  */
4463
4464       if (TREE_CODE (new_binding) == OVERLOAD && old)
4465         {
4466           tree *d;
4467           
4468           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4469                *d;
4470                d = &TREE_CHAIN (*d))
4471             if (*d == old
4472                 || (TREE_CODE (*d) == TREE_LIST
4473                     && TREE_VALUE (*d) == old))
4474               {
4475                 if (TREE_CODE (*d) == TREE_LIST)
4476                   /* Just replace the old binding with the new.  */
4477                   TREE_VALUE (*d) = new_binding;
4478                 else
4479                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4480                   *d = tree_cons (NULL_TREE, new_binding, 
4481                                   TREE_CHAIN (*d));
4482
4483                 /* And update the CPLUS_BINDING node.  */
4484                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4485                   = new_binding;
4486                 return decl;
4487               }
4488
4489           /* We should always find a previous binding in this case.  */
4490           my_friendly_abort (0);
4491         }
4492
4493       /* Install the new binding.  */
4494       push_local_binding (name, new_binding, flags);
4495     }
4496
4497   return decl;
4498 }
4499 \f
4500 /* Generate an implicit declaration for identifier FUNCTIONID
4501    as a function of type int ().  Print a warning if appropriate.  */
4502
4503 tree
4504 implicitly_declare (functionid)
4505      tree functionid;
4506 {
4507   register tree decl;
4508   int temp = allocation_temporary_p ();
4509
4510   push_obstacks_nochange ();
4511
4512   /* Save the decl permanently so we can warn if definition follows.
4513      In ANSI C, warn_implicit is usually false, so the saves little space.
4514      But in C++, it's usually true, hence the extra code.  */
4515   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4516     end_temporary_allocation ();
4517
4518   /* We used to reuse an old implicit decl here,
4519      but this loses with inline functions because it can clobber
4520      the saved decl chains.  */
4521   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4522
4523   DECL_EXTERNAL (decl) = 1;
4524   TREE_PUBLIC (decl) = 1;
4525
4526   /* ANSI standard says implicit declarations are in the innermost block.
4527      So we record the decl in the standard fashion.  */
4528   pushdecl (decl);
4529   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4530
4531   if (warn_implicit
4532       /* Only one warning per identifier.  */
4533       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4534     {
4535       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4536     }
4537
4538   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4539
4540   pop_obstacks ();
4541
4542   return decl;
4543 }
4544
4545 /* Return zero if the declaration NEWDECL is valid
4546    when the declaration OLDDECL (assumed to be for the same name)
4547    has already been seen.
4548    Otherwise return an error message format string with a %s
4549    where the identifier should go.  */
4550
4551 static const char *
4552 redeclaration_error_message (newdecl, olddecl)
4553      tree newdecl, olddecl;
4554 {
4555   if (TREE_CODE (newdecl) == TYPE_DECL)
4556     {
4557       /* Because C++ can put things into name space for free,
4558          constructs like "typedef struct foo { ... } foo"
4559          would look like an erroneous redeclaration.  */
4560       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4561         return 0;
4562       else
4563         return "redefinition of `%#D'";
4564     }
4565   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4566     {
4567       /* If this is a pure function, its olddecl will actually be
4568          the original initialization to `0' (which we force to call
4569          abort()).  Don't complain about redefinition in this case.  */
4570       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4571         return 0;
4572
4573       /* If both functions come from different namespaces, this is not
4574          a redeclaration - this is a conflict with a used function. */
4575       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4576           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4577         return "`%D' conflicts with used function";
4578
4579       /* We'll complain about linkage mismatches in
4580          warn_extern_redeclared_static.  */
4581
4582       /* Defining the same name twice is no good.  */
4583       if (DECL_INITIAL (olddecl) != NULL_TREE
4584           && DECL_INITIAL (newdecl) != NULL_TREE)
4585         {
4586           if (DECL_NAME (olddecl) == NULL_TREE)
4587             return "`%#D' not declared in class";
4588           else
4589             return "redefinition of `%#D'";
4590         }
4591       return 0;
4592     }
4593   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4594     {
4595       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4596            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4597            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4598           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4599               && TYPE_SIZE (TREE_TYPE (newdecl))
4600               && TYPE_SIZE (TREE_TYPE (olddecl))))
4601         return "redefinition of `%#D'";
4602       return 0;
4603     }
4604   else if (toplevel_bindings_p ())
4605     {
4606       /* Objects declared at top level:  */
4607       /* If at least one is a reference, it's ok.  */
4608       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4609         return 0;
4610       /* Reject two definitions.  */
4611       return "redefinition of `%#D'";
4612     }
4613   else
4614     {
4615       /* Objects declared with block scope:  */
4616       /* Reject two definitions, and reject a definition
4617          together with an external reference.  */
4618       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4619         return "redeclaration of `%#D'";
4620       return 0;
4621     }
4622 }
4623 \f
4624 /* Create a new label, named ID.  */
4625
4626 static tree
4627 make_label_decl (id, local_p)
4628      tree id;
4629      int local_p;
4630 {
4631   tree decl;
4632
4633   decl = build_decl (LABEL_DECL, id, void_type_node);
4634   if (expanding_p)
4635     /* Make sure every label has an rtx.  */
4636     label_rtx (decl);
4637
4638   DECL_CONTEXT (decl) = current_function_decl;
4639   DECL_MODE (decl) = VOIDmode;
4640   C_DECLARED_LABEL_FLAG (decl) = local_p;
4641
4642   /* Say where one reference is to the label, for the sake of the
4643      error if it is not defined.  */
4644   DECL_SOURCE_LINE (decl) = lineno;
4645   DECL_SOURCE_FILE (decl) = input_filename;
4646
4647   /* Record the fact that this identifier is bound to this label.  */
4648   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4649
4650   /* Record this label on the list of used labels so that we can check
4651      at the end of the function to see whether or not the label was
4652      actually defined.  */
4653   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4654       && (named_label_uses == NULL
4655           || named_label_uses->names_in_scope != current_binding_level->names
4656           || named_label_uses->label_decl != decl))
4657     {
4658       struct named_label_list *new_ent;
4659       new_ent
4660         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4661       new_ent->label_decl = decl;
4662       new_ent->names_in_scope = current_binding_level->names;
4663       new_ent->binding_level = current_binding_level;
4664       new_ent->lineno_o_goto = lineno;
4665       new_ent->filename_o_goto = input_filename;
4666       new_ent->next = named_label_uses;
4667       named_label_uses = new_ent;
4668     }
4669
4670   return decl;
4671 }
4672
4673 /* Look for a label named ID in the current function.  If one cannot
4674    be found, create one.  (We keep track of used, but undefined,
4675    labels, and complain about them at the end of a function.)  */
4676
4677 tree 
4678 lookup_label (id)
4679      tree id;
4680 {
4681   tree decl;
4682
4683   /* You can't use labels at global scope.  */
4684   if (current_function_decl == NULL_TREE)
4685     {
4686       error ("label `%s' referenced outside of any function",
4687              IDENTIFIER_POINTER (id));
4688       return NULL_TREE;
4689     }
4690   
4691   /* See if we've already got this label.  */
4692   decl = IDENTIFIER_LABEL_VALUE (id);
4693   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4694     return decl;
4695
4696   /* Record this label on the list of labels used in this function.
4697      We do this before calling make_label_decl so that we get the
4698      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4699   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4700                             named_labels);
4701   /* We need a new label.  */
4702   decl = make_label_decl (id, /*local_p=*/0);
4703   /* Now fill in the information we didn't have before.  */
4704   TREE_VALUE (named_labels) = decl;
4705
4706   return decl;
4707 }
4708
4709 /* Declare a local label named ID.  */
4710
4711 tree
4712 declare_local_label (id)
4713      tree id;
4714 {
4715   tree decl;
4716
4717   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4718      this scope we can restore the old value of
4719      IDENTIFIER_TYPE_VALUE.  */
4720   current_binding_level->shadowed_labels 
4721     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4722                  current_binding_level->shadowed_labels);
4723   /* Look for the label.  */
4724   decl = make_label_decl (id, /*local_p=*/1);
4725   /* Now fill in the information we didn't have before.  */
4726   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4727   
4728   return decl;
4729 }
4730
4731 /* Define a label, specifying the location in the source file.
4732    Return the LABEL_DECL node for the label, if the definition is valid.
4733    Otherwise return 0.  */
4734
4735 tree
4736 define_label (filename, line, name)
4737      char *filename;
4738      int line;
4739      tree name;
4740 {
4741   tree decl = lookup_label (name);
4742
4743   /* After labels, make any new cleanups go into their
4744      own new (temporary) binding contour.  */
4745   current_binding_level->more_cleanups_ok = 0;
4746
4747   if (name == get_identifier ("wchar_t"))
4748     cp_pedwarn ("label named wchar_t");
4749
4750   if (DECL_INITIAL (decl) != NULL_TREE)
4751     {
4752       cp_error ("duplicate label `%D'", decl);
4753       return 0;
4754     }
4755   else
4756     {
4757       struct named_label_list *uses, *prev;
4758       int identified = 0;
4759       int saw_eh = 0;
4760
4761       /* Mark label as having been defined.  */
4762       DECL_INITIAL (decl) = error_mark_node;
4763       /* Say where in the source.  */
4764       DECL_SOURCE_FILE (decl) = filename;
4765       DECL_SOURCE_LINE (decl) = line;
4766
4767       prev = NULL;
4768       uses = named_label_uses;
4769       while (uses != NULL)
4770         if (uses->label_decl == decl)
4771           {
4772             struct binding_level *b = current_binding_level;
4773             while (b)
4774               {
4775                 tree new_decls = b->names;
4776                 tree old_decls = (b == uses->binding_level)
4777                                   ? uses->names_in_scope : NULL_TREE;
4778                 while (new_decls != old_decls)
4779                   {
4780                     if (TREE_CODE (new_decls) == VAR_DECL
4781                         /* Don't complain about crossing initialization
4782                            of internal entities.  They can't be accessed,
4783                            and they should be cleaned up
4784                            by the time we get to the label.  */
4785                         && ! DECL_ARTIFICIAL (new_decls)
4786                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4787                              && pod_type_p (TREE_TYPE (new_decls))))
4788                       {
4789                         /* This is really only important if we're crossing
4790                            an initialization.  The POD stuff is just
4791                            pedantry; why should it matter if the class
4792                            contains a field of pointer to member type?  */
4793                         int problem = (DECL_INITIAL (new_decls)
4794                                        || (TYPE_NEEDS_CONSTRUCTING
4795                                            (TREE_TYPE (new_decls))));
4796
4797                         if (! identified)
4798                           {
4799                             if (problem)
4800                               {
4801                                 cp_error ("jump to label `%D'", decl);
4802                                 error_with_file_and_line
4803                                   (uses->filename_o_goto,
4804                                    uses->lineno_o_goto, "  from here");
4805                               }
4806                             else
4807                               {
4808                                 cp_pedwarn ("jump to label `%D'", decl);
4809                                 pedwarn_with_file_and_line
4810                                   (uses->filename_o_goto,
4811                                    uses->lineno_o_goto, "  from here");
4812                               }
4813                             identified = 1;
4814                           }
4815
4816                         if (problem)
4817                           cp_error_at ("  crosses initialization of `%#D'",
4818                                        new_decls);
4819                         else
4820                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4821                                          new_decls);
4822                       }
4823                     new_decls = TREE_CHAIN (new_decls);
4824                   }
4825                 if (b == uses->binding_level)
4826                   break;
4827                 if (b->eh_region && ! saw_eh)
4828                   {
4829                     if (! identified)
4830                       {
4831                         cp_error ("jump to label `%D'", decl);
4832                         error_with_file_and_line
4833                           (uses->filename_o_goto,
4834                            uses->lineno_o_goto, "  from here");
4835                         identified = 1;
4836                       }
4837                     error ("  enters exception handling block");
4838                     saw_eh = 1;
4839                   }
4840                 b = b->level_chain;
4841               }
4842
4843             if (prev != NULL)
4844               prev->next = uses->next;
4845             else
4846               named_label_uses = uses->next;
4847
4848             uses = uses->next;
4849           }
4850         else
4851           {
4852             prev = uses;
4853             uses = uses->next;
4854           }
4855       current_function_return_value = NULL_TREE;
4856       return decl;
4857     }
4858 }
4859
4860 struct cp_switch
4861 {
4862   struct binding_level *level;
4863   struct cp_switch *next;
4864 };
4865
4866 static struct cp_switch *switch_stack;
4867
4868 void
4869 push_switch ()
4870 {
4871   struct cp_switch *p
4872     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4873   p->level = current_binding_level;
4874   p->next = switch_stack;
4875   switch_stack = p;
4876 }
4877
4878 void
4879 pop_switch ()
4880 {
4881   switch_stack = switch_stack->next;
4882 }
4883
4884 /* Note that we've seen a definition of a case label, and complain if this
4885    is a bad place for one.  */
4886
4887 void
4888 define_case_label ()
4889 {
4890   tree cleanup = last_cleanup_this_contour ();
4891   struct binding_level *b = current_binding_level;
4892   int identified = 0;
4893
4894   if (! switch_stack)
4895     /* Don't crash; we'll complain in do_case.  */
4896     return;
4897   
4898   if (cleanup)
4899     {
4900       static int explained = 0;
4901       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4902       warning ("where case label appears here");
4903       if (!explained)
4904         {
4905           warning ("(enclose actions of previous case statements requiring");
4906           warning ("destructors in their own binding contours.)");
4907           explained = 1;
4908         }
4909     }
4910
4911   for (; b && b != switch_stack->level; b = b->level_chain)
4912     {
4913       tree new_decls = b->names;
4914       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4915         {
4916           if (TREE_CODE (new_decls) == VAR_DECL
4917               /* Don't complain about crossing initialization
4918                  of internal entities.  They can't be accessed,
4919                  and they should be cleaned up
4920                  by the time we get to the label.  */
4921               && ! DECL_ARTIFICIAL (new_decls)
4922               && ((DECL_INITIAL (new_decls) != NULL_TREE
4923                    && DECL_INITIAL (new_decls) != error_mark_node)
4924                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4925             {
4926               if (! identified)
4927                 error ("jump to case label");
4928               identified = 1;
4929               cp_error_at ("  crosses initialization of `%#D'",
4930                            new_decls);
4931             }
4932         }
4933     }
4934
4935   /* After labels, make any new cleanups go into their
4936      own new (temporary) binding contour.  */
4937
4938   current_binding_level->more_cleanups_ok = 0;
4939   current_function_return_value = NULL_TREE;
4940 }
4941 \f
4942 /* Return the list of declarations of the current level.
4943    Note that this list is in reverse order unless/until
4944    you nreverse it; and when you do nreverse it, you must
4945    store the result back using `storedecls' or you will lose.  */
4946
4947 tree
4948 getdecls ()
4949 {
4950   return current_binding_level->names;
4951 }
4952
4953 /* Return the list of type-tags (for structs, etc) of the current level.  */
4954
4955 tree
4956 gettags ()
4957 {
4958   return current_binding_level->tags;
4959 }
4960
4961 /* Store the list of declarations of the current level.
4962    This is done for the parameter declarations of a function being defined,
4963    after they are modified in the light of any missing parameters.  */
4964
4965 static void
4966 storedecls (decls)
4967      tree decls;
4968 {
4969   current_binding_level->names = decls;
4970 }
4971
4972 /* Similarly, store the list of tags of the current level.  */
4973
4974 void
4975 storetags (tags)
4976      tree tags;
4977 {
4978   current_binding_level->tags = tags;
4979 }
4980 \f
4981 /* Given NAME, an IDENTIFIER_NODE,
4982    return the structure (or union or enum) definition for that name.
4983    Searches binding levels from BINDING_LEVEL up to the global level.
4984    If THISLEVEL_ONLY is nonzero, searches only the specified context
4985    (but skips any tag-transparent contexts to find one that is
4986    meaningful for tags).
4987    FORM says which kind of type the caller wants;
4988    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4989    If the wrong kind of type is found, and it's not a template, an error is
4990    reported.  */
4991
4992 static tree
4993 lookup_tag (form, name, binding_level, thislevel_only)
4994      enum tree_code form;
4995      tree name;
4996      struct binding_level *binding_level;
4997      int thislevel_only;
4998 {
4999   register struct binding_level *level;
5000   /* Non-zero if, we should look past a pseudo-global level, even if
5001      THISLEVEL_ONLY.  */
5002   int allow_pseudo_global = 1;
5003
5004   for (level = binding_level; level; level = level->level_chain)
5005     {
5006       register tree tail;
5007       if (ANON_AGGRNAME_P (name))
5008         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5009           {
5010             /* There's no need for error checking here, because
5011                anon names are unique throughout the compilation.  */
5012             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5013               return TREE_VALUE (tail);
5014           }
5015       else if (level->namespace_p)
5016         /* Do namespace lookup. */
5017         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5018           {
5019             tree old = binding_for_name (name, tail);
5020
5021             /* If we just skipped past a pseudo global level, even
5022                though THISLEVEL_ONLY, and we find a template class
5023                declaration, then we use the _TYPE node for the
5024                template.  See the example below.  */
5025             if (thislevel_only && !allow_pseudo_global
5026                 && old && BINDING_VALUE (old) 
5027                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5028               old = TREE_TYPE (BINDING_VALUE (old));
5029             else 
5030               old = BINDING_TYPE (old);
5031
5032             /* If it has an original type, it is a typedef, and we
5033                should not return it.  */
5034             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5035               old = NULL_TREE;
5036             if (old && TREE_CODE (old) != form
5037                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5038               {
5039                 cp_error ("`%#D' redeclared as %C", old, form);
5040                 return NULL_TREE;
5041               }
5042             if (old)
5043               return old;
5044             if (thislevel_only || tail == global_namespace)
5045               return NULL_TREE;
5046           }
5047       else
5048         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5049           {
5050             if (TREE_PURPOSE (tail) == name)
5051               {
5052                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5053                 /* Should tighten this up; it'll probably permit
5054                    UNION_TYPE and a struct template, for example.  */
5055                 if (code != form
5056                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5057                   {
5058                     /* Definition isn't the kind we were looking for.  */
5059                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5060                               form);
5061                     return NULL_TREE;
5062                   }
5063                 return TREE_VALUE (tail);
5064               }
5065           }
5066       if (thislevel_only && ! level->tag_transparent)
5067         {
5068           if (level->pseudo_global && allow_pseudo_global)
5069             {
5070               /* We must deal with cases like this:
5071                  
5072                    template <class T> struct S;
5073                    template <class T> struct S {};
5074                    
5075                  When looking up `S', for the second declaration, we
5076                  would like to find the first declaration.  But, we
5077                  are in the pseudo-global level created for the
5078                  template parameters, rather than the (surrounding)
5079                  namespace level.  Thus, we keep going one more level,
5080                  even though THISLEVEL_ONLY is non-zero.  */
5081               allow_pseudo_global = 0;
5082               continue;
5083             }
5084           else
5085             return NULL_TREE;
5086         }
5087     }
5088   return NULL_TREE;
5089 }
5090
5091 #if 0
5092 void
5093 set_current_level_tags_transparency (tags_transparent)
5094      int tags_transparent;
5095 {
5096   current_binding_level->tag_transparent = tags_transparent;
5097 }
5098 #endif
5099
5100 /* Given a type, find the tag that was defined for it and return the tag name.
5101    Otherwise return 0.  However, the value can never be 0
5102    in the cases in which this is used.
5103
5104    C++: If NAME is non-zero, this is the new name to install.  This is
5105    done when replacing anonymous tags with real tag names.  */
5106
5107 static tree
5108 lookup_tag_reverse (type, name)
5109      tree type;
5110      tree name;
5111 {
5112   register struct binding_level *level;
5113
5114   for (level = current_binding_level; level; level = level->level_chain)
5115     {
5116       register tree tail;
5117       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5118         {
5119           if (TREE_VALUE (tail) == type)
5120             {
5121               if (name)
5122                 TREE_PURPOSE (tail) = name;
5123               return TREE_PURPOSE (tail);
5124             }
5125         }
5126     }
5127   return NULL_TREE;
5128 }
5129 \f
5130 /* Look up NAME in the NAMESPACE.  */
5131
5132 tree
5133 lookup_namespace_name (namespace, name)
5134      tree namespace, name;
5135 {
5136   tree val;
5137   tree template_id = NULL_TREE;
5138
5139   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5140
5141   if (TREE_CODE (name) == NAMESPACE_DECL)
5142     /* This happens for A::B<int> when B is a namespace. */
5143     return name;
5144   else if (TREE_CODE (name) == TEMPLATE_DECL)
5145     {
5146       /* This happens for A::B where B is a template, and there are no
5147          template arguments.  */
5148       cp_error ("invalid use of `%D'", name);
5149       return error_mark_node;
5150     }
5151
5152   namespace = ORIGINAL_NAMESPACE (namespace);
5153
5154   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5155     {
5156       template_id = name;
5157       name = TREE_OPERAND (name, 0);
5158       if (TREE_CODE (name) == OVERLOAD)
5159         name = DECL_NAME (OVL_CURRENT (name));
5160       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5161         name = DECL_NAME (name);
5162     }
5163
5164   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5165   
5166   val = make_node (CPLUS_BINDING);
5167   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5168     return error_mark_node;
5169
5170   if (BINDING_VALUE (val))
5171     {
5172       val = BINDING_VALUE (val);
5173
5174       if (template_id)
5175         {
5176           if (DECL_CLASS_TEMPLATE_P (val))
5177             val = lookup_template_class (val, 
5178                                          TREE_OPERAND (template_id, 1),
5179                                          /*in_decl=*/NULL_TREE,
5180                                          /*context=*/NULL_TREE,
5181                                          /*entering_scope=*/0);
5182           else if (DECL_FUNCTION_TEMPLATE_P (val)
5183                    || TREE_CODE (val) == OVERLOAD)
5184             val = lookup_template_function (val, 
5185                                             TREE_OPERAND (template_id, 1));
5186           else
5187             {
5188               cp_error ("`%D::%D' is not a template",
5189                         namespace, name);
5190               return error_mark_node;
5191             }
5192         }
5193
5194       /* If we have a single function from a using decl, pull it out.  */
5195       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5196         val = OVL_FUNCTION (val);
5197       return val;
5198     }
5199
5200   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5201   return error_mark_node;
5202 }
5203
5204 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5205
5206 static unsigned long
5207 typename_hash (k)
5208      hash_table_key k;
5209 {
5210   unsigned long hash;
5211   tree t;
5212
5213   t = (tree) k;
5214   hash = (((unsigned long) TYPE_CONTEXT (t))
5215           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5216
5217   return hash;
5218 }
5219
5220 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5221
5222 static boolean
5223 typename_compare (k1, k2)
5224      hash_table_key k1;
5225      hash_table_key k2;
5226 {
5227   tree t1;
5228   tree t2;
5229   tree d1;
5230   tree d2;
5231
5232   t1 = (tree) k1;
5233   t2 = (tree) k2;
5234   d1 = TYPE_NAME (t1);
5235   d2 = TYPE_NAME (t2);
5236   
5237   return (DECL_NAME (d1) == DECL_NAME (d2)
5238           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5239           && ((TREE_TYPE (t1) != NULL_TREE) 
5240               == (TREE_TYPE (t2) != NULL_TREE))
5241           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5242           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5243 }
5244
5245 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5246    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5247    is non-NULL, this type is being created by the implicit typename
5248    extension, and BASE_TYPE is a type named `t' in some base class of
5249    `T' which depends on template parameters.  
5250
5251    Returns the new TYPENAME_TYPE.  */
5252
5253 tree
5254 build_typename_type (context, name, fullname, base_type)
5255      tree context;
5256      tree name;
5257      tree fullname;
5258      tree base_type;
5259 {
5260   tree t;
5261   tree d;
5262   struct hash_entry* e;
5263
5264   static struct hash_table ht;
5265
5266   push_obstacks (&permanent_obstack, &permanent_obstack);
5267
5268   if (!ht.table)
5269     {
5270       static struct hash_table *h = &ht;
5271       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5272                             &typename_compare))
5273         fatal ("virtual memory exhausted");
5274       ggc_add_tree_hash_table_root (&h, 1);
5275     }
5276
5277   /* Build the TYPENAME_TYPE.  */
5278   t = make_lang_type (TYPENAME_TYPE);
5279   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5280   TYPENAME_TYPE_FULLNAME (t) = fullname;
5281   TREE_TYPE (t) = base_type;
5282
5283   /* Build the corresponding TYPE_DECL.  */
5284   d = build_decl (TYPE_DECL, name, t);
5285   TYPE_NAME (TREE_TYPE (d)) = d;
5286   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5287   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5288   DECL_ARTIFICIAL (d) = 1;
5289
5290   /* See if we already have this type.  */
5291   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5292   if (e)
5293     t = (tree) e->key;
5294   else
5295     /* Insert the type into the table.  */
5296     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5297
5298   pop_obstacks ();
5299
5300   return t;
5301 }
5302
5303 tree
5304 make_typename_type (context, name)
5305      tree context, name;
5306 {
5307   tree fullname;
5308
5309   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5310     {
5311       if (!(TYPE_LANG_SPECIFIC (name) 
5312             && (CLASSTYPE_IS_TEMPLATE (name) 
5313                 || CLASSTYPE_USE_TEMPLATE (name))))
5314         name = TYPE_IDENTIFIER (name);
5315       else
5316         /* Create a TEMPLATE_ID_EXPR for the type.  */
5317         name = build_nt (TEMPLATE_ID_EXPR,
5318                          CLASSTYPE_TI_TEMPLATE (name),
5319                          CLASSTYPE_TI_ARGS (name));
5320     }
5321   else if (TREE_CODE (name) == TYPE_DECL)
5322     name = DECL_NAME (name);
5323
5324   fullname = name;
5325
5326   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5327     {
5328       name = TREE_OPERAND (name, 0);
5329       if (TREE_CODE (name) == TEMPLATE_DECL)
5330         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5331     }
5332   if (TREE_CODE (name) != IDENTIFIER_NODE)
5333     my_friendly_abort (2000);
5334
5335   if (TREE_CODE (context) == NAMESPACE_DECL)
5336     {
5337       /* We can get here from typename_sub0 in the explicit_template_type
5338          expansion.  Just fail.  */
5339       cp_error ("no class template named `%#T' in `%#T'",
5340                 name, context);
5341       return error_mark_node;
5342     }
5343
5344   if (! uses_template_parms (context)
5345       || currently_open_class (context))
5346     {
5347       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5348         {
5349           tree tmpl = NULL_TREE;
5350           if (IS_AGGR_TYPE (context))
5351             tmpl = lookup_field (context, name, 0, 0);
5352           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5353             {
5354               cp_error ("no class template named `%#T' in `%#T'",
5355                         name, context);
5356               return error_mark_node;
5357             }
5358
5359           return lookup_template_class (tmpl, 
5360                                         TREE_OPERAND (fullname, 1),
5361                                         NULL_TREE, context, 
5362                                         /*entering_scope=*/0);
5363         }
5364       else
5365         {
5366           tree t;
5367           
5368           if (!IS_AGGR_TYPE (context))
5369             {
5370               cp_error ("no type named `%#T' in `%#T'", name, context);
5371               return error_mark_node;
5372             }
5373
5374           t = lookup_field (context, name, 0, 1);
5375           if (t)
5376             return TREE_TYPE (t);
5377         }
5378     }
5379
5380   /* If the CONTEXT is not a template type, then either the field is
5381      there now or its never going to be.  */
5382   if (!uses_template_parms (context))
5383     {
5384       cp_error ("no type named `%#T' in `%#T'", name, context);
5385       return error_mark_node;
5386     }
5387     
5388   
5389   return build_typename_type (context, name, fullname,  NULL_TREE);
5390 }
5391
5392 /* Select the right _DECL from multiple choices. */
5393
5394 static tree
5395 select_decl (binding, flags)
5396      tree binding;
5397      int flags;
5398 {
5399   tree val;
5400   val = BINDING_VALUE (binding);
5401   if (LOOKUP_NAMESPACES_ONLY (flags))
5402     {
5403       /* We are not interested in types. */
5404       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5405         return val;
5406       return NULL_TREE;
5407     }
5408   
5409   /* If we could have a type and
5410      we have nothing or we need a type and have none.  */
5411   if (BINDING_TYPE (binding)
5412       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5413                    && TREE_CODE (val) != TYPE_DECL)))
5414     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5415   /* Don't return non-types if we really prefer types. */
5416   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5417            && (TREE_CODE (val) != TEMPLATE_DECL
5418                || !DECL_CLASS_TEMPLATE_P (val)))
5419     val = NULL_TREE;
5420
5421   return val;
5422 }
5423
5424 /* Unscoped lookup of a global: iterate over current namespaces,
5425    considering using-directives.  If SPACESP is non-NULL, store a list
5426    of the namespaces we've considered in it.  */
5427
5428 tree
5429 unqualified_namespace_lookup (name, flags, spacesp)
5430      tree name;
5431      int flags;
5432      tree *spacesp;
5433 {
5434   tree b = make_node (CPLUS_BINDING);
5435   tree initial = current_decl_namespace();
5436   tree scope = initial;
5437   tree siter;
5438   struct binding_level *level;
5439   tree val = NULL_TREE;
5440
5441   if (spacesp)
5442     *spacesp = NULL_TREE;
5443
5444   for (; !val; scope = CP_DECL_CONTEXT (scope))
5445     {
5446       if (spacesp)
5447         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5448       val = binding_for_name (name, scope);
5449
5450       /* Initialize binding for this context. */
5451       BINDING_VALUE (b) = BINDING_VALUE (val);
5452       BINDING_TYPE (b) = BINDING_TYPE (val);
5453
5454       /* Add all _DECLs seen through local using-directives. */
5455       for (level = current_binding_level; 
5456            !level->namespace_p;
5457            level = level->level_chain)
5458         if (!lookup_using_namespace (name, b, level->using_directives,
5459                                      scope, flags, spacesp))
5460           /* Give up because of error. */
5461           return error_mark_node;
5462
5463       /* Add all _DECLs seen through global using-directives. */
5464       /* XXX local and global using lists should work equally. */
5465       siter = initial;
5466       while (1)
5467         {
5468           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5469                                        scope, flags, spacesp))
5470             /* Give up because of error. */
5471             return error_mark_node;
5472           if (siter == scope) break;
5473           siter = CP_DECL_CONTEXT (siter);
5474         }
5475
5476       val = select_decl (b, flags);
5477       if (scope == global_namespace)
5478         break;
5479     }
5480   return val;
5481 }
5482
5483 /* Combine prefer_type and namespaces_only into flags.  */
5484
5485 static int
5486 lookup_flags (prefer_type, namespaces_only)
5487   int prefer_type, namespaces_only;
5488 {
5489   if (namespaces_only)
5490     return LOOKUP_PREFER_NAMESPACES;
5491   if (prefer_type > 1)
5492     return LOOKUP_PREFER_TYPES;
5493   if (prefer_type > 0)
5494     return LOOKUP_PREFER_BOTH;
5495   return 0;
5496 }
5497
5498 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5499    ignore it or not.  Subroutine of lookup_name_real.  */
5500
5501 static tree
5502 qualify_lookup (val, flags)
5503      tree val;
5504      int flags;
5505 {
5506   if (val == NULL_TREE)
5507     return val;
5508   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5509     return val;
5510   if ((flags & LOOKUP_PREFER_TYPES)
5511       && (TREE_CODE (val) == TYPE_DECL
5512           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5513               && DECL_CLASS_TEMPLATE_P (val))))
5514     return val;
5515   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5516     return NULL_TREE;
5517   return val;
5518 }
5519
5520 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5521    that.  */
5522
5523 static void
5524 warn_about_implicit_typename_lookup (typename, binding)
5525      tree typename;
5526      tree binding;
5527 {
5528   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5529   tree name = DECL_NAME (typename);
5530
5531   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5532          && CLASSTYPE_TEMPLATE_INFO (subtype)
5533          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5534       && ! (TREE_CODE (binding) == TYPE_DECL
5535             && same_type_p (TREE_TYPE (binding), subtype)))
5536     {
5537       cp_warning ("lookup of `%D' finds `%#D'", 
5538                   name, binding);
5539       cp_warning ("  instead of `%D' from dependent base class",
5540                   typename);
5541       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5542                   constructor_name (current_class_type), name);
5543     }
5544 }
5545
5546 /* Look up NAME in the current binding level and its superiors in the
5547    namespace of variables, functions and typedefs.  Return a ..._DECL
5548    node of some kind representing its definition if there is only one
5549    such declaration, or return a TREE_LIST with all the overloaded
5550    definitions if there are many, or return 0 if it is undefined.
5551
5552    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5553    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5554    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5555    Otherwise we prefer non-TYPE_DECLs.  
5556
5557    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5558    using IDENTIFIER_CLASS_VALUE.  */
5559
5560 static tree
5561 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5562      tree name;
5563      int prefer_type, nonclass, namespaces_only;
5564 {
5565   tree t;
5566   tree val = NULL_TREE;
5567   int yylex = 0;
5568   tree from_obj = NULL_TREE;
5569   int flags;
5570   int val_is_implicit_typename = 0;
5571
5572   /* Hack: copy flag set by parser, if set. */
5573   if (only_namespace_names)
5574     namespaces_only = 1;
5575
5576   if (prefer_type == -2)
5577     {
5578       extern int looking_for_typename;
5579       tree type = NULL_TREE;
5580
5581       yylex = 1;
5582       prefer_type = looking_for_typename;
5583
5584       flags = lookup_flags (prefer_type, namespaces_only);
5585       /* If the next thing is '<', class templates are types. */
5586       if (looking_for_template)
5587         flags |= LOOKUP_TEMPLATES_EXPECTED;
5588
5589       /* std:: becomes :: for now.  */
5590       if (got_scope == std_node)
5591         got_scope = void_type_node;
5592
5593       if (got_scope)
5594         type = got_scope;
5595       else if (got_object != error_mark_node)
5596         type = got_object;
5597       
5598       if (type)
5599         {
5600           if (type == error_mark_node)
5601             return error_mark_node;
5602           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5603             type = TREE_TYPE (type);
5604
5605           if (TYPE_P (type))
5606             type = complete_type (type);
5607
5608           if (TREE_CODE (type) == VOID_TYPE)
5609             type = global_namespace;
5610           if (TREE_CODE (type) == NAMESPACE_DECL)
5611             {
5612               val = make_node (CPLUS_BINDING);
5613               flags |= LOOKUP_COMPLAIN;
5614               if (!qualified_lookup_using_namespace (name, type, val, flags))
5615                 return NULL_TREE;
5616               val = select_decl (val, flags);
5617             }
5618           else if (! IS_AGGR_TYPE (type)
5619                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5620                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5621                    || TREE_CODE (type) == TYPENAME_TYPE)
5622             /* Someone else will give an error about this if needed.  */
5623             val = NULL_TREE;
5624           else if (type == current_class_type)
5625             val = IDENTIFIER_CLASS_VALUE (name);
5626           else
5627             val = lookup_member (type, name, 0, prefer_type);
5628         }
5629       else
5630         val = NULL_TREE;
5631
5632       if (got_scope)
5633         goto done;
5634       else if (got_object && val)
5635         from_obj = val;
5636     }
5637   else
5638     {
5639       flags = lookup_flags (prefer_type, namespaces_only);
5640       /* If we're not parsing, we need to complain. */
5641       flags |= LOOKUP_COMPLAIN;
5642     }
5643
5644   /* First, look in non-namespace scopes.  */
5645
5646   if (current_class_type == NULL_TREE)
5647     nonclass = 1;
5648
5649   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5650     {
5651       tree binding;
5652
5653       if (!LOCAL_BINDING_P (t) && nonclass)
5654         /* We're not looking for class-scoped bindings, so keep going.  */
5655         continue;
5656       
5657       /* If this is the kind of thing we're looking for, we're done.  */
5658       if (qualify_lookup (BINDING_VALUE (t), flags))
5659         binding = BINDING_VALUE (t);
5660       else if ((flags & LOOKUP_PREFER_TYPES) 
5661                && qualify_lookup (BINDING_TYPE (t), flags))
5662         binding = BINDING_TYPE (t);
5663       else
5664         binding = NULL_TREE;
5665
5666       if (binding
5667           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5668         {
5669           if (val_is_implicit_typename && !yylex)
5670             warn_about_implicit_typename_lookup (val, binding);
5671           val = binding;
5672           val_is_implicit_typename 
5673             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5674           if (!val_is_implicit_typename)
5675             break;
5676         }
5677     }
5678
5679   /* Now lookup in namespace scopes.  */
5680   if (!val || val_is_implicit_typename)
5681     {
5682       t = unqualified_namespace_lookup (name, flags, 0);
5683       if (t)
5684         {
5685           if (val_is_implicit_typename && !yylex)
5686             warn_about_implicit_typename_lookup (val, t);
5687           val = t;
5688         }
5689     }
5690
5691  done:
5692   if (val)
5693     {
5694       /* This should only warn about types used in qualified-ids.  */
5695       if (from_obj && from_obj != val)
5696         {
5697           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5698               && TREE_CODE (val) == TYPE_DECL
5699               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5700             {
5701               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5702                           name, got_object, TREE_TYPE (from_obj));
5703               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5704                           TREE_TYPE (val));
5705             }
5706
5707           /* We don't change val to from_obj if got_object depends on
5708              template parms because that breaks implicit typename for
5709              destructor calls.  */
5710           if (! uses_template_parms (got_object))
5711             val = from_obj;
5712         }
5713
5714       /* If we have a single function from a using decl, pull it out.  */
5715       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5716         val = OVL_FUNCTION (val);
5717     }
5718   else if (from_obj)
5719     val = from_obj;
5720
5721   return val;
5722 }
5723
5724 tree
5725 lookup_name_nonclass (name)
5726      tree name;
5727 {
5728   return lookup_name_real (name, 0, 1, 0);
5729 }
5730
5731 tree
5732 lookup_function_nonclass (name, args)
5733      tree name;
5734      tree args;
5735 {
5736   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5737 }
5738
5739 tree
5740 lookup_name_namespace_only (name)
5741      tree name;
5742 {
5743   /* type-or-namespace, nonclass, namespace_only */
5744   return lookup_name_real (name, 1, 1, 1);
5745 }
5746
5747 tree
5748 lookup_name (name, prefer_type)
5749      tree name;
5750      int prefer_type;
5751 {
5752   return lookup_name_real (name, prefer_type, 0, 0);
5753 }
5754
5755 /* Similar to `lookup_name' but look only in the innermost non-class
5756    binding level.  */
5757
5758 tree
5759 lookup_name_current_level (name)
5760      tree name;
5761 {
5762   struct binding_level *b;
5763   tree t = NULL_TREE;
5764
5765   b = current_binding_level;
5766   while (b->parm_flag == 2)
5767     b = b->level_chain;
5768
5769   if (b->namespace_p)
5770     {
5771       t = IDENTIFIER_NAMESPACE_VALUE (name);
5772
5773       /* extern "C" function() */
5774       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5775         t = TREE_VALUE (t);
5776     }
5777   else if (IDENTIFIER_BINDING (name) 
5778            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5779     {
5780       while (1)
5781         {
5782           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5783             return IDENTIFIER_VALUE (name);
5784           
5785           if (b->keep == 2)
5786             b = b->level_chain;
5787           else
5788             break;
5789         }
5790     }
5791
5792   return t;
5793 }
5794
5795 /* Like lookup_name_current_level, but for types.  */
5796
5797 tree
5798 lookup_type_current_level (name)
5799      tree name;
5800 {
5801   register tree t = NULL_TREE;
5802
5803   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5804
5805   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5806       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5807     {
5808       struct binding_level *b = current_binding_level;
5809       while (1)
5810         {
5811           if (purpose_member (name, b->type_shadowed))
5812             return REAL_IDENTIFIER_TYPE_VALUE (name);
5813           if (b->keep == 2)
5814             b = b->level_chain;
5815           else
5816             break;
5817         }
5818     }
5819
5820   return t;
5821 }
5822
5823 void
5824 begin_only_namespace_names ()
5825 {
5826   only_namespace_names = 1;
5827 }
5828
5829 void
5830 end_only_namespace_names ()
5831 {
5832   only_namespace_names = 0;
5833 }
5834 \f
5835 /* Arrange for the user to get a source line number, even when the
5836    compiler is going down in flames, so that she at least has a
5837    chance of working around problems in the compiler.  We used to
5838    call error(), but that let the segmentation fault continue
5839    through; now, it's much more passive by asking them to send the
5840    maintainers mail about the problem.  */
5841
5842 static void
5843 signal_catch (sig)
5844      int sig ATTRIBUTE_UNUSED;
5845 {
5846   signal (SIGSEGV, SIG_DFL);
5847 #ifdef SIGIOT
5848   signal (SIGIOT, SIG_DFL);
5849 #endif
5850 #ifdef SIGILL
5851   signal (SIGILL, SIG_DFL);
5852 #endif
5853 #ifdef SIGABRT
5854   signal (SIGABRT, SIG_DFL);
5855 #endif
5856 #ifdef SIGBUS
5857   signal (SIGBUS, SIG_DFL);
5858 #endif
5859   my_friendly_abort (0);
5860 }
5861
5862 /* Push the declarations of builtin types into the namespace.
5863    RID_INDEX, if < RID_MAX is the index of the builtin type
5864    in the array RID_POINTERS.  NAME is the name used when looking
5865    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5866
5867 static void
5868 record_builtin_type (rid_index, name, type)
5869      enum rid rid_index;
5870      const char *name;
5871      tree type;
5872 {
5873   tree rname = NULL_TREE, tname = NULL_TREE;
5874   tree tdecl = NULL_TREE;
5875
5876   if ((int) rid_index < (int) RID_MAX)
5877     rname = ridpointers[(int) rid_index];
5878   if (name)
5879     tname = get_identifier (name);
5880
5881   TYPE_BUILT_IN (type) = 1;
5882   
5883   if (tname)
5884     {
5885       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5886       set_identifier_type_value (tname, NULL_TREE);
5887       if ((int) rid_index < (int) RID_MAX)
5888         /* Built-in types live in the global namespace. */
5889         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5890     }
5891   if (rname != NULL_TREE)
5892     {
5893       if (tname != NULL_TREE)
5894         {
5895           set_identifier_type_value (rname, NULL_TREE);
5896           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5897         }
5898       else
5899         {
5900           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5901           set_identifier_type_value (rname, NULL_TREE);
5902         }
5903     }
5904 }
5905
5906 /* Record one of the standard Java types.
5907  * Declare it as having the given NAME.
5908  * If SIZE > 0, it is the size of one of the integral types;
5909  * otherwise it is the negative of the size of one of the other types.  */
5910
5911 static tree
5912 record_builtin_java_type (name, size)
5913      const char *name;
5914      int size;
5915 {
5916   tree type, decl;
5917   if (size > 0)
5918     type = make_signed_type (size);
5919   else if (size > -32)
5920     { /* "__java_char" or ""__java_boolean". */
5921       type = make_unsigned_type (-size);
5922       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5923     }
5924   else
5925     { /* "__java_float" or ""__java_double". */
5926       type = make_node (REAL_TYPE);
5927       TYPE_PRECISION (type) = - size;
5928       layout_type (type);
5929     }
5930   record_builtin_type (RID_MAX, name, type);
5931   decl = TYPE_NAME (type);
5932
5933   /* Suppress generate debug symbol entries for these types,
5934      since for normal C++ they are just clutter.
5935      However, push_lang_context undoes this if extern "Java" is seen. */
5936   DECL_IGNORED_P (decl) = 1;
5937
5938   TYPE_FOR_JAVA (type) = 1;
5939   return type;
5940 }
5941
5942 /* Push a type into the namespace so that the back-ends ignore it. */
5943
5944 static void
5945 record_unknown_type (type, name)
5946      tree type;
5947      const char *name;
5948 {
5949   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5950   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5951   DECL_IGNORED_P (decl) = 1;
5952   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5953   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5954   TYPE_ALIGN (type) = 1;
5955   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5956
5957
5958 /* Push overloaded decl, in global scope, with one argument so it
5959    can be used as a callback from define_function.  */
5960
5961 static void
5962 push_overloaded_decl_1 (x)
5963      tree x;
5964 {
5965   push_overloaded_decl (x, PUSH_GLOBAL);
5966 }
5967
5968 #ifdef __GNUC__
5969 __inline
5970 #endif
5971 tree
5972 auto_function (name, type)
5973      tree name, type;
5974 {
5975   return define_function
5976     (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5977      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5978                                               0)));
5979 }
5980
5981 /* Create the predefined scalar types of C,
5982    and some nodes representing standard constants (0, 1, (void *)0).
5983    Initialize the global binding level.
5984    Make definitions for built-in primitive functions.  */
5985
5986 void
5987 init_decl_processing ()
5988 {
5989   tree fields[20];
5990   int wchar_type_size;
5991   tree array_domain_type;
5992
5993   /* Have to make these distinct before we try using them.  */
5994   lang_name_cplusplus = get_identifier ("C++");
5995   lang_name_c = get_identifier ("C");
5996   lang_name_java = get_identifier ("Java");
5997
5998   /* Let the back-end now how to save and restore language-specific
5999      per-function globals.  */
6000   init_lang_status = &push_cp_function_context;
6001   free_lang_status = &pop_cp_function_context;
6002   mark_lang_status = &mark_cp_function_context;
6003
6004   cp_parse_init ();
6005   init_decl2 ();
6006   init_pt ();
6007
6008   /* Create the global variables.  */
6009   push_to_top_level ();
6010
6011   /* Enter the global namespace. */
6012   my_friendly_assert (global_namespace == NULL_TREE, 375);
6013   push_namespace (get_identifier ("::"));
6014   global_namespace = current_namespace;
6015   current_lang_name = NULL_TREE;
6016
6017   if (flag_strict_prototype == 2)
6018     flag_strict_prototype = pedantic;
6019   if (! flag_permissive && ! pedantic)
6020     flag_pedantic_errors = 1;
6021
6022   strict_prototypes_lang_c = flag_strict_prototype;
6023
6024   /* Initially, C.  */
6025   current_lang_name = lang_name_c;
6026
6027   current_function_decl = NULL_TREE;
6028   current_binding_level = NULL_BINDING_LEVEL;
6029   free_binding_level = NULL_BINDING_LEVEL;
6030
6031   /* Because most segmentation signals can be traced back into user
6032      code, catch them and at least give the user a chance of working
6033      around compiler bugs.  */
6034   signal (SIGSEGV, signal_catch);
6035
6036   /* We will also catch aborts in the back-end through signal_catch and
6037      give the user a chance to see where the error might be, and to defeat
6038      aborts in the back-end when there have been errors previously in their
6039      code.  */
6040 #ifdef SIGIOT
6041   signal (SIGIOT, signal_catch);
6042 #endif
6043 #ifdef SIGILL
6044   signal (SIGILL, signal_catch);
6045 #endif
6046 #ifdef SIGABRT
6047   signal (SIGABRT, signal_catch);
6048 #endif
6049 #ifdef SIGBUS
6050   signal (SIGBUS, signal_catch);
6051 #endif
6052
6053   build_common_tree_nodes (flag_signed_char);
6054
6055   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6056   TREE_TYPE (error_mark_list) = error_mark_node;
6057
6058   /* Make the binding_level structure for global names.  */
6059   pushlevel (0);
6060   global_binding_level = current_binding_level;
6061   /* The global level is the namespace level of ::.  */
6062   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6063   declare_namespace_level ();
6064
6065   this_identifier = get_identifier (THIS_NAME);
6066   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6067   ctor_identifier = get_identifier (CTOR_NAME);
6068   dtor_identifier = get_identifier (DTOR_NAME);
6069   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6070   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6071   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6072   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6073   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6074
6075   /* Define `int' and `char' first so that dbx will output them first.  */
6076   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6077   record_builtin_type (RID_CHAR, "char", char_type_node);
6078
6079   /* `signed' is the same as `int' */
6080   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6081   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6082   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6083   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6084   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6085   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6086   record_builtin_type (RID_MAX, "long long unsigned int",
6087                        long_long_unsigned_type_node);
6088   record_builtin_type (RID_MAX, "long long unsigned",
6089                        long_long_unsigned_type_node);
6090   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6091   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6092   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6093
6094   ptrdiff_type_node
6095     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6096
6097   /* Define both `signed char' and `unsigned char'.  */
6098   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6099   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6100
6101   /* `unsigned long' is the standard type for sizeof.
6102      Note that stddef.h uses `unsigned long',
6103      and this must agree, even if long and int are the same size.  */
6104   set_sizetype
6105     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6106
6107   /* Create the widest literal types. */
6108   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6109   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6110                         widest_integer_literal_type_node));
6111
6112   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6113   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6114                         widest_unsigned_literal_type_node));
6115
6116   /* These are types that type_for_size and type_for_mode use.  */
6117   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6118   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6119   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6120   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6121 #if HOST_BITS_PER_WIDE_INT >= 64
6122   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6123 #endif
6124   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6125   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6126   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6127   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6128 #if HOST_BITS_PER_WIDE_INT >= 64
6129   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6130 #endif
6131
6132   build_common_tree_nodes_2 (flag_short_double);
6133
6134   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6135   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6136   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6137   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6138   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6139   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6140   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6141   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6142
6143   integer_two_node = build_int_2 (2, 0);
6144   TREE_TYPE (integer_two_node) = integer_type_node;
6145   integer_three_node = build_int_2 (3, 0);
6146   TREE_TYPE (integer_three_node) = integer_type_node;
6147
6148   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6149   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6150   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6151   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6152   TYPE_PRECISION (boolean_type_node) = 1;
6153   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6154   boolean_false_node = build_int_2 (0, 0);
6155   TREE_TYPE (boolean_false_node) = boolean_type_node;
6156   boolean_true_node = build_int_2 (1, 0);
6157   TREE_TYPE (boolean_true_node) = boolean_type_node;
6158
6159   signed_size_zero_node = build_int_2 (0, 0);  record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6160   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6161   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6162
6163   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6164                         complex_integer_type_node));
6165   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6166                         complex_float_type_node));
6167   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6168                         complex_double_type_node));
6169   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6170                         complex_long_double_type_node));
6171
6172   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6173
6174   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6175   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6176   TREE_PARMLIST (void_list_node) = 1;
6177
6178   /* Used for expressions that do nothing, but are not errors.  */
6179   void_zero_node = build_int_2 (0, 0);
6180   TREE_TYPE (void_zero_node) = void_type_node;
6181
6182   string_type_node = build_pointer_type (char_type_node);
6183   const_string_type_node
6184     = build_pointer_type (build_qualified_type (char_type_node, 
6185                                                 TYPE_QUAL_CONST));
6186   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6187 #if 0
6188   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6189 #endif
6190
6191   /* Make a type to be the domain of a few array types
6192      whose domains don't really matter.
6193      200 is small enough that it always fits in size_t
6194      and large enough that it can hold most function names for the
6195      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6196   array_domain_type = build_index_type (build_int_2 (200, 0));
6197
6198   /* Make a type for arrays of characters.
6199      With luck nothing will ever really depend on the length of this
6200      array type.  */
6201   char_array_type_node
6202     = build_array_type (char_type_node, array_domain_type);
6203   /* Likewise for arrays of ints.  */
6204   int_array_type_node
6205     = build_array_type (integer_type_node, array_domain_type);
6206
6207   /* This is just some anonymous class type.  Nobody should ever
6208      need to look inside this envelope.  */
6209   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6210
6211   if (flag_huge_objects)
6212     delta_type_node = long_integer_type_node;
6213   else
6214     delta_type_node = short_integer_type_node;
6215
6216   default_function_type
6217     = build_function_type (integer_type_node, NULL_TREE);
6218
6219   ptr_type_node = build_pointer_type (void_type_node);
6220   const_ptr_type_node
6221     = build_pointer_type (build_qualified_type (void_type_node,
6222                                                 TYPE_QUAL_CONST));
6223   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6224
6225   void_ftype_ptr
6226     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6227
6228   /* C++ extensions */
6229
6230   unknown_type_node = make_node (UNKNOWN_TYPE);
6231   record_unknown_type (unknown_type_node, "unknown type");
6232
6233   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6234   TREE_TYPE (unknown_type_node) = unknown_type_node;
6235
6236   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6237
6238   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6239      result.  */
6240   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6241   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6242
6243   /* This is special for C++ so functions can be overloaded.  */
6244   wchar_type_node = get_identifier (flag_short_wchar
6245                                     ? "short unsigned int"
6246                                     : WCHAR_TYPE);
6247   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6248   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6249   signed_wchar_type_node = make_signed_type (wchar_type_size);
6250   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6251   wchar_type_node
6252     = TREE_UNSIGNED (wchar_type_node)
6253       ? unsigned_wchar_type_node
6254       : signed_wchar_type_node;
6255   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6256
6257   /* Artificial declaration of wchar_t -- can be bashed */
6258   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6259                                 wchar_type_node);
6260   pushdecl (wchar_decl_node);
6261
6262   /* This is for wide string constants.  */
6263   wchar_array_type_node
6264     = build_array_type (wchar_type_node, array_domain_type);
6265
6266   if (flag_vtable_thunks)
6267     {
6268       /* Make sure we get a unique function type, so we can give
6269          its pointer type a name.  (This wins for gdb.) */
6270       tree vfunc_type = make_node (FUNCTION_TYPE);
6271       TREE_TYPE (vfunc_type) = integer_type_node;
6272       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6273       layout_type (vfunc_type);
6274
6275       vtable_entry_type = build_pointer_type (vfunc_type);
6276     }
6277   else
6278     {
6279       vtable_entry_type = make_lang_type (RECORD_TYPE);
6280       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6281                                    delta_type_node);
6282       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6283                                    delta_type_node);
6284       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6285                                    ptr_type_node);
6286       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6287                            double_type_node);
6288
6289       /* Make this part of an invisible union.  */
6290       fields[3] = copy_node (fields[2]);
6291       TREE_TYPE (fields[3]) = delta_type_node;
6292       DECL_NAME (fields[3]) = delta2_identifier;
6293       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6294       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6295       TREE_UNSIGNED (fields[3]) = 0;
6296       TREE_CHAIN (fields[2]) = fields[3];
6297       vtable_entry_type = build_qualified_type (vtable_entry_type,
6298                                                 TYPE_QUAL_CONST);
6299     }
6300   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6301
6302   vtbl_type_node
6303     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6304   layout_type (vtbl_type_node);
6305   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6306   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6307   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6308   layout_type (vtbl_ptr_type_node);
6309   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6310
6311   std_node = build_decl (NAMESPACE_DECL, 
6312                          get_identifier (flag_honor_std ? "fake std":"std"),
6313                          void_type_node);
6314   pushdecl (std_node);
6315
6316   global_type_node = make_node (LANG_TYPE);
6317   record_unknown_type (global_type_node, "global type");
6318
6319   /* Now, C++.  */
6320   current_lang_name = lang_name_cplusplus;
6321
6322   {
6323     tree bad_alloc_type_node, newtype, deltype;
6324     if (flag_honor_std)
6325       push_namespace (get_identifier ("std"));
6326     bad_alloc_type_node = xref_tag
6327       (class_type_node, get_identifier ("bad_alloc"), 1);
6328     if (flag_honor_std)
6329       pop_namespace ();
6330     newtype = build_exception_variant
6331       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6332     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6333     auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6334     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6335     global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6336                                           deltype);
6337     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6338   }
6339
6340   abort_fndecl
6341     = define_function ("__pure_virtual", void_ftype, 0, 0);
6342
6343   /* Perform other language dependent initializations.  */
6344   init_class_processing ();
6345   init_init_processing ();
6346   init_search_processing ();
6347   init_rtti_processing ();
6348
6349   if (flag_exceptions)
6350     init_exception_processing ();
6351   if (flag_no_inline)
6352     {
6353       flag_inline_functions = 0;
6354     }
6355
6356   if (! supports_one_only ())
6357     flag_weak = 0;
6358
6359   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6360   declare_function_name ();
6361
6362   /* Prepare to check format strings against argument lists.  */
6363   init_function_format_info ();
6364
6365   /* Show we use EH for cleanups.  */
6366   using_eh_for_cleanups ();
6367
6368   print_error_function = lang_print_error_function;
6369   lang_get_alias_set = &c_get_alias_set;
6370   valid_lang_attribute = cp_valid_lang_attribute;
6371
6372   /* Maintain consistency.  Perhaps we should just complain if they
6373      say -fwritable-strings?  */
6374   if (flag_writable_strings)
6375     flag_const_strings = 0;
6376
6377   /* Add GC roots for all of our global variables.  */
6378   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6379   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6380   ggc_add_tree_root (&integer_three_node, 1);
6381   ggc_add_tree_root (&integer_two_node, 1);
6382   ggc_add_tree_root (&signed_size_zero_node, 1);
6383   ggc_add_tree_root (&size_one_node, 1);
6384   ggc_add_tree_root (&size_zero_node, 1);
6385   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6386                 mark_binding_level);
6387   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6388   ggc_add_tree_root (&static_ctors, 1);
6389   ggc_add_tree_root (&static_dtors, 1);
6390   ggc_add_tree_root (&lastiddecl, 1);
6391
6392   ggc_add_tree_root (&enum_next_value, 1);
6393   ggc_add_tree_root (&last_function_parm_tags, 1);
6394   ggc_add_tree_root (&current_function_return_value, 1);
6395   ggc_add_tree_root (&current_function_parms, 1);
6396   ggc_add_tree_root (&current_function_parm_tags, 1);
6397   ggc_add_tree_root (&last_function_parms, 1);
6398   ggc_add_tree_root (&error_mark_list, 1);
6399
6400   ggc_add_tree_root (&global_namespace, 1);
6401   ggc_add_tree_root (&global_type_node, 1);
6402   ggc_add_tree_root (&anonymous_namespace_name, 1);
6403
6404   ggc_add_tree_root (&got_object, 1);
6405   ggc_add_tree_root (&got_scope, 1);
6406
6407   ggc_add_tree_root (&current_lang_name, 1);
6408   ggc_add_tree_root (&static_aggregates, 1);
6409 }
6410
6411 /* Function to print any language-specific context for an error message.  */
6412
6413 static void
6414 lang_print_error_function (file)
6415      const char *file;
6416 {
6417   default_print_error_function (file);
6418   maybe_print_template_context ();
6419 }
6420
6421 /* Make a definition for a builtin function named NAME and whose data type
6422    is TYPE.  TYPE should be a function type with argument types.
6423
6424    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6425    the name to be called if we can't opencode the function.  */
6426
6427 tree
6428 define_function (name, type, pfn, library_name)
6429      const char *name;
6430      tree type;
6431      void (*pfn) PROTO((tree));
6432      const char *library_name;
6433 {
6434   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6435   DECL_EXTERNAL (decl) = 1;
6436   TREE_PUBLIC (decl) = 1;
6437   DECL_ARTIFICIAL (decl) = 1;
6438
6439   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6440   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6441
6442   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6443      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6444      function in the namespace.  */
6445   if (pfn) (*pfn) (decl);
6446   if (library_name)
6447     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6448   make_function_rtl (decl);
6449   return decl;
6450 }
6451
6452
6453 /* Wrapper around define_function, for the benefit of 
6454    c_common_nodes_and_builtins.
6455    FUNCTION_CODE tells later passes how to compile calls to this function.
6456    See tree.h for its possible values.  */
6457
6458 tree
6459 builtin_function (name, type, code, class, libname)
6460      const char *name;
6461      tree type;
6462      int code;
6463      enum built_in_class class;
6464      const char *libname;
6465 {
6466   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6467                                libname);
6468   DECL_BUILT_IN_CLASS (decl) = class;
6469   DECL_FUNCTION_CODE (decl) = code;
6470   return decl;
6471 }
6472 \f
6473 /* When we call finish_struct for an anonymous union, we create
6474    default copy constructors and such.  But, an anonymous union
6475    shouldn't have such things; this function undoes the damage to the
6476    anonymous union type T.
6477
6478    (The reason that we create the synthesized methods is that we don't
6479    distinguish `union { int i; }' from `typedef union { int i; } U'.
6480    The first is an anonymous union; the second is just an ordinary
6481    union type.)  */
6482
6483 void
6484 fixup_anonymous_aggr (t)
6485      tree t;
6486 {
6487   tree *q;
6488
6489   /* Wipe out memory of synthesized methods */
6490   TYPE_HAS_CONSTRUCTOR (t) = 0;
6491   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6492   TYPE_HAS_INIT_REF (t) = 0;
6493   TYPE_HAS_CONST_INIT_REF (t) = 0;
6494   TYPE_HAS_ASSIGN_REF (t) = 0;
6495   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6496
6497   /* Splice the implicitly generated functions out of the TYPE_METHODS
6498      list.  */
6499   q = &TYPE_METHODS (t);
6500   while (*q)
6501     {
6502       if (DECL_ARTIFICIAL (*q))
6503         *q = TREE_CHAIN (*q);
6504       else
6505         q = &TREE_CHAIN (*q);
6506     }
6507
6508   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6509      function members.  */
6510   if (TYPE_METHODS (t))
6511     error ("an anonymous union cannot have function members");
6512 }
6513
6514 /* Make sure that a declaration with no declarator is well-formed, i.e.
6515    just defines a tagged type or anonymous union.
6516
6517    Returns the type defined, if any.  */
6518
6519 tree
6520 check_tag_decl (declspecs)
6521      tree declspecs;
6522 {
6523   int found_type = 0;
6524   tree ob_modifier = NULL_TREE;
6525   register tree link;
6526   register tree t = NULL_TREE;
6527
6528   for (link = declspecs; link; link = TREE_CHAIN (link))
6529     {
6530       register tree value = TREE_VALUE (link);
6531
6532       if (TYPE_P (value))
6533         {
6534           ++found_type;
6535
6536           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6537             {
6538               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6539               t = value;
6540             }
6541         }
6542       else if (value == ridpointers[(int) RID_FRIEND])
6543         {
6544           if (current_class_type == NULL_TREE
6545               || current_scope () != current_class_type)
6546             ob_modifier = value;
6547         }
6548       else if (value == ridpointers[(int) RID_STATIC]
6549                || value == ridpointers[(int) RID_EXTERN]
6550                || value == ridpointers[(int) RID_AUTO]
6551                || value == ridpointers[(int) RID_REGISTER]
6552                || value == ridpointers[(int) RID_INLINE]
6553                || value == ridpointers[(int) RID_VIRTUAL]
6554                || value == ridpointers[(int) RID_CONST]
6555                || value == ridpointers[(int) RID_VOLATILE]
6556                || value == ridpointers[(int) RID_EXPLICIT])
6557         ob_modifier = value;
6558     }
6559
6560   if (found_type > 1)
6561     error ("multiple types in one declaration");
6562
6563   /* Inside a class, we might be in a friend or access declaration.
6564      Until we have a good way of detecting the latter, don't warn.  */
6565   if (t == NULL_TREE && ! current_class_type)
6566     pedwarn ("declaration does not declare anything");
6567
6568   /* Check for an anonymous union.  We're careful
6569      accessing TYPE_IDENTIFIER because some built-in types, like
6570      pointer-to-member types, do not have TYPE_NAME.  */
6571   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6572            && TYPE_NAME (t)
6573            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6574     {
6575       /* Anonymous unions are objects, so they can have specifiers.  */;
6576       SET_ANON_AGGR_TYPE_P (t);
6577
6578       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6579         pedwarn ("ISO C++ prohibits anonymous structs");
6580     }
6581
6582   else if (ob_modifier)
6583     {
6584       if (ob_modifier == ridpointers[(int) RID_INLINE]
6585           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6586         cp_error ("`%D' can only be specified for functions", ob_modifier);
6587       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6588         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6589       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6590         cp_error ("`%D' can only be specified for constructors",
6591                   ob_modifier);
6592       else
6593         cp_error ("`%D' can only be specified for objects and functions",
6594                   ob_modifier);
6595     }
6596
6597   return t;
6598 }
6599
6600 /* Called when a declaration is seen that contains no names to declare.
6601    If its type is a reference to a structure, union or enum inherited
6602    from a containing scope, shadow that tag name for the current scope
6603    with a forward reference.
6604    If its type defines a new named structure or union
6605    or defines an enum, it is valid but we need not do anything here.
6606    Otherwise, it is an error.
6607
6608    C++: may have to grok the declspecs to learn about static,
6609    complain for anonymous unions.  */
6610
6611 void
6612 shadow_tag (declspecs)
6613      tree declspecs;
6614 {
6615   tree t = check_tag_decl (declspecs);
6616
6617   if (t)
6618     maybe_process_partial_specialization (t);
6619
6620   /* This is where the variables in an anonymous union are
6621      declared.  An anonymous union declaration looks like:
6622      union { ... } ;
6623      because there is no declarator after the union, the parser
6624      sends that declaration here.  */
6625   if (t && ANON_AGGR_TYPE_P (t))
6626     {
6627       fixup_anonymous_aggr (t);
6628
6629       if (TYPE_FIELDS (t))
6630         {
6631           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6632                                       NULL_TREE);
6633           finish_anon_union (decl);
6634         }
6635     }
6636 }
6637 \f
6638 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6639
6640 tree
6641 groktypename (typename)
6642      tree typename;
6643 {
6644   if (TREE_CODE (typename) != TREE_LIST)
6645     return typename;
6646   return grokdeclarator (TREE_VALUE (typename),
6647                          TREE_PURPOSE (typename),
6648                          TYPENAME, 0, NULL_TREE);
6649 }
6650
6651 /* Decode a declarator in an ordinary declaration or data definition.
6652    This is called as soon as the type information and variable name
6653    have been parsed, before parsing the initializer if any.
6654    Here we create the ..._DECL node, fill in its type,
6655    and put it on the list of decls for the current context.
6656    The ..._DECL node is returned as the value.
6657
6658    Exception: for arrays where the length is not specified,
6659    the type is left null, to be filled in by `cp_finish_decl'.
6660
6661    Function definitions do not come here; they go to start_function
6662    instead.  However, external and forward declarations of functions
6663    do go through here.  Structure field declarations are done by
6664    grokfield and not through here.  */
6665
6666 /* Set this to zero to debug not using the temporary obstack
6667    to parse initializers.  */
6668 int debug_temp_inits = 1;
6669
6670 tree
6671 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6672      tree declarator, declspecs;
6673      int initialized;
6674      tree attributes, prefix_attributes;
6675 {
6676   register tree decl;
6677   register tree type, tem;
6678   tree context;
6679   extern int have_extern_spec;
6680   extern int used_extern_spec;
6681   tree attrlist;
6682
6683 #if 0
6684   /* See code below that used this.  */
6685   int init_written = initialized;
6686 #endif
6687
6688   /* This should only be done once on the top most decl.  */
6689   if (have_extern_spec && !used_extern_spec)
6690     {
6691       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6692                                   declspecs);
6693       used_extern_spec = 1;
6694     }
6695
6696   if (attributes || prefix_attributes)
6697     attrlist = build_scratch_list (attributes, prefix_attributes);
6698   else
6699     attrlist = NULL_TREE;
6700
6701   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6702                          attrlist);
6703                          
6704   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6705     return NULL_TREE;
6706
6707   type = TREE_TYPE (decl);
6708
6709   if (type == error_mark_node)
6710     return NULL_TREE;
6711
6712   context
6713     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6714       ? DECL_CLASS_CONTEXT (decl)
6715       : DECL_CONTEXT (decl);
6716
6717   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6718       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6719     {
6720       /* When parsing the initializer, lookup should use the object's
6721          namespace. */
6722       push_decl_namespace (context);
6723     }
6724
6725   /* We are only interested in class contexts, later. */
6726   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6727     context = NULL_TREE;
6728
6729   if (initialized)
6730     /* Is it valid for this decl to have an initializer at all?
6731        If not, set INITIALIZED to zero, which will indirectly
6732        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6733     switch (TREE_CODE (decl))
6734       {
6735       case TYPE_DECL:
6736         /* typedef foo = bar  means give foo the same type as bar.
6737            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6738            Any other case of an initialization in a TYPE_DECL is an error.  */
6739         if (pedantic || list_length (declspecs) > 1)
6740           {
6741             cp_error ("typedef `%D' is initialized", decl);
6742             initialized = 0;
6743           }
6744         break;
6745
6746       case FUNCTION_DECL:
6747         cp_error ("function `%#D' is initialized like a variable", decl);
6748         initialized = 0;
6749         break;
6750
6751       default:
6752         break;
6753       }
6754
6755   if (initialized)
6756     {
6757       if (! toplevel_bindings_p ()
6758           && DECL_EXTERNAL (decl))
6759         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6760                     decl);
6761       DECL_EXTERNAL (decl) = 0;
6762       if (toplevel_bindings_p ())
6763         TREE_STATIC (decl) = 1;
6764
6765       /* Tell `pushdecl' this is an initialized decl
6766          even though we don't yet have the initializer expression.
6767          Also tell `cp_finish_decl' it may store the real initializer.  */
6768       DECL_INITIAL (decl) = error_mark_node;
6769     }
6770
6771 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6772   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6773 #endif
6774   
6775   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6776   cplus_decl_attributes (decl, attributes, prefix_attributes);
6777
6778   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6779     {
6780       push_nested_class (context, 2);
6781
6782       if (TREE_CODE (decl) == VAR_DECL)
6783         {
6784           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6785           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6786             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6787           else
6788             {
6789               if (DECL_CONTEXT (field) != context)
6790                 {
6791                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6792                               DECL_CONTEXT (field), DECL_NAME (decl),
6793                               context, DECL_NAME (decl));
6794                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6795                 }
6796               /* Static data member are tricky; an in-class initialization
6797                  still doesn't provide a definition, so the in-class
6798                  declaration will have DECL_EXTERNAL set, but will have an
6799                  initialization.  Thus, duplicate_decls won't warn
6800                  about this situation, and so we check here.  */
6801               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6802                 cp_error ("duplicate initialization of %D", decl);
6803               if (duplicate_decls (decl, field))
6804                 decl = field;
6805             }
6806         }
6807       else
6808         {
6809           tree field = check_classfn (context, decl);
6810           if (field && duplicate_decls (decl, field))
6811             decl = field;
6812         }
6813
6814       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6815       DECL_IN_AGGR_P (decl) = 0;
6816       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6817           || CLASSTYPE_USE_TEMPLATE (context))
6818         {
6819           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6820           /* [temp.expl.spec] An explicit specialization of a static data
6821              member of a template is a definition if the declaration
6822              includes an initializer; otherwise, it is a declaration.
6823
6824              We check for processing_specialization so this only applies
6825              to the new specialization syntax.  */
6826           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6827             DECL_EXTERNAL (decl) = 1;
6828         }
6829
6830       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6831         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6832                     decl);
6833     }
6834
6835   /* Enter this declaration into the symbol table.  */
6836   tem = maybe_push_decl (decl);
6837
6838   if (processing_template_decl)
6839     {
6840       if (at_function_scope_p ())
6841         push_permanent_obstack ();
6842       tem = push_template_decl (tem);
6843       if (at_function_scope_p ())
6844         pop_obstacks ();
6845     }
6846
6847
6848 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6849   /* Tell the back-end to use or not use .common as appropriate.  If we say
6850      -fconserve-space, we want this to save .data space, at the expense of
6851      wrong semantics.  If we say -fno-conserve-space, we want this to
6852      produce errors about redefs; to do this we force variables into the
6853      data segment.  */
6854   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6855 #endif
6856   
6857   if (! processing_template_decl)
6858     start_decl_1 (tem);
6859
6860   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
6861   push_obstacks_nochange ();
6862
6863   return tem;
6864 }
6865
6866 void
6867 start_decl_1 (decl)
6868      tree decl;
6869 {
6870   tree type = TREE_TYPE (decl);
6871   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6872
6873   if (type == error_mark_node)
6874     return;
6875
6876   /* If this type of object needs a cleanup, and control may
6877      jump past it, make a new binding level so that it is cleaned
6878      up only when it is initialized first.  */
6879   if (TYPE_NEEDS_DESTRUCTOR (type)
6880       && current_binding_level->more_cleanups_ok == 0)
6881     pushlevel_temporary (1);
6882
6883   if (initialized)
6884     /* Is it valid for this decl to have an initializer at all?
6885        If not, set INITIALIZED to zero, which will indirectly
6886        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6887     {
6888       /* Don't allow initializations for incomplete types except for
6889          arrays which might be completed by the initialization.  */
6890       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6891         ;                       /* A complete type is ok.  */
6892       else if (TREE_CODE (type) != ARRAY_TYPE)
6893         {
6894           cp_error ("variable `%#D' has initializer but incomplete type",
6895                     decl);
6896           initialized = 0;
6897           type = TREE_TYPE (decl) = error_mark_node;
6898         }
6899       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6900         {
6901           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6902             cp_error ("elements of array `%#D' have incomplete type", decl);
6903           /* else we already gave an error in start_decl.  */
6904           initialized = 0;
6905         }
6906     }
6907
6908   if (!initialized
6909       && TREE_CODE (decl) != TYPE_DECL
6910       && TREE_CODE (decl) != TEMPLATE_DECL
6911       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6912     {
6913       if ((! processing_template_decl || ! uses_template_parms (type))
6914           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6915         {
6916           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6917                  decl);
6918           /* Change the type so that assemble_variable will give
6919              DECL an rtl we can live with: (mem (const_int 0)).  */
6920           type = TREE_TYPE (decl) = error_mark_node;
6921         }
6922       else
6923         {
6924           /* If any base type in the hierarchy of TYPE needs a constructor,
6925              then we set initialized to 1.  This way any nodes which are
6926              created for the purposes of initializing this aggregate
6927              will live as long as it does.  This is necessary for global
6928              aggregates which do not have their initializers processed until
6929              the end of the file.  */
6930           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6931         }
6932     }
6933
6934   if (! initialized)
6935     DECL_INITIAL (decl) = NULL_TREE;
6936 }
6937
6938 /* Handle initialization of references.
6939    These three arguments are from `cp_finish_decl', and have the
6940    same meaning here that they do there.
6941
6942    Quotes on semantics can be found in ARM 8.4.3.  */
6943
6944 static void
6945 grok_reference_init (decl, type, init)
6946      tree decl, type, init;
6947 {
6948   tree tmp;
6949
6950   if (init == NULL_TREE)
6951     {
6952       if ((DECL_LANG_SPECIFIC (decl) == 0
6953            || DECL_IN_AGGR_P (decl) == 0)
6954           && ! DECL_THIS_EXTERN (decl))
6955         cp_error ("`%D' declared as reference but not initialized", decl);
6956       return;
6957     }
6958
6959   if (init == error_mark_node)
6960     return;
6961
6962   if (TREE_CODE (init) == CONSTRUCTOR)
6963     {
6964       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6965       return;
6966     }
6967
6968   if (TREE_CODE (init) == TREE_LIST)
6969     init = build_compound_expr (init);
6970
6971   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6972     init = convert_from_reference (init);
6973
6974   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6975       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6976     {
6977       /* Note: default conversion is only called in very special cases.  */
6978       init = default_conversion (init);
6979     }
6980   
6981   /* Convert INIT to the reference type TYPE.  This may involve the
6982      creation of a temporary, whose lifetime must be the same as that
6983      of the reference.  If so, a DECL_STMT for the temporary will be
6984      added just after the DECL_STMT for DECL.  That's why we don't set
6985      DECL_INITIAL for local references (instead assigning to them
6986      explicitly); we need to allow the temporary to be initialized
6987      first.  */
6988   tmp = convert_to_reference
6989     (type, init, CONV_IMPLICIT,
6990      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6991
6992   if (tmp == error_mark_node)
6993     return;
6994   else if (tmp != NULL_TREE)
6995     {
6996       init = tmp;
6997       tmp = save_expr (tmp);
6998       if (building_stmt_tree ())
6999         {
7000           /* Initialize the declaration.  */
7001           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7002           /* Setting TREE_SIDE_EFFECTS prevents expand_expr from
7003              omitting this expression entirely.  */
7004           TREE_SIDE_EFFECTS (tmp) = 1;
7005           finish_expr_stmt (tmp);
7006         }
7007       else
7008         DECL_INITIAL (decl) = tmp;
7009     }
7010   else
7011     {
7012       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7013       return;
7014     }
7015
7016   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7017     {
7018       expand_static_init (decl, DECL_INITIAL (decl));
7019       DECL_INITIAL (decl) = NULL_TREE;
7020     }
7021   return;
7022 }
7023
7024 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7025    mucking with forces it does not comprehend (i.e. initialization with a
7026    constructor).  If we are at global scope and won't go into COMMON, fill
7027    it in with a dummy CONSTRUCTOR to force the variable into .data;
7028    otherwise we can use error_mark_node.  */
7029
7030 static tree
7031 obscure_complex_init (decl, init)
7032      tree decl, init;
7033 {
7034   if (! flag_no_inline && TREE_STATIC (decl))
7035     {
7036       if (extract_init (decl, init))
7037         return NULL_TREE;
7038     }
7039
7040 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7041   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7042     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7043                                  NULL_TREE);
7044   else
7045 #endif
7046     DECL_INITIAL (decl) = error_mark_node;
7047
7048   return init;
7049 }
7050
7051 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7052    array until we finish parsing the initializer.  If that's the
7053    situation we're in, update DECL accordingly.  */
7054
7055 static void
7056 maybe_deduce_size_from_array_init (decl, init)
7057      tree decl;
7058      tree init;
7059 {
7060   tree type = TREE_TYPE (decl);
7061
7062   if (TREE_CODE (type) == ARRAY_TYPE
7063       && TYPE_DOMAIN (type) == NULL_TREE
7064       && TREE_CODE (decl) != TYPE_DECL)
7065     {
7066       int do_default
7067         = (TREE_STATIC (decl)
7068            /* Even if pedantic, an external linkage array
7069               may have incomplete type at first.  */
7070            ? pedantic && ! DECL_EXTERNAL (decl)
7071            : !DECL_EXTERNAL (decl));
7072       tree initializer = init ? init : DECL_INITIAL (decl);
7073       int failure = complete_array_type (type, initializer, do_default);
7074
7075       if (failure == 1)
7076         cp_error ("initializer fails to determine size of `%D'", decl);
7077
7078       if (failure == 2)
7079         {
7080           if (do_default)
7081             cp_error ("array size missing in `%D'", decl);
7082           /* If a `static' var's size isn't known, make it extern as
7083              well as static, so it does not get allocated.  If it's not
7084              `static', then don't mark it extern; finish_incomplete_decl
7085              will give it a default size and it will get allocated.  */
7086           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7087             DECL_EXTERNAL (decl) = 1;
7088         }
7089
7090       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7091           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7092                               integer_zero_node))
7093         cp_error ("zero-size array `%D'", decl);
7094
7095       layout_decl (decl, 0);
7096     }
7097 }
7098
7099 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7100    any appropriate error messages regarding the layout.  */
7101
7102 static void
7103 layout_var_decl (decl)
7104      tree decl;
7105 {
7106   tree type = TREE_TYPE (decl);
7107   tree ttype = target_type (type);
7108
7109   /* If we haven't already layed out this declaration, do so now.
7110      Note that we must not call complete type for an external object
7111      because it's type might involve templates that we are not
7112      supposed to isntantiate yet.  (And it's perfectly legal to say 
7113      `extern X x' for some incomplete type `X'.)  */
7114   if (!DECL_EXTERNAL (decl))
7115     complete_type (type);
7116   if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7117     layout_decl (decl, 0);
7118
7119   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7120     {
7121       /* An automatic variable with an incomplete type: that is an error.
7122          Don't talk about array types here, since we took care of that
7123          message in grokdeclarator.  */
7124       cp_error ("storage size of `%D' isn't known", decl);
7125       TREE_TYPE (decl) = error_mark_node;
7126     }
7127   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7128     /* Let debugger know it should output info for this type.  */
7129     note_debug_info_needed (ttype);
7130
7131   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7132     note_debug_info_needed (DECL_CONTEXT (decl));
7133
7134   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7135       && DECL_SIZE (decl) != NULL_TREE
7136       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7137     {
7138       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7139         constant_expression_warning (DECL_SIZE (decl));
7140       else
7141         cp_error ("storage size of `%D' isn't constant", decl);
7142     }
7143 }
7144
7145 /* If a local static variable is declared in an inline function, or if
7146    we have a weak definition, we must endeavor to create only one
7147    instance of the variable at link-time.  */
7148
7149 static void
7150 maybe_commonize_var (decl)
7151      tree decl;
7152 {
7153   /* Static data in a function with comdat linkage also has comdat
7154      linkage.  */
7155   if (TREE_STATIC (decl)
7156       /* Don't mess with __FUNCTION__.  */
7157       && ! TREE_ASM_WRITTEN (decl)
7158       && current_function_decl
7159       && DECL_CONTEXT (decl) == current_function_decl
7160       && (DECL_THIS_INLINE (current_function_decl)
7161           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7162       && TREE_PUBLIC (current_function_decl))
7163     {
7164       /* Rather than try to get this right with inlining, we suppress
7165          inlining of such functions.  */
7166       current_function_cannot_inline
7167         = "function with static variable cannot be inline";
7168
7169       /* If flag_weak, we don't need to mess with this, as we can just
7170          make the function weak, and let it refer to its unique local
7171          copy.  This works because we don't allow the function to be
7172          inlined.  */
7173       if (! flag_weak)
7174         {
7175           if (DECL_INTERFACE_KNOWN (current_function_decl))
7176             {
7177               TREE_PUBLIC (decl) = 1;
7178               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7179             }
7180           else if (DECL_INITIAL (decl) == NULL_TREE
7181                    || DECL_INITIAL (decl) == error_mark_node)
7182             {
7183               TREE_PUBLIC (decl) = 1;
7184               DECL_COMMON (decl) = 1;
7185             }
7186           /* else we lose. We can only do this if we can use common,
7187              which we can't if it has been initialized.  */
7188
7189           if (TREE_PUBLIC (decl))
7190             DECL_ASSEMBLER_NAME (decl)
7191               = build_static_name (current_function_decl, DECL_NAME (decl));
7192           else if (! DECL_ARTIFICIAL (decl))
7193             {
7194               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7195               cp_warning_at ("  you can work around this by removing the initializer", decl);
7196             }
7197         }
7198     }
7199   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7200     /* Set it up again; we might have set DECL_INITIAL since the last
7201        time.  */
7202     comdat_linkage (decl);
7203 }
7204
7205 /* Issue an error message if DECL is an uninitialized const variable.  */
7206
7207 static void
7208 check_for_uninitialized_const_var (decl)
7209      tree decl;
7210 {
7211   tree type = TREE_TYPE (decl);
7212
7213   /* ``Unless explicitly declared extern, a const object does not have
7214      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7215      7.1.6 */
7216   if (TREE_CODE (decl) == VAR_DECL
7217       && TREE_CODE (type) != REFERENCE_TYPE
7218       && CP_TYPE_CONST_P (type)
7219       && !TYPE_NEEDS_CONSTRUCTING (type)
7220       && !DECL_INITIAL (decl))
7221     cp_error ("uninitialized const `%D'", decl);
7222 }
7223
7224 /* Verify INIT (the initializer for DECL), and record the
7225    initialization in DECL_INITIAL, if appropriate.  Returns a new
7226    value for INIT.  */
7227
7228 static tree
7229 check_initializer (decl, init)
7230      tree decl;
7231      tree init;
7232 {
7233   tree type;
7234
7235   if (TREE_CODE (decl) == FIELD_DECL)
7236     return init;
7237
7238   type = TREE_TYPE (decl);
7239
7240   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7241   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7242     init = NULL_TREE;
7243
7244   /* Check the initializer.  */
7245   if (init)
7246     {
7247       /* Things that are going to be initialized need to have complete
7248          type.  */
7249       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7250
7251       if (type == error_mark_node)
7252         /* We will have already complained.  */
7253         init = NULL_TREE;
7254       else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7255         {
7256           cp_error ("variable-sized object `%D' may not be initialized", decl);
7257           init = NULL_TREE;
7258         }
7259       else if (TREE_CODE (type) == ARRAY_TYPE
7260                && !TYPE_SIZE (TREE_TYPE (type)))
7261         {
7262           cp_error ("elements of array `%#D' have incomplete type", decl);
7263           init = NULL_TREE;
7264         }
7265       else if (!TYPE_SIZE (type))
7266         {
7267           cp_error ("`%D' has incomplete type", decl);
7268           TREE_TYPE (decl) = error_mark_node;
7269           init = NULL_TREE;
7270         }
7271     }
7272
7273   if (TREE_CODE (decl) == CONST_DECL)
7274     {
7275       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7276
7277       DECL_INITIAL (decl) = init;
7278
7279       /* This will keep us from needing to worry about our obstacks.  */
7280       my_friendly_assert (init != NULL_TREE, 149);
7281       init = NULL_TREE;
7282     }
7283   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7284     {
7285       if (TREE_STATIC (decl))
7286         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7287       grok_reference_init (decl, type, init);
7288       init = NULL_TREE;
7289     }
7290   else if (init)
7291     {
7292       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7293         {
7294           if (TREE_CODE (type) == ARRAY_TYPE)
7295             init = digest_init (type, init, (tree *) 0);
7296           else if (TREE_CODE (init) == CONSTRUCTOR
7297                    && TREE_HAS_CONSTRUCTOR (init))
7298             {
7299               if (TYPE_NON_AGGREGATE_CLASS (type))
7300                 {
7301                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7302                             decl);
7303                   init = error_mark_node;
7304                 }
7305               else
7306                 goto dont_use_constructor;
7307             }
7308         }
7309       else
7310         {
7311         dont_use_constructor:
7312           if (TREE_CODE (init) != TREE_VEC)
7313             init = store_init_value (decl, init);
7314         }
7315
7316       if (init)
7317         /* We must hide the initializer so that expand_decl
7318            won't try to do something it does not understand.  */
7319         init = obscure_complex_init (decl, init);
7320     }
7321   else if (DECL_EXTERNAL (decl))
7322     ;
7323   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7324            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7325     {
7326       tree core_type = strip_array_types (type);
7327
7328       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7329         {
7330           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7331             cp_error ("structure `%D' with uninitialized const members", decl);
7332           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7333             cp_error ("structure `%D' with uninitialized reference members",
7334                       decl);
7335         }
7336
7337       check_for_uninitialized_const_var (decl);
7338
7339       if (TYPE_SIZE (type) != NULL_TREE
7340           && TYPE_NEEDS_CONSTRUCTING (type))
7341         init = obscure_complex_init (decl, NULL_TREE);
7342
7343     }
7344   else
7345     check_for_uninitialized_const_var (decl);
7346   
7347   return init;
7348 }
7349
7350 /* If DECL is not a local variable, give it RTL.  */
7351
7352 static void
7353 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7354      tree decl;
7355      tree init;
7356      const char *asmspec;
7357 {
7358   int toplev;
7359   tree type;
7360
7361   type = TREE_TYPE (decl);
7362   toplev = toplevel_bindings_p ();
7363
7364   /* Handle non-variables up front.  */
7365   if (TREE_CODE (decl) != VAR_DECL)
7366     {
7367       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7368       return;
7369     }
7370
7371   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7372   if (asmspec)
7373     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7374
7375   if (DECL_VIRTUAL_P (decl))
7376     make_decl_rtl (decl, NULL_PTR, toplev);
7377   else if (TREE_READONLY (decl)
7378            && DECL_INITIAL (decl) != NULL_TREE
7379            && DECL_INITIAL (decl) != error_mark_node
7380            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7381     {
7382       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7383
7384       if (! toplev
7385           && TREE_STATIC (decl)
7386           && ! TREE_SIDE_EFFECTS (decl)
7387           && ! TREE_PUBLIC (decl)
7388           && ! DECL_EXTERNAL (decl)
7389           && ! TYPE_NEEDS_DESTRUCTOR (type)
7390           && DECL_MODE (decl) != BLKmode)
7391         {
7392           /* If this variable is really a constant, then fill its DECL_RTL
7393              slot with something which won't take up storage.
7394              If something later should take its address, we can always give
7395              it legitimate RTL at that time.  */
7396           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7397           store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7398           TREE_ASM_WRITTEN (decl) = 1;
7399         }
7400       else if (toplev && ! TREE_PUBLIC (decl))
7401         {
7402           /* If this is a static const, change its apparent linkage
7403              if it belongs to a #pragma interface.  */
7404           if (!interface_unknown)
7405             {
7406               TREE_PUBLIC (decl) = 1;
7407               DECL_EXTERNAL (decl) = interface_only;
7408             }
7409           make_decl_rtl (decl, asmspec, toplev);
7410         }
7411       else if (toplev)
7412         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7413     }
7414   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7415     {
7416       my_friendly_assert (TREE_STATIC (decl), 19990828);
7417
7418       if (init == NULL_TREE
7419 #ifdef DEFAULT_STATIC_DEFS
7420           /* If this code is dead, then users must
7421              explicitly declare static member variables
7422              outside the class def'n as well.  */
7423           && TYPE_NEEDS_CONSTRUCTING (type)
7424 #endif
7425           )
7426         {
7427           DECL_EXTERNAL (decl) = 1;
7428           make_decl_rtl (decl, asmspec, 1);
7429         }
7430       else
7431         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7432     }
7433   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7434            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7435     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7436 }
7437
7438 /* The old ARM scoping rules injected variables declared in the
7439    initialization statement of a for-statement into the surrounding
7440    scope.  We support this usage, in order to be backward-compatible.
7441    DECL is a just-declared VAR_DECL; if necessary inject its
7442    declaration into the surrounding scope.  */
7443
7444 void
7445 maybe_inject_for_scope_var (decl)
7446      tree decl;
7447 {
7448   if (current_binding_level->is_for_scope)
7449     {
7450       struct binding_level *outer 
7451         = current_binding_level->level_chain;
7452
7453       /* Check to see if the same name is already bound at the outer
7454          level, either because it was directly declared, or because a
7455          dead for-decl got preserved.  In either case, the code would
7456          not have been valid under the ARM scope rules, so clear
7457          is_for_scope for the current_binding_level.
7458
7459          Otherwise, we need to preserve the temp slot for decl to last
7460          into the outer binding level.  */
7461
7462       tree outer_binding 
7463         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7464               
7465       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7466           && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7467               == VAR_DECL)
7468           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7469         {
7470           BINDING_VALUE (outer_binding)
7471             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7472           current_binding_level->is_for_scope = 0;
7473         }
7474       else if (DECL_IN_MEMORY_P (decl))
7475         preserve_temp_slots (DECL_RTL (decl));
7476     }
7477 }
7478
7479 /* Generate code to initialize DECL (a local variable).  */
7480
7481 void
7482 initialize_local_var (decl, init, flags)
7483      tree decl;
7484      tree init;
7485      int flags;
7486 {
7487   tree type = TREE_TYPE (decl);
7488
7489   /* If the type is bogus, don't bother initializing the variable.  */
7490   if (type == error_mark_node)
7491     return;
7492
7493   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7494     {
7495       /* If we used it already as memory, it must stay in memory.  */
7496       DECL_INITIAL (decl) = NULL_TREE;
7497       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7498     }
7499
7500   /* Local statics are handled differently from ordinary automatic
7501      variables.  */
7502   if (TREE_STATIC (decl))
7503     {
7504       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7505           || TYPE_NEEDS_DESTRUCTOR (type))
7506         expand_static_init (decl, init);
7507       return;
7508     }
7509
7510   if (DECL_SIZE (decl) && type != error_mark_node)
7511     {
7512       int already_used;
7513   
7514       /* Compute and store the initial value.  */
7515       already_used = TREE_USED (decl) || TREE_USED (type);
7516
7517       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7518         {
7519           int saved_stmts_are_full_exprs_p;
7520
7521           emit_line_note (DECL_SOURCE_FILE (decl),
7522                           DECL_SOURCE_LINE (decl));
7523           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7524           stmts_are_full_exprs_p = 1;
7525           finish_expr_stmt (build_aggr_init (decl, init, flags));
7526           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7527         }
7528
7529       /* Set this to 0 so we can tell whether an aggregate which was
7530          initialized was ever used.  Don't do this if it has a
7531          destructor, so we don't complain about the 'resource
7532          allocation is initialization' idiom.  Now set
7533          attribute((unused)) on types so decls of that type will be
7534          marked used. (see TREE_USED, above.)  */
7535       if (TYPE_NEEDS_CONSTRUCTING (type)
7536           && ! already_used
7537           && !TYPE_NEEDS_DESTRUCTOR (type) 
7538           && DECL_NAME (decl))
7539         TREE_USED (decl) = 0;
7540       else if (already_used)
7541         TREE_USED (decl) = 1;
7542     }
7543 }
7544
7545 /* Generate code to destroy DECL (a local variable).  */
7546
7547 void 
7548 destroy_local_var (decl)
7549      tree decl;
7550 {
7551   tree type = TREE_TYPE (decl);
7552   tree cleanup;
7553
7554   /* Only variables get cleaned up.  */
7555   if (TREE_CODE (decl) != VAR_DECL)
7556     return;
7557   
7558   /* And only things with destructors need cleaning up.  */
7559   if (!TYPE_NEEDS_DESTRUCTOR (type))
7560     return;
7561
7562   if (TREE_CODE (decl) == VAR_DECL &&
7563       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7564     /* We don't clean up things that aren't defined in this
7565        translation unit, or that need a static cleanup.  The latter
7566        are handled by finish_file.  */
7567     return;
7568   
7569   /* Compute the cleanup.  */
7570   cleanup = maybe_build_cleanup (decl);
7571
7572   /* Record the cleanup required for this declaration.  */
7573   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7574       && cleanup)
7575     finish_decl_cleanup (decl, cleanup);
7576 }
7577
7578 /* Let the back-end know about DECL.  */
7579
7580 void
7581 emit_local_var (decl)
7582      tree decl;
7583 {
7584   /* Create RTL for this variable.  */
7585   if (DECL_RTL (decl))
7586     /* Only a RESULT_DECL should have non-NULL RTL when
7587                      arriving here.  All other local variables are
7588                      assigned RTL in this function.  */
7589     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 
7590                         19990828);
7591   else
7592     {
7593       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7594         /* The user must have specified an assembler name for this
7595            variable.  Set that up now.  */
7596         rest_of_decl_compilation 
7597           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7598            /*top_level=*/0, /*at_end=*/0);
7599       else
7600         expand_decl (decl);
7601     }
7602
7603   /* Actually do the initialization.  */
7604   expand_start_target_temps ();
7605   expand_decl_init (decl);
7606   expand_end_target_temps ();
7607 }
7608
7609 /* Finish processing of a declaration;
7610    install its line number and initial value.
7611    If the length of an array type is not known before,
7612    it must be determined now, from the initial value, or it is an error.
7613
7614    Call `pop_obstacks' iff NEED_POP is nonzero.
7615
7616    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7617    for aggregates that have constructors alive on the permanent obstack,
7618    so that the global initializing functions can be written at the end.
7619
7620    INIT0 holds the value of an initializer that should be allowed to escape
7621    the normal rules.
7622
7623    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7624    if the (init) syntax was used.
7625
7626    For functions that take default parameters, DECL points to its
7627    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7628    subsequently lower and lower forms of instantiation, checking for
7629    ambiguity as it goes.  This can be sped up later.  */
7630
7631 void
7632 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7633      tree decl, init;
7634      tree asmspec_tree;
7635      int need_pop;
7636      int flags;
7637 {
7638   register tree type;
7639   tree ttype = NULL_TREE;
7640   int temporary = allocation_temporary_p ();
7641   const char *asmspec = NULL;
7642   int was_readonly = 0;
7643
7644   /* If this is 0, then we did not change obstacks.  */
7645   if (! decl)
7646     {
7647       if (init)
7648         error ("assignment (not initialization) in declaration");
7649       return;
7650     }
7651
7652   /* If a name was specified, get the string.  */
7653   if (asmspec_tree)
7654       asmspec = TREE_STRING_POINTER (asmspec_tree);
7655
7656   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7657     {
7658       cp_error ("Cannot initialize `%D' to namespace `%D'",
7659                 decl, init);
7660       init = NULL_TREE;
7661     }
7662
7663   if (current_class_type
7664       && DECL_REAL_CONTEXT (decl) == current_class_type
7665       && TYPE_BEING_DEFINED (current_class_type)
7666       && (DECL_INITIAL (decl) || init))
7667     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7668
7669   if (TREE_CODE (decl) == VAR_DECL 
7670       && DECL_CONTEXT (decl)
7671       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7672       && DECL_CONTEXT (decl) != current_namespace
7673       && init)
7674     {
7675       /* Leave the namespace of the object. */
7676       pop_decl_namespace ();
7677     }
7678
7679   type = TREE_TYPE (decl);
7680
7681   if (type == error_mark_node)
7682     {
7683       if (toplevel_bindings_p () && temporary)
7684         end_temporary_allocation ();
7685
7686       return;
7687     }
7688
7689   /* Add this declaration to the statement-tree.  */
7690   if (building_stmt_tree () 
7691       && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7692     add_decl_stmt (decl);
7693
7694   if (TYPE_HAS_MUTABLE_P (type))
7695     TREE_READONLY (decl) = 0;
7696
7697   if (processing_template_decl)
7698     {
7699       if (init && DECL_INITIAL (decl))
7700         DECL_INITIAL (decl) = init;
7701       goto finish_end0;
7702     }
7703
7704   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7705   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7706
7707   /* Take care of TYPE_DECLs up front.  */
7708   if (TREE_CODE (decl) == TYPE_DECL)
7709     {
7710       if (init && DECL_INITIAL (decl))
7711         {
7712           /* typedef foo = bar; store the type of bar as the type of foo.  */
7713           TREE_TYPE (decl) = type = TREE_TYPE (init);
7714           DECL_INITIAL (decl) = init = NULL_TREE;
7715         }
7716       if (type != error_mark_node
7717           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7718         {
7719           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7720             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7721           set_identifier_type_value (DECL_NAME (decl), type);
7722           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7723         }
7724       GNU_xref_decl (current_function_decl, decl);
7725
7726       /* If we have installed this as the canonical typedef for this
7727          type, and that type has not been defined yet, delay emitting
7728          the debug information for it, as we will emit it later.  */
7729       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7730           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7731         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7732
7733       rest_of_decl_compilation (decl, NULL_PTR,
7734                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7735       goto finish_end;
7736     }
7737
7738   if (TREE_CODE (decl) != FUNCTION_DECL)
7739     ttype = target_type (type);
7740
7741   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7742       && TYPE_NEEDS_CONSTRUCTING (type))
7743     {
7744       /* Currently, GNU C++ puts constants in text space, making them
7745          impossible to initialize.  In the future, one would hope for
7746          an operating system which understood the difference between
7747          initialization and the running of a program.  */
7748       was_readonly = 1;
7749       TREE_READONLY (decl) = 0;
7750     }
7751
7752   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7753     {
7754       /* This must override the asm specifier which was placed by
7755          grokclassfn.  Lay this out fresh.  */
7756       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7757       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7758       make_decl_rtl (decl, asmspec, 0);
7759     }
7760
7761   /* Deduce size of array from initialization, if not already known.  */
7762   maybe_deduce_size_from_array_init (decl, init);
7763   init = check_initializer (decl, init);
7764
7765   GNU_xref_decl (current_function_decl, decl);
7766
7767   /* For top-level declaration, the initial value was read in
7768      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7769      must go in the permanent obstack; but don't discard the
7770      temporary data yet.  */
7771
7772   if (toplevel_bindings_p () && temporary)
7773     end_temporary_allocation ();
7774
7775   if (TREE_CODE (decl) == VAR_DECL)
7776     layout_var_decl (decl);
7777
7778   /* Output the assembler code and/or RTL code for variables and functions,
7779      unless the type is an undefined structure or union.
7780      If not, it will get done when the type is completed.  */
7781   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7782       || TREE_CODE (decl) == RESULT_DECL)
7783     {
7784       if (TREE_CODE (decl) == VAR_DECL)
7785         maybe_commonize_var (decl);
7786
7787       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7788
7789       if (TREE_CODE (type) == FUNCTION_TYPE 
7790           || TREE_CODE (type) == METHOD_TYPE)
7791         abstract_virtuals_error (decl, 
7792                                  strip_array_types (TREE_TYPE (type)));
7793       else 
7794         abstract_virtuals_error (decl, strip_array_types (type));
7795
7796       if (TREE_CODE (decl) == FUNCTION_DECL)
7797         ;
7798       else if (DECL_EXTERNAL (decl)
7799                && ! (DECL_LANG_SPECIFIC (decl)
7800                      && DECL_NOT_REALLY_EXTERN (decl)))
7801         {
7802           if (init)
7803             DECL_INITIAL (decl) = init;
7804         }
7805       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7806         {
7807           /* This is a local declaration.  */
7808           if (doing_semantic_analysis_p ())
7809             maybe_inject_for_scope_var (decl);
7810           /* Initialize the local variable.  But, if we're building a
7811              statement-tree, we'll do the initialization when we
7812              expand the tree.  */
7813           if (processing_template_decl)
7814             {
7815               if (init || DECL_INITIAL (decl) == error_mark_node)
7816                 DECL_INITIAL (decl) = init;
7817             }
7818           else
7819             {
7820               /* If we're not building RTL, then we need to do so
7821                  now.  */
7822               if (!building_stmt_tree ())
7823                 emit_local_var (decl);
7824               /* Initialize the variable.  */
7825               initialize_local_var (decl, init, flags);
7826               /* Clean up the variable.  */
7827               destroy_local_var (decl);
7828             }
7829         }
7830       else if (TREE_STATIC (decl) && type != error_mark_node)
7831         {
7832           /* Cleanups for static variables are handled by `finish_file'.  */
7833           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7834               || TYPE_NEEDS_DESTRUCTOR (type))
7835             expand_static_init (decl, init);
7836         }
7837     finish_end0:
7838
7839       /* Undo call to `pushclass' that was done in `start_decl'
7840          due to initialization of qualified member variable.
7841          I.e., Foo::x = 10;  */
7842       {
7843         tree context = DECL_REAL_CONTEXT (decl);
7844         if (context
7845             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7846             && (TREE_CODE (decl) == VAR_DECL
7847                 /* We also have a pushclass done that we need to undo here
7848                    if we're at top level and declare a method.  */
7849                 || TREE_CODE (decl) == FUNCTION_DECL)
7850             /* If size hasn't been set, we're still defining it,
7851                and therefore inside the class body; don't pop
7852                the binding level..  */
7853             && TYPE_SIZE (context) != NULL_TREE
7854             && context == current_class_type)
7855           pop_nested_class ();
7856       }
7857     }
7858
7859  finish_end:
7860
7861   /* If requested, warn about definitions of large data objects.  */
7862
7863   if (warn_larger_than
7864       && ! processing_template_decl
7865       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7866       && !DECL_EXTERNAL (decl))
7867     {
7868       register tree decl_size = DECL_SIZE (decl);
7869
7870       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7871         {
7872           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7873
7874           if (units > larger_than_size)
7875             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7876         }
7877     }
7878
7879   if (need_pop)
7880     /* Resume permanent allocation, if not within a function.  The
7881        corresponding push_obstacks_nochange is in start_decl,
7882        start_method, groktypename, and in grokfield.  */
7883     pop_obstacks ();
7884
7885   if (was_readonly)
7886     TREE_READONLY (decl) = 1;
7887 }
7888
7889 /* This is here for a midend callback from c-common.c */
7890
7891 void
7892 finish_decl (decl, init, asmspec_tree)
7893      tree decl, init;
7894      tree asmspec_tree;
7895 {
7896   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7897 }
7898
7899 /* Generate code to handle the destruction of the function-scoped
7900    static variable DECL.  */
7901
7902 static void
7903 destroy_local_static (decl)
7904      tree decl;
7905 {
7906   tree cleanup, fcall;
7907   tree compound_stmt;
7908   int saved_flag_access_control;
7909
7910   if (atexit_node == 0)
7911     {
7912       tree atexit_fndecl, PFV, pfvlist;
7913       /* Remember this information until end of file.  */
7914       push_obstacks (&permanent_obstack, &permanent_obstack);
7915       PFV = build_pointer_type (build_function_type
7916                                 (void_type_node, void_list_node));
7917
7918       pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7919
7920       push_lang_context (lang_name_c);
7921       /* Note that we do not call pushdecl for this function;
7922          there's no reason that this declaration should be
7923          accessible to anyone.  */
7924       atexit_fndecl
7925         = define_function ("atexit",
7926                            build_function_type (void_type_node,
7927                                                 pfvlist),
7928                            /*pfn=*/0, NULL_PTR);
7929       mark_used (atexit_fndecl);
7930       atexit_node = default_conversion (atexit_fndecl);
7931       pop_lang_context ();
7932       pop_obstacks ();
7933     }
7934               
7935   /* Call build_cleanup before we enter the anonymous function so that
7936      any access checks will be done relative to the current scope,
7937      rather than the scope of the anonymous function.  */
7938   build_cleanup (decl);
7939
7940   /* Now start the function.  */
7941   cleanup = start_anon_func ();
7942
7943   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7944      to the original function, rather than the anonymous one.  That
7945      will make the back-end think that nested functions are in use,
7946      which causes confusion.  */
7947   saved_flag_access_control = flag_access_control;
7948   flag_access_control = 0;
7949   fcall = build_cleanup (decl);
7950   flag_access_control = saved_flag_access_control;
7951
7952   /* Create the body of the anonymous function.  */
7953   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7954   finish_expr_stmt (fcall);
7955   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7956   end_anon_func ();
7957
7958   /* Call atexit with the cleanup function.  */
7959   mark_addressable (cleanup);
7960   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7961   fcall = build_function_call (atexit_node,
7962                                tree_cons (NULL_TREE, 
7963                                           cleanup, 
7964                                           NULL_TREE));
7965   finish_expr_stmt (fcall);
7966 }
7967
7968 void
7969 expand_static_init (decl, init)
7970      tree decl;
7971      tree init;
7972 {
7973   tree oldstatic = value_member (decl, static_aggregates);
7974
7975   if (oldstatic)
7976     {
7977       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7978         cp_error ("multiple initializations given for `%D'", decl);
7979     }
7980   else if (! toplevel_bindings_p ())
7981     {
7982       /* Emit code to perform this initialization but once.  */
7983       tree temp;
7984       tree if_stmt;
7985       tree then_clause;
7986       tree assignment;
7987       tree temp_init;
7988
7989       /* Remember this information until end of file.  */
7990       push_obstacks (&permanent_obstack, &permanent_obstack);
7991
7992       /* Emit code to perform this initialization but once.  This code
7993          looks like:
7994
7995            static int temp = 0;
7996            if (!temp) {
7997              // Do initialization.
7998              temp = 1;
7999              // Register variable for destruction at end of program.
8000            }
8001
8002          Note that the `temp' variable is only set to 1 *after* the
8003          initialization is complete.  This ensures that an exception,
8004          thrown during the construction, will cause the variable to
8005          reinitialized when we pass through this code again, as per:
8006          
8007            [stmt.dcl]
8008
8009            If the initialization exits by throwing an exception, the
8010            initialization is not complete, so it will be tried again
8011            the next time control enters the declaration.
8012
8013          In theory, this process should be thread-safe, too; multiple
8014          threads should not be able to initialize the variable more
8015          than once.  We don't yet attempt to ensure thread-safety.  */
8016       temp = get_temp_name (integer_type_node, 1);
8017       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8018
8019       /* Begin the conditional initialization.  */
8020       if_stmt = begin_if_stmt ();
8021       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8022                                             integer_zero_node), 
8023                            if_stmt);
8024       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8025
8026       /* Do the initialization itself.  */
8027       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8028           || (init && TREE_CODE (init) == TREE_LIST))
8029         assignment = build_aggr_init (decl, init, 0);
8030       else if (init)
8031         {
8032           /* The initialization we're doing here is just a bitwise
8033              copy.  */
8034           assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8035           TREE_SIDE_EFFECTS (assignment) = 1;
8036         }
8037       else
8038         assignment = NULL_TREE;
8039
8040       /* Once the assignment is complete, set TEMP to 1.  Since the
8041          construction of the static object is complete at this point,
8042          we want to make sure TEMP is set to 1 even if a temporary
8043          constructed during the initialization throws an exception
8044          when it is destroyed.  So, we combine the initialization and
8045          the assignment to TEMP into a single expression, ensuring
8046          that when we call finish_expr_stmt the cleanups will not be
8047          run until after TEMP is set to 1.  */
8048       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8049       if (assignment)
8050         {
8051           assignment = tree_cons (NULL_TREE, assignment,
8052                                   build_tree_list (NULL_TREE, 
8053                                                    temp_init));
8054           assignment = build_compound_expr (assignment);
8055         }
8056       else
8057         assignment = temp_init;
8058       finish_expr_stmt (assignment);
8059
8060       /* Use atexit to register a function for destroying this static
8061          variable.  */
8062       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8063         destroy_local_static (decl);
8064
8065       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8066       finish_then_clause (if_stmt);
8067       finish_if_stmt ();
8068
8069       /* Resume old (possibly temporary) allocation.  */
8070       pop_obstacks ();
8071     }
8072   else
8073     {
8074       /* This code takes into account memory allocation policy of
8075          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8076          hold for this object, then we must make permanent the storage
8077          currently in the temporary obstack.  */
8078       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8079         preserve_initializer ();
8080       static_aggregates = tree_cons (init, decl, static_aggregates);
8081     }
8082 }
8083
8084 /* Finish the declaration of a catch-parameter.  */
8085
8086 tree
8087 start_handler_parms (declspecs, declarator)
8088      tree declspecs;
8089      tree declarator;
8090 {
8091   tree decl;
8092   if (declspecs)
8093     {
8094       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8095                              1, NULL_TREE);
8096       if (decl == NULL_TREE)
8097         error ("invalid catch parameter");
8098     }
8099   else
8100     decl = NULL_TREE;
8101
8102   return decl;
8103 }
8104
8105 \f
8106 /* Make TYPE a complete type based on INITIAL_VALUE.
8107    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8108    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8109
8110 int
8111 complete_array_type (type, initial_value, do_default)
8112      tree type, initial_value;
8113      int do_default;
8114 {
8115   register tree maxindex = NULL_TREE;
8116   int value = 0;
8117   
8118   /* Allocate on the same obstack as TYPE.  */
8119   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8120   
8121   if (initial_value)
8122     {
8123       /* Note MAXINDEX  is really the maximum index,
8124          one less than the size.  */
8125       if (TREE_CODE (initial_value) == STRING_CST)
8126         {
8127           int eltsize
8128             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8129           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8130                                    / eltsize) - 1, 0);
8131         }
8132       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8133         {
8134           tree elts = CONSTRUCTOR_ELTS (initial_value);
8135           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8136           for (; elts; elts = TREE_CHAIN (elts))
8137             {
8138               if (TREE_PURPOSE (elts))
8139                 maxindex = TREE_PURPOSE (elts);
8140               else
8141                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8142             }
8143           maxindex = copy_node (maxindex);
8144         }
8145       else
8146         {
8147           /* Make an error message unless that happened already.  */
8148           if (initial_value != error_mark_node)
8149             value = 1;
8150           else
8151             initial_value = NULL_TREE;
8152
8153           /* Prevent further error messages.  */
8154           maxindex = build_int_2 (0, 0);
8155         }
8156     }
8157
8158   if (!maxindex)
8159     {
8160       if (do_default)
8161         maxindex = build_int_2 (0, 0);
8162       value = 2;
8163     }
8164
8165   if (maxindex)
8166     {
8167       tree itype;
8168       tree domain;
8169
8170       domain = build_index_type (maxindex);
8171       TYPE_DOMAIN (type) = domain;
8172
8173       if (! TREE_TYPE (maxindex))
8174         TREE_TYPE (maxindex) = domain;
8175       if (initial_value)
8176         itype = TREE_TYPE (initial_value);
8177       else
8178         itype = NULL;
8179       if (itype && !TYPE_DOMAIN (itype))
8180         TYPE_DOMAIN (itype) = domain;
8181       /* The type of the main variant should never be used for arrays
8182          of different sizes.  It should only ever be completed with the
8183          size of the array.  */
8184       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8185         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8186     }
8187
8188   pop_obstacks();
8189   
8190   /* Lay out the type now that we can get the real answer.  */
8191
8192   layout_type (type);
8193
8194   return value;
8195 }
8196 \f
8197 /* Return zero if something is declared to be a member of type
8198    CTYPE when in the context of CUR_TYPE.  STRING is the error
8199    message to print in that case.  Otherwise, quietly return 1.  */
8200
8201 static int
8202 member_function_or_else (ctype, cur_type, string)
8203      tree ctype, cur_type;
8204      const char *string;
8205 {
8206   if (ctype && ctype != cur_type)
8207     {
8208       error (string, TYPE_NAME_STRING (ctype));
8209       return 0;
8210     }
8211   return 1;
8212 }
8213 \f
8214 /* Subroutine of `grokdeclarator'.  */
8215
8216 /* Generate errors possibly applicable for a given set of specifiers.
8217    This is for ARM $7.1.2.  */
8218
8219 static void
8220 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8221      tree object;
8222      const char *type;
8223      int virtualp, quals, friendp, raises, inlinep;
8224 {
8225   if (virtualp)
8226     cp_error ("`%D' declared as a `virtual' %s", object, type);
8227   if (inlinep)
8228     cp_error ("`%D' declared as an `inline' %s", object, type);
8229   if (quals)
8230     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8231               object, type);
8232   if (friendp)
8233     cp_error_at ("`%D' declared as a friend", object);
8234   if (raises)
8235     cp_error_at ("`%D' declared with an exception specification", object);
8236 }
8237
8238 /* CTYPE is class type, or null if non-class.
8239    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8240    or METHOD_TYPE.
8241    DECLARATOR is the function's name.
8242    VIRTUALP is truthvalue of whether the function is virtual or not.
8243    FLAGS are to be passed through to `grokclassfn'.
8244    QUALS are qualifiers indicating whether the function is `const'
8245    or `volatile'.
8246    RAISES is a list of exceptions that this function can raise.
8247    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8248    not look, and -1 if we should not call `grokclassfn' at all.  
8249
8250    Returns `NULL_TREE' if something goes wrong, after issuing
8251    applicable error messages.  */
8252
8253 static tree
8254 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8255             raises, check, friendp, publicp, inlinep, funcdef_flag,
8256             template_count, in_namespace)
8257      tree ctype, type;
8258      tree declarator;
8259      tree orig_declarator;
8260      int virtualp;
8261      enum overload_flags flags;
8262      tree quals, raises;
8263      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8264      tree in_namespace;
8265 {
8266   tree cname, decl;
8267   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8268   int has_default_arg = 0;
8269   tree t;
8270
8271   if (ctype)
8272     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8273       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8274   else
8275     cname = NULL_TREE;
8276
8277   if (raises)
8278     {
8279       type = build_exception_variant (type, raises);
8280     }
8281
8282   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8283   /* Propagate volatile out from type to decl. */
8284   if (TYPE_VOLATILE (type))
8285     TREE_THIS_VOLATILE (decl) = 1;
8286
8287   /* If this decl has namespace scope, set that up.  */
8288   if (in_namespace)
8289     set_decl_namespace (decl, in_namespace, friendp);
8290   else if (publicp && ! ctype)
8291     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8292
8293   /* `main' and builtins have implicit 'C' linkage.  */
8294   if ((MAIN_NAME_P (declarator)
8295        || (IDENTIFIER_LENGTH (declarator) > 10
8296            && IDENTIFIER_POINTER (declarator)[0] == '_'
8297            && IDENTIFIER_POINTER (declarator)[1] == '_'
8298            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8299       && current_lang_name == lang_name_cplusplus
8300       && ctype == NULL_TREE
8301       /* NULL_TREE means global namespace.  */
8302       && DECL_CONTEXT (decl) == NULL_TREE)
8303     DECL_LANGUAGE (decl) = lang_c;
8304
8305   /* Should probably propagate const out from type to decl I bet (mrs).  */
8306   if (staticp)
8307     {
8308       DECL_STATIC_FUNCTION_P (decl) = 1;
8309       DECL_CONTEXT (decl) = ctype;
8310     }
8311
8312   if (ctype)
8313     DECL_CLASS_CONTEXT (decl) = ctype;
8314
8315   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8316     {
8317       if (processing_template_decl)
8318         error ("cannot declare `main' to be a template");
8319       if (inlinep)
8320         error ("cannot declare `main' to be inline");
8321       else if (! publicp)
8322         error ("cannot declare `main' to be static");
8323       inlinep = 0;
8324       publicp = 1;
8325     }
8326
8327   /* Members of anonymous types and local classes have no linkage; make
8328      them internal.  */
8329   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8330                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8331     publicp = 0;
8332
8333   if (publicp)
8334     {
8335       /* [basic.link]: A name with no linkage (notably, the name of a class
8336          or enumeration declared in a local scope) shall not be used to
8337          declare an entity with linkage.
8338
8339          Only check this for public decls for now.  */
8340       t = no_linkage_check (TREE_TYPE (decl));
8341       if (t)
8342         {
8343           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8344             {
8345               if (DECL_LANGUAGE (decl) == lang_c)
8346                 /* Allow this; it's pretty common in C.  */;
8347               else
8348                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8349                             decl);
8350             }
8351           else
8352             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8353                         decl, t);
8354         }
8355     }
8356
8357   TREE_PUBLIC (decl) = publicp;
8358   if (! publicp)
8359     {
8360       DECL_INTERFACE_KNOWN (decl) = 1;
8361       DECL_NOT_REALLY_EXTERN (decl) = 1;
8362     }
8363
8364   if (inlinep)
8365     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8366
8367   DECL_EXTERNAL (decl) = 1;
8368   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8369     {
8370       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8371                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8372       quals = NULL_TREE;
8373     }
8374
8375   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8376     grok_op_properties (decl, virtualp, check < 0);
8377
8378   if (ctype && hack_decl_function_context (decl))
8379     DECL_NO_STATIC_CHAIN (decl) = 1;
8380
8381   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8382     if (TREE_PURPOSE (t)
8383         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8384       {
8385         has_default_arg = 1;
8386         break;
8387       }
8388
8389   if (friendp
8390       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8391     {
8392       if (funcdef_flag)
8393         cp_error
8394           ("defining explicit specialization `%D' in friend declaration",
8395            orig_declarator);
8396       else
8397         {
8398           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8399             {
8400               /* Something like `template <class T> friend void f<T>()'.  */
8401               cp_error ("template-id `%D' in declaration of primary template", 
8402                         orig_declarator);
8403               return NULL_TREE;
8404             }
8405
8406
8407           /* A friend declaration of the form friend void f<>().  Record
8408              the information in the TEMPLATE_ID_EXPR.  */
8409           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8410           DECL_TEMPLATE_INFO (decl)
8411             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8412                          TREE_OPERAND (orig_declarator, 1),
8413                          NULL_TREE);
8414
8415           if (has_default_arg)
8416             {
8417               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8418                         decl);
8419               return NULL_TREE;
8420             }
8421
8422           if (inlinep)
8423             {
8424               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8425                         decl);
8426               return NULL_TREE;
8427             }
8428         }
8429     }
8430
8431   if (has_default_arg)
8432     add_defarg_fn (decl);
8433
8434   /* Plain overloading: will not be grok'd by grokclassfn.  */
8435   if (! ctype && ! processing_template_decl
8436       && DECL_LANGUAGE (decl) != lang_c
8437       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8438     set_mangled_name_for_decl (decl);
8439
8440   if (funcdef_flag)
8441     /* Make the init_value nonzero so pushdecl knows this is not
8442        tentative.  error_mark_node is replaced later with the BLOCK.  */
8443     DECL_INITIAL (decl) = error_mark_node;
8444
8445   /* Caller will do the rest of this.  */
8446   if (check < 0)
8447     return decl;
8448
8449   if (check && funcdef_flag)
8450     DECL_INITIAL (decl) = error_mark_node;
8451
8452   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8453     {
8454       tree tmp;
8455       /* Just handle constructors here.  We could do this
8456          inside the following if stmt, but I think
8457          that the code is more legible by breaking this
8458          case out.  See comments below for what each of
8459          the following calls is supposed to do.  */
8460       DECL_CONSTRUCTOR_P (decl) = 1;
8461
8462       grokclassfn (ctype, decl, flags, quals);
8463
8464       decl = check_explicit_specialization (orig_declarator, decl,
8465                                             template_count, 
8466                                             2 * (funcdef_flag != 0) + 
8467                                             4 * (friendp != 0));
8468       if (decl == error_mark_node)
8469         return NULL_TREE;
8470
8471       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8472           && check)
8473         {
8474           tmp = check_classfn (ctype, decl);
8475
8476           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8477             tmp = DECL_TEMPLATE_RESULT(tmp);
8478
8479           if (tmp && DECL_ARTIFICIAL (tmp))
8480             cp_error ("definition of implicitly-declared `%D'", tmp);
8481           if (tmp && duplicate_decls (decl, tmp))
8482             return tmp;
8483         }
8484       if (! grok_ctor_properties (ctype, decl))
8485         return NULL_TREE;
8486     }
8487   else
8488     {
8489       tree tmp;
8490
8491       /* Function gets the ugly name, field gets the nice one.
8492          This call may change the type of the function (because
8493          of default parameters)!  */
8494       if (ctype != NULL_TREE)
8495         grokclassfn (ctype, decl, flags, quals);
8496
8497       decl = check_explicit_specialization (orig_declarator, decl,
8498                                             template_count, 
8499                                             2 * (funcdef_flag != 0) + 
8500                                             4 * (friendp != 0));
8501       if (decl == error_mark_node)
8502         return NULL_TREE;
8503
8504       if (ctype != NULL_TREE
8505           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8506           && check)
8507         {
8508           tmp = check_classfn (ctype, decl);
8509
8510           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8511             tmp = DECL_TEMPLATE_RESULT (tmp);
8512               
8513           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8514               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8515             {
8516               /* Remove the `this' parm added by grokclassfn.
8517                  XXX Isn't this done in start_function, too?  */
8518               revert_static_member_fn (&decl, NULL, NULL);
8519               last_function_parms = TREE_CHAIN (last_function_parms);
8520             }
8521           if (tmp && DECL_ARTIFICIAL (tmp))
8522             cp_error ("definition of implicitly-declared `%D'", tmp);
8523           if (tmp)
8524             {
8525               /* Attempt to merge the declarations.  This can fail, in
8526                  the case of some illegal specialization declarations.  */
8527               if (!duplicate_decls (decl, tmp))
8528                 cp_error ("no `%#D' member function declared in class `%T'",
8529                           decl, ctype);
8530               return tmp;
8531             }
8532         }
8533
8534       if (ctype == NULL_TREE || check)
8535         return decl;
8536
8537       if (virtualp)
8538         {
8539           DECL_VIRTUAL_P (decl) = 1;
8540           if (DECL_VINDEX (decl) == NULL_TREE)
8541             DECL_VINDEX (decl) = error_mark_node;
8542           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8543         }
8544     }
8545   return decl;
8546 }
8547
8548 static tree
8549 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8550      tree type;
8551      tree declarator;
8552      RID_BIT_TYPE *specbits_in;
8553      int initialized;
8554      int constp;
8555      tree in_namespace;
8556 {
8557   tree decl;
8558   RID_BIT_TYPE specbits;
8559
8560   specbits = *specbits_in;
8561
8562   if (TREE_CODE (type) == OFFSET_TYPE)
8563     {
8564       /* If you declare a static member so that it
8565          can be initialized, the code will reach here.  */
8566       tree basetype = TYPE_OFFSET_BASETYPE (type);
8567       type = TREE_TYPE (type);
8568       decl = build_lang_decl (VAR_DECL, declarator, type);
8569       DECL_CONTEXT (decl) = basetype;
8570       DECL_CLASS_CONTEXT (decl) = basetype;
8571       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8572     }
8573   else
8574     {
8575       tree context;
8576
8577       if (in_namespace)
8578         context = in_namespace;
8579       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8580         context = current_namespace;
8581       else
8582         context = NULL_TREE;
8583
8584       if (processing_template_decl) 
8585         {
8586           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8587              we can call push_template_decl.  */
8588           push_permanent_obstack ();
8589           decl = build_lang_decl (VAR_DECL, declarator, type);
8590           pop_obstacks ();
8591         }
8592       else
8593         decl = build_decl (VAR_DECL, declarator, type);
8594
8595       if (context)
8596         set_decl_namespace (decl, context, 0);
8597
8598       context = DECL_CONTEXT (decl);
8599       if (declarator && context && current_lang_name != lang_name_c)
8600         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8601     }
8602
8603   if (in_namespace)
8604     set_decl_namespace (decl, in_namespace, 0);
8605
8606   if (RIDBIT_SETP (RID_EXTERN, specbits))
8607     {
8608       DECL_THIS_EXTERN (decl) = 1;
8609       DECL_EXTERNAL (decl) = !initialized;
8610     }
8611
8612   /* In class context, static means one per class,
8613      public access, and static storage.  */
8614   if (DECL_CLASS_SCOPE_P (decl))
8615     {
8616       TREE_PUBLIC (decl) = 1;
8617       TREE_STATIC (decl) = 1;
8618       DECL_EXTERNAL (decl) = 0;
8619     }
8620   /* At top level, either `static' or no s.c. makes a definition
8621      (perhaps tentative), and absence of `static' makes it public.  */
8622   else if (toplevel_bindings_p ())
8623     {
8624       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8625                             && (DECL_THIS_EXTERN (decl) || ! constp));
8626       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8627     }
8628   /* Not at top level, only `static' makes a static definition.  */
8629   else
8630     {
8631       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8632       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8633     }
8634
8635   if (TREE_PUBLIC (decl))
8636     {
8637       /* [basic.link]: A name with no linkage (notably, the name of a class
8638          or enumeration declared in a local scope) shall not be used to
8639          declare an entity with linkage.
8640
8641          Only check this for public decls for now.  */
8642       tree t = no_linkage_check (TREE_TYPE (decl));
8643       if (t)
8644         {
8645           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8646             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8647           else
8648             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8649                         decl, t);
8650         }
8651     }
8652
8653   return decl;
8654 }
8655
8656 /* Create and return a canonical pointer to member function type, for
8657    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8658
8659 tree
8660 build_ptrmemfunc_type (type)
8661      tree type;
8662 {
8663   tree fields[4];
8664   tree t;
8665   tree u;
8666   tree unqualified_variant = NULL_TREE;
8667
8668   /* If a canonical type already exists for this type, use it.  We use
8669      this method instead of type_hash_canon, because it only does a
8670      simple equality check on the list of field members.  */
8671
8672   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8673     return t;
8674
8675   /* Make sure that we always have the unqualified pointer-to-member
8676      type first.  */
8677   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8678     unqualified_variant 
8679       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8680
8681   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8682
8683   u = make_lang_type (UNION_TYPE);
8684   SET_IS_AGGR_TYPE (u, 0);
8685   fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8686   fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8687                                delta_type_node);
8688   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8689   TYPE_NAME (u) = NULL_TREE;
8690
8691   t = make_lang_type (RECORD_TYPE);
8692
8693   /* Let the front-end know this is a pointer to member function...  */
8694   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8695   /* ... and not really an aggregate.  */
8696   SET_IS_AGGR_TYPE (t, 0);
8697
8698   fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8699                                delta_type_node);
8700   fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8701                                delta_type_node);
8702   fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8703   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8704
8705   pop_obstacks ();
8706
8707   /* Zap out the name so that the back-end will give us the debugging
8708      information for this anonymous RECORD_TYPE.  */
8709   TYPE_NAME (t) = NULL_TREE;
8710
8711   /* If this is not the unqualified form of this pointer-to-member
8712      type, set the TYPE_MAIN_VARIANT for this type to be the
8713      unqualified type.  Since they are actually RECORD_TYPEs that are
8714      not variants of each other, we must do this manually.  */
8715   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8716     {
8717       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8718       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8719       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8720       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8721     }
8722
8723   /* Cache this pointer-to-member type so that we can find it again
8724      later.  */
8725   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8726
8727   /* Seems to be wanted.  */
8728   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8729
8730   return t;
8731 }
8732
8733 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8734    Check to see that the definition is valid.  Issue appropriate error
8735    messages.  Return 1 if the definition is particularly bad, or 0
8736    otherwise.  */
8737
8738 int
8739 check_static_variable_definition (decl, type)
8740      tree decl;
8741      tree type;
8742 {
8743   /* Motion 10 at San Diego: If a static const integral data member is
8744      initialized with an integral constant expression, the initializer
8745      may appear either in the declaration (within the class), or in
8746      the definition, but not both.  If it appears in the class, the
8747      member is a member constant.  The file-scope definition is always
8748      required.  */
8749   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8750     {
8751       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8752                 type);
8753       /* If we just return the declaration, crashes will sometimes
8754          occur.  We therefore return void_type_node, as if this was a
8755          friend declaration, to cause callers to completely ignore
8756          this declaration.  */
8757       return 1;
8758     }
8759   else if (!CP_TYPE_CONST_P (type))
8760     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8761               decl);
8762   else if (pedantic && !INTEGRAL_TYPE_P (type))
8763     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8764
8765   return 0;
8766 }
8767
8768 /* Given declspecs and a declarator,
8769    determine the name and type of the object declared
8770    and construct a ..._DECL node for it.
8771    (In one case we can return a ..._TYPE node instead.
8772     For invalid input we sometimes return 0.)
8773
8774    DECLSPECS is a chain of tree_list nodes whose value fields
8775     are the storage classes and type specifiers.
8776
8777    DECL_CONTEXT says which syntactic context this declaration is in:
8778      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8779      FUNCDEF for a function definition.  Like NORMAL but a few different
8780       error messages in each case.  Return value may be zero meaning
8781       this definition is too screwy to try to parse.
8782      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8783       handle member functions (which have FIELD context).
8784       Return value may be zero meaning this definition is too screwy to
8785       try to parse.
8786      PARM for a parameter declaration (either within a function prototype
8787       or before a function body).  Make a PARM_DECL, or return void_type_node.
8788      CATCHPARM for a parameter declaration before a catch clause.
8789      TYPENAME if for a typename (in a cast or sizeof).
8790       Don't make a DECL node; just return the ..._TYPE node.
8791      FIELD for a struct or union field; make a FIELD_DECL.
8792      BITFIELD for a field with specified width.
8793    INITIALIZED is 1 if the decl has an initializer.
8794
8795    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8796    normal attributes in TREE_PURPOSE, or NULL_TREE.
8797
8798    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8799    It may also be so in the PARM case, for a prototype where the
8800    argument type is specified but not the name.
8801
8802    This function is where the complicated C meanings of `static'
8803    and `extern' are interpreted.
8804
8805    For C++, if there is any monkey business to do, the function which
8806    calls this one must do it, i.e., prepending instance variables,
8807    renaming overloaded function names, etc.
8808
8809    Note that for this C++, it is an error to define a method within a class
8810    which does not belong to that class.
8811
8812    Except in the case where SCOPE_REFs are implicitly known (such as
8813    methods within a class being redundantly qualified),
8814    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8815    (class_name::decl_name).  The caller must also deal with this.
8816
8817    If a constructor or destructor is seen, and the context is FIELD,
8818    then the type gains the attribute TREE_HAS_x.  If such a declaration
8819    is erroneous, NULL_TREE is returned.
8820
8821    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8822    function, these are the qualifiers to give to the `this' pointer.
8823
8824    May return void_type_node if the declarator turned out to be a friend.
8825    See grokfield for details.  */
8826
8827 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8828
8829 tree
8830 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8831      tree declspecs;
8832      tree declarator;
8833      enum decl_context decl_context;
8834      int initialized;
8835      tree attrlist;
8836 {
8837   RID_BIT_TYPE specbits;
8838   int nclasses = 0;
8839   tree spec;
8840   tree type = NULL_TREE;
8841   int longlong = 0;
8842   int constp;
8843   int restrictp;
8844   int volatilep;
8845   int type_quals;
8846   int virtualp, explicitp, friendp, inlinep, staticp;
8847   int explicit_int = 0;
8848   int explicit_char = 0;
8849   int defaulted_int = 0;
8850   tree typedef_decl = NULL_TREE;
8851   const char *name;
8852   tree typedef_type = NULL_TREE;
8853   int funcdef_flag = 0;
8854   enum tree_code innermost_code = ERROR_MARK;
8855   int bitfield = 0;
8856 #if 0
8857   /* See the code below that used this.  */
8858   tree decl_machine_attr = NULL_TREE;
8859 #endif
8860   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8861      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8862   tree init = NULL_TREE;
8863
8864   /* Keep track of what sort of function is being processed
8865      so that we can warn about default return values, or explicit
8866      return values which do not match prescribed defaults.  */
8867   enum return_types return_type = return_normal;
8868
8869   tree dname = NULL_TREE;
8870   tree ctype = current_class_type;
8871   tree ctor_return_type = NULL_TREE;
8872   enum overload_flags flags = NO_SPECIAL;
8873   tree quals = NULL_TREE;
8874   tree raises = NULL_TREE;
8875   int template_count = 0;
8876   tree in_namespace = NULL_TREE;
8877   tree inner_attrs;
8878   int ignore_attrs;
8879
8880   RIDBIT_RESET_ALL (specbits);
8881   if (decl_context == FUNCDEF)
8882     funcdef_flag = 1, decl_context = NORMAL;
8883   else if (decl_context == MEMFUNCDEF)
8884     funcdef_flag = -1, decl_context = FIELD;
8885   else if (decl_context == BITFIELD)
8886     bitfield = 1, decl_context = FIELD;
8887
8888   /* Look inside a declarator for the name being declared
8889      and get it as a string, for an error message.  */
8890   {
8891     tree *next = &declarator;
8892     register tree decl;
8893     name = NULL;
8894
8895     while (next && *next)
8896       {
8897         decl = *next;
8898         switch (TREE_CODE (decl))
8899           {
8900           case TREE_LIST:
8901             /* For attributes.  */
8902             next = &TREE_VALUE (decl);
8903             break;
8904
8905           case COND_EXPR:
8906             ctype = NULL_TREE;
8907             next = &TREE_OPERAND (decl, 0);
8908             break;
8909
8910           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8911             {
8912               tree name = TREE_OPERAND (decl, 0);
8913               tree rename = NULL_TREE;
8914
8915               my_friendly_assert (flags == NO_SPECIAL, 152);
8916               flags = DTOR_FLAG;
8917               return_type = return_dtor;
8918               if (TREE_CODE (name) == TYPE_DECL)
8919                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8920               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8921               if (ctype == NULL_TREE)
8922                 {
8923                   if (current_class_type == NULL_TREE)
8924                     {
8925                       error ("destructors must be member functions");
8926                       flags = NO_SPECIAL;
8927                     }
8928                   else
8929                     {
8930                       tree t = constructor_name (current_class_name);
8931                       if (t != name)
8932                         rename = t;
8933                     }
8934                 }
8935               else
8936                 {
8937                   tree t = constructor_name (ctype);
8938                   if (t != name)
8939                     rename = t;
8940                 }
8941
8942               if (rename)
8943                 {
8944                   cp_error ("destructor `%T' must match class name `%T'",
8945                             name, rename);
8946                   TREE_OPERAND (decl, 0) = rename;
8947                 }
8948               next = &name;
8949             }
8950             break;
8951
8952           case ADDR_EXPR:       /* C++ reference declaration */
8953             /* Fall through. */
8954           case ARRAY_REF:
8955           case INDIRECT_REF:
8956             ctype = NULL_TREE;
8957             innermost_code = TREE_CODE (decl);
8958             next = &TREE_OPERAND (decl, 0);
8959             break;
8960
8961           case CALL_EXPR:
8962             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8963               {
8964                 /* This is actually a variable declaration using
8965                    constructor syntax.  We need to call start_decl and
8966                    cp_finish_decl so we can get the variable
8967                    initialized...  */
8968
8969                 tree attributes, prefix_attributes;
8970
8971                 *next = TREE_OPERAND (decl, 0);
8972                 init = CALL_DECLARATOR_PARMS (decl);
8973
8974                 if (attrlist)
8975                   {
8976                     attributes = TREE_PURPOSE (attrlist);
8977                     prefix_attributes = TREE_VALUE (attrlist);
8978                   }
8979                 else
8980                   {
8981                     attributes = NULL_TREE;
8982                     prefix_attributes = NULL_TREE;
8983                   }
8984
8985                 decl = start_decl (declarator, declspecs, 1,
8986                                    attributes, prefix_attributes);
8987                 if (decl)
8988                   {
8989                     /* Look for __unused__ attribute */
8990                     if (TREE_USED (TREE_TYPE (decl)))
8991                       TREE_USED (decl) = 1;
8992                     finish_decl (decl, init, NULL_TREE);
8993                   }
8994                 else
8995                   cp_error ("invalid declarator");
8996                 return 0;
8997               }
8998             innermost_code = TREE_CODE (decl);
8999             if (decl_context == FIELD && ctype == NULL_TREE)
9000               ctype = current_class_type;
9001             if (ctype
9002                 && TREE_OPERAND (decl, 0)
9003                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9004                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9005                          == constructor_name_full (ctype))
9006                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9007                             == constructor_name (ctype)))))
9008               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9009             next = &TREE_OPERAND (decl, 0);
9010             decl = *next;
9011             if (ctype != NULL_TREE
9012                 && decl != NULL_TREE && flags != DTOR_FLAG
9013                 && decl == constructor_name (ctype))
9014               {
9015                 return_type = return_ctor;
9016                 ctor_return_type = ctype;
9017               }
9018             ctype = NULL_TREE;
9019             break;
9020             
9021           case TEMPLATE_ID_EXPR:
9022               {
9023                 tree fns = TREE_OPERAND (decl, 0);
9024
9025                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9026                   fns = TREE_OPERAND (fns, 0);
9027
9028                 dname = fns;
9029                 if (TREE_CODE (dname) == COMPONENT_REF)
9030                   dname = TREE_OPERAND (dname, 1);
9031                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9032                   {
9033                     my_friendly_assert (is_overloaded_fn (dname),
9034                                         19990331);
9035                     dname = DECL_NAME (get_first_fn (dname));
9036                   }
9037               }
9038           /* Fall through. */
9039
9040           case IDENTIFIER_NODE:
9041             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9042               dname = decl;
9043
9044             next = 0;
9045
9046             if (is_rid (dname))
9047               {
9048                 cp_error ("declarator-id missing; using reserved word `%D'",
9049                           dname);
9050                 name = IDENTIFIER_POINTER (dname);
9051               }
9052             if (! IDENTIFIER_OPNAME_P (dname)
9053                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9054                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9055               name = IDENTIFIER_POINTER (dname);
9056             else
9057               {
9058                 if (IDENTIFIER_TYPENAME_P (dname))
9059                   {
9060                     my_friendly_assert (flags == NO_SPECIAL, 154);
9061                     flags = TYPENAME_FLAG;
9062                     ctor_return_type = TREE_TYPE (dname);
9063                     return_type = return_conversion;
9064                   }
9065                 name = operator_name_string (dname);
9066               }
9067             break;
9068
9069             /* C++ extension */
9070           case SCOPE_REF:
9071             {
9072               /* Perform error checking, and decide on a ctype.  */
9073               tree cname = TREE_OPERAND (decl, 0);
9074               if (cname == NULL_TREE)
9075                 ctype = NULL_TREE;
9076               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9077                 {
9078                   ctype = NULL_TREE;
9079                   in_namespace = TREE_OPERAND (decl, 0);
9080                   TREE_OPERAND (decl, 0) = NULL_TREE;
9081                 }
9082               else if (! is_aggr_type (cname, 1))
9083                 TREE_OPERAND (decl, 0) = NULL_TREE;
9084               /* Must test TREE_OPERAND (decl, 1), in case user gives
9085                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9086               else if (TREE_OPERAND (decl, 1)
9087                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9088                 ctype = cname;
9089               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9090                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9091                 {
9092                   cp_error ("`%T::%D' is not a valid declarator", cname,
9093                             TREE_OPERAND (decl, 1));
9094                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9095                             cname, TREE_OPERAND (decl, 1));
9096                   return void_type_node;
9097                 }
9098               else if (ctype == NULL_TREE)
9099                 ctype = cname;
9100               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9101                 TREE_OPERAND (decl, 0) = ctype;
9102               else
9103                 {
9104                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9105                     {
9106                       cp_error ("type `%T' is not derived from type `%T'",
9107                                 cname, ctype);
9108                       TREE_OPERAND (decl, 0) = NULL_TREE;
9109                     }
9110                   else
9111                     ctype = cname;
9112                 }
9113
9114               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9115                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9116                        == constructor_name_full (ctype))
9117                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9118                           == constructor_name (ctype))))
9119                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9120               next = &TREE_OPERAND (decl, 1);
9121               decl = *next;
9122               if (ctype)
9123                 {
9124                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9125                       && constructor_name (ctype) == decl)
9126                     {
9127                       return_type = return_ctor;
9128                       ctor_return_type = ctype;
9129                     }
9130                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9131                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9132                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9133                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9134                     {
9135                       return_type = return_dtor;
9136                       ctor_return_type = ctype;
9137                       flags = DTOR_FLAG;
9138                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9139                       next = &TREE_OPERAND (decl, 0);
9140                     }
9141                 }
9142             }
9143             break;
9144
9145           case ERROR_MARK:
9146             next = 0;
9147             break;
9148
9149           case TYPE_DECL:
9150             /* Parse error puts this typespec where
9151                a declarator should go.  */
9152             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9153             if (TREE_TYPE (decl) == current_class_type)
9154               cp_error ("  perhaps you want `%T' for a constructor",
9155                         current_class_name);
9156             dname = DECL_NAME (decl);
9157             name = IDENTIFIER_POINTER (dname);
9158
9159             /* Avoid giving two errors for this.  */
9160             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9161
9162             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9163                                         declspecs);
9164             *next = dname;
9165             next = 0;
9166             break;
9167
9168           default:
9169             cp_compiler_error ("`%D' as declarator", decl);
9170             return 0; /* We used to do a 155 abort here.  */
9171           }
9172       }
9173   }
9174
9175   /* A function definition's declarator must have the form of
9176      a function declarator.  */
9177
9178   if (funcdef_flag && innermost_code != CALL_EXPR)
9179     return 0;
9180
9181   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9182       && innermost_code != CALL_EXPR
9183       && ! (ctype && declspecs == NULL_TREE))
9184     {
9185       cp_error ("declaration of `%D' as non-function", dname);
9186       return void_type_node;
9187     }
9188
9189   /* Anything declared one level down from the top level
9190      must be one of the parameters of a function
9191      (because the body is at least two levels down).  */
9192
9193   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9194      by not allowing C++ class definitions to specify their parameters
9195      with xdecls (must be spec.d in the parmlist).
9196
9197      Since we now wait to push a class scope until we are sure that
9198      we are in a legitimate method context, we must set oldcname
9199      explicitly (since current_class_name is not yet alive).
9200
9201      We also want to avoid calling this a PARM if it is in a namespace.  */
9202
9203   if (decl_context == NORMAL && !toplevel_bindings_p ())
9204     {
9205       struct binding_level *b = current_binding_level;
9206       current_binding_level = b->level_chain;
9207       if (current_binding_level != 0 && toplevel_bindings_p ())
9208         decl_context = PARM;
9209       current_binding_level = b;
9210     }
9211
9212   if (name == NULL)
9213     name = decl_context == PARM ? "parameter" : "type name";
9214   
9215   /* Look through the decl specs and record which ones appear.
9216      Some typespecs are defined as built-in typenames.
9217      Others, the ones that are modifiers of other types,
9218      are represented by bits in SPECBITS: set the bits for
9219      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9220
9221      If there is a typedef name or a type, store the type in TYPE.
9222      This includes builtin typedefs such as `int'.
9223
9224      Set EXPLICIT_INT if the type is `int' or `char' and did not
9225      come from a user typedef.
9226
9227      Set LONGLONG if `long' is mentioned twice.
9228
9229      For C++, constructors and destructors have their own fast treatment.  */
9230
9231   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9232     {
9233       register int i;
9234       register tree id;
9235
9236       /* Certain parse errors slip through.  For example,
9237          `int class;' is not caught by the parser. Try
9238          weakly to recover here.  */
9239       if (TREE_CODE (spec) != TREE_LIST)
9240         return 0;
9241
9242       id = TREE_VALUE (spec);
9243
9244       if (TREE_CODE (id) == IDENTIFIER_NODE)
9245         {
9246           if (id == ridpointers[(int) RID_INT]
9247               || id == ridpointers[(int) RID_CHAR]
9248               || id == ridpointers[(int) RID_BOOL]
9249               || id == ridpointers[(int) RID_WCHAR])
9250             {
9251               if (type)
9252                 {
9253                   if (id == ridpointers[(int) RID_BOOL])
9254                     error ("`bool' is now a keyword");
9255                   else
9256                     cp_error ("extraneous `%T' ignored", id);
9257                 }
9258               else
9259                 {
9260                   if (id == ridpointers[(int) RID_INT])
9261                     explicit_int = 1;
9262                   else if (id == ridpointers[(int) RID_CHAR])
9263                     explicit_char = 1;
9264                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9265                 }
9266               goto found;
9267             }
9268           /* C++ aggregate types.  */
9269           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9270             {
9271               if (type)
9272                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9273               else
9274                 type = IDENTIFIER_TYPE_VALUE (id);
9275               goto found;
9276             }
9277
9278           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9279             {
9280               if (ridpointers[i] == id)
9281                 {
9282                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9283                     {
9284                       if (pedantic && ! in_system_header && warn_long_long)
9285                         pedwarn ("ANSI C++ does not support `long long'");
9286                       if (longlong)
9287                         error ("`long long long' is too long for GCC");
9288                       else
9289                         longlong = 1;
9290                     }
9291                   else if (RIDBIT_SETP (i, specbits))
9292                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9293                   RIDBIT_SET (i, specbits);
9294                   goto found;
9295                 }
9296             }
9297         }
9298       /* C++ aggregate types.  */
9299       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9300         {
9301           if (type)
9302             cp_error ("multiple declarations `%T' and `%T'", type,
9303                       TREE_TYPE (id));
9304           else
9305             {
9306               type = TREE_TYPE (id);
9307               TREE_VALUE (spec) = type;
9308             }
9309           goto found;
9310         }
9311       if (type)
9312         error ("two or more data types in declaration of `%s'", name);
9313       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9314         {
9315           register tree t = lookup_name (id, 1);
9316           if (!t || TREE_CODE (t) != TYPE_DECL)
9317             error ("`%s' fails to be a typedef or built in type",
9318                    IDENTIFIER_POINTER (id));
9319           else
9320             {
9321               type = TREE_TYPE (t);
9322 #if 0
9323               /* See the code below that used this.  */
9324               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9325 #endif
9326               typedef_decl = t;
9327             }
9328         }
9329       else if (id != error_mark_node)
9330         /* Can't change CLASS nodes into RECORD nodes here!  */
9331         type = id;
9332
9333     found: ;
9334     }
9335
9336   typedef_type = type;
9337
9338   /* No type at all: default to `int', and set DEFAULTED_INT
9339      because it was not a user-defined typedef.  */
9340
9341   if (type == NULL_TREE
9342       && (RIDBIT_SETP (RID_SIGNED, specbits)
9343           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9344           || RIDBIT_SETP (RID_LONG, specbits)
9345           || RIDBIT_SETP (RID_SHORT, specbits)))
9346     {
9347       /* These imply 'int'.  */
9348       type = integer_type_node;
9349       defaulted_int = 1;
9350     }
9351
9352   if (type == NULL_TREE)
9353     {
9354       explicit_int = -1;
9355       if (return_type == return_dtor)
9356         type = void_type_node;
9357       else if (return_type == return_ctor)
9358         type = build_pointer_type (ctor_return_type);
9359       else if (return_type == return_conversion)
9360         type = ctor_return_type;
9361       else
9362         {
9363           /* We handle `main' specially here, because 'main () { }' is so
9364              common.  With no options, it is allowed.  With -Wreturn-type,
9365              it is a warning.  It is only an error with -pedantic-errors.  */
9366           int is_main = (funcdef_flag
9367                          && MAIN_NAME_P (dname)
9368                          && ctype == NULL_TREE
9369                          && in_namespace == NULL_TREE
9370                          && current_namespace == global_namespace);
9371
9372           if (in_system_header || flag_ms_extensions)
9373             /* Allow it, sigh.  */;
9374           else if (pedantic || ! is_main)
9375             cp_pedwarn ("ANSI C++ forbids declaration of `%s' with no type",
9376                         name);
9377           else if (warn_return_type)
9378             cp_warning ("ANSI C++ forbids declaration of `%s' with no type",
9379                         name);
9380
9381           type = integer_type_node;
9382         }
9383     }
9384   else if (return_type == return_dtor)
9385     {
9386       error ("return type specification for destructor invalid");
9387       type = void_type_node;
9388     }
9389   else if (return_type == return_ctor)
9390     {
9391       error ("return type specification for constructor invalid");
9392       type = build_pointer_type (ctor_return_type);
9393     }
9394   else if (return_type == return_conversion)
9395     {
9396       if (!same_type_p (type, ctor_return_type))
9397         cp_error ("operator `%T' declared to return `%T'",
9398                   ctor_return_type, type);
9399       else
9400         cp_pedwarn ("return type specified for `operator %T'",
9401                     ctor_return_type);
9402
9403       type = ctor_return_type;
9404     }
9405
9406   ctype = NULL_TREE;
9407
9408   /* Now process the modifiers that were specified
9409      and check for invalid combinations.  */
9410
9411   /* Long double is a special combination.  */
9412
9413   if (RIDBIT_SETP (RID_LONG, specbits)
9414       && TYPE_MAIN_VARIANT (type) == double_type_node)
9415     {
9416       RIDBIT_RESET (RID_LONG, specbits);
9417       type = build_qualified_type (long_double_type_node, 
9418                                    CP_TYPE_QUALS (type));
9419     }
9420
9421   /* Check all other uses of type modifiers.  */
9422
9423   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9424       || RIDBIT_SETP (RID_SIGNED, specbits)
9425       || RIDBIT_SETP (RID_LONG, specbits)
9426       || RIDBIT_SETP (RID_SHORT, specbits))
9427     {
9428       int ok = 0;
9429
9430       if (TREE_CODE (type) == REAL_TYPE)
9431         error ("short, signed or unsigned invalid for `%s'", name);
9432       else if (TREE_CODE (type) != INTEGER_TYPE)
9433         error ("long, short, signed or unsigned invalid for `%s'", name);
9434       else if (RIDBIT_SETP (RID_LONG, specbits)
9435                && RIDBIT_SETP (RID_SHORT, specbits))
9436         error ("long and short specified together for `%s'", name);
9437       else if ((RIDBIT_SETP (RID_LONG, specbits)
9438                 || RIDBIT_SETP (RID_SHORT, specbits))
9439                && explicit_char)
9440         error ("long or short specified with char for `%s'", name);
9441       else if ((RIDBIT_SETP (RID_LONG, specbits)
9442                 || RIDBIT_SETP (RID_SHORT, specbits))
9443                && TREE_CODE (type) == REAL_TYPE)
9444         error ("long or short specified with floating type for `%s'", name);
9445       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9446                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9447         error ("signed and unsigned given together for `%s'", name);
9448       else
9449         {
9450           ok = 1;
9451           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9452             {
9453               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9454                        name);
9455               if (flag_pedantic_errors)
9456                 ok = 0;
9457             }
9458         }
9459
9460       /* Discard the type modifiers if they are invalid.  */
9461       if (! ok)
9462         {
9463           RIDBIT_RESET (RID_UNSIGNED, specbits);
9464           RIDBIT_RESET (RID_SIGNED, specbits);
9465           RIDBIT_RESET (RID_LONG, specbits);
9466           RIDBIT_RESET (RID_SHORT, specbits);
9467           longlong = 0;
9468         }
9469     }
9470
9471   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9472       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9473     {
9474       error ("complex invalid for `%s'", name);
9475       RIDBIT_RESET (RID_COMPLEX, specbits);
9476     }
9477
9478   /* Decide whether an integer type is signed or not.
9479      Optionally treat bitfields as signed by default.  */
9480   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9481       /* [class.bit]
9482
9483          It is implementation-defined whether a plain (neither
9484          explicitly signed or unsigned) char, short, int, or long
9485          bit-field is signed or unsigned.
9486              
9487          Naturally, we extend this to long long as well.  Note that
9488          this does not include wchar_t.  */
9489       || (bitfield && !flag_signed_bitfields
9490           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9491           /* A typedef for plain `int' without `signed' can be
9492              controlled just like plain `int', but a typedef for
9493              `signed int' cannot be so controlled.  */
9494           && !(typedef_decl 
9495                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9496           && (TREE_CODE (type) == INTEGER_TYPE
9497               || TREE_CODE (type) == CHAR_TYPE)
9498           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9499     {
9500       if (longlong)
9501         type = long_long_unsigned_type_node;
9502       else if (RIDBIT_SETP (RID_LONG, specbits))
9503         type = long_unsigned_type_node;
9504       else if (RIDBIT_SETP (RID_SHORT, specbits))
9505         type = short_unsigned_type_node;
9506       else if (type == char_type_node)
9507         type = unsigned_char_type_node;
9508       else if (typedef_decl)
9509         type = unsigned_type (type);
9510       else
9511         type = unsigned_type_node;
9512     }
9513   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9514            && type == char_type_node)
9515     type = signed_char_type_node;
9516   else if (longlong)
9517     type = long_long_integer_type_node;
9518   else if (RIDBIT_SETP (RID_LONG, specbits))
9519     type = long_integer_type_node;
9520   else if (RIDBIT_SETP (RID_SHORT, specbits))
9521     type = short_integer_type_node;
9522
9523   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9524     {
9525       /* If we just have "complex", it is equivalent to
9526          "complex double", but if any modifiers at all are specified it is
9527          the complex form of TYPE.  E.g, "complex short" is
9528          "complex short int".  */
9529
9530       if (defaulted_int && ! longlong
9531           && ! (RIDBIT_SETP (RID_LONG, specbits)
9532                 || RIDBIT_SETP (RID_SHORT, specbits)
9533                 || RIDBIT_SETP (RID_SIGNED, specbits)
9534                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9535         type = complex_double_type_node;
9536       else if (type == integer_type_node)
9537         type = complex_integer_type_node;
9538       else if (type == float_type_node)
9539         type = complex_float_type_node;
9540       else if (type == double_type_node)
9541         type = complex_double_type_node;
9542       else if (type == long_double_type_node)
9543         type = complex_long_double_type_node;
9544       else
9545         type = build_complex_type (type);
9546     }
9547
9548   if (return_type == return_conversion 
9549       && (RIDBIT_SETP (RID_CONST, specbits)
9550           || RIDBIT_SETP (RID_VOLATILE, specbits)
9551           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9552     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9553               ctor_return_type);
9554
9555   /* Set CONSTP if this declaration is `const', whether by
9556      explicit specification or via a typedef.
9557      Likewise for VOLATILEP.  */
9558
9559   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9560   restrictp = 
9561     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9562   volatilep = 
9563     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9564   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9565                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9566                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9567   type = cp_build_qualified_type (type, type_quals);
9568   staticp = 0;
9569   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9570   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9571   RIDBIT_RESET (RID_VIRTUAL, specbits);
9572   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9573   RIDBIT_RESET (RID_EXPLICIT, specbits);
9574
9575   if (RIDBIT_SETP (RID_STATIC, specbits))
9576     staticp = 1 + (decl_context == FIELD);
9577
9578   if (virtualp && staticp == 2)
9579     {
9580       cp_error ("member `%D' cannot be declared both virtual and static",
9581                 dname);
9582       staticp = 0;
9583     }
9584   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9585   RIDBIT_RESET (RID_FRIEND, specbits);
9586
9587   /* Warn if two storage classes are given. Default to `auto'.  */
9588
9589   if (RIDBIT_ANY_SET (specbits))
9590     {
9591       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9592       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9593       if (decl_context == PARM && nclasses > 0)
9594         error ("storage class specifiers invalid in parameter declarations");
9595       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9596         {
9597           if (decl_context == PARM)
9598             error ("typedef declaration invalid in parameter declaration");
9599           nclasses++;
9600         }
9601       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9602       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9603     }
9604
9605   /* Give error if `virtual' is used outside of class declaration.  */
9606   if (virtualp
9607       && (current_class_name == NULL_TREE || decl_context != FIELD))
9608     {
9609       error ("virtual outside class declaration");
9610       virtualp = 0;
9611     }
9612
9613   /* Static anonymous unions are dealt with here.  */
9614   if (staticp && decl_context == TYPENAME
9615       && TREE_CODE (declspecs) == TREE_LIST
9616       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9617     decl_context = FIELD;
9618
9619   /* Warn about storage classes that are invalid for certain
9620      kinds of declarations (parameters, typenames, etc.).  */
9621
9622   if (nclasses > 1)
9623     error ("multiple storage classes in declaration of `%s'", name);
9624   else if (decl_context != NORMAL && nclasses > 0)
9625     {
9626       if ((decl_context == PARM || decl_context == CATCHPARM)
9627           && (RIDBIT_SETP (RID_REGISTER, specbits)
9628               || RIDBIT_SETP (RID_AUTO, specbits)))
9629         ;
9630       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9631         ;
9632       else if (decl_context == FIELD
9633                /* C++ allows static class elements  */
9634                && RIDBIT_SETP (RID_STATIC, specbits))
9635         /* C++ also allows inlines and signed and unsigned elements,
9636            but in those cases we don't come in here.  */
9637         ;
9638       else
9639         {
9640           if (decl_context == FIELD)
9641             {
9642               tree tmp = NULL_TREE;
9643               register int op = 0;
9644
9645               if (declarator)
9646                 {
9647                   /* Avoid trying to get an operand off an identifier node.  */ 
9648                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9649                     tmp = declarator;
9650                   else
9651                     tmp = TREE_OPERAND (declarator, 0);
9652                   op = IDENTIFIER_OPNAME_P (tmp);
9653                 }
9654               error ("storage class specified for %s `%s'",
9655                      op ? "member operator" : "field",
9656                      op ? operator_name_string (tmp) : name);
9657             }
9658           else
9659             error (((decl_context == PARM || decl_context == CATCHPARM)
9660                     ? "storage class specified for parameter `%s'"
9661                     : "storage class specified for typename"), name);
9662           RIDBIT_RESET (RID_REGISTER, specbits);
9663           RIDBIT_RESET (RID_AUTO, specbits);
9664           RIDBIT_RESET (RID_EXTERN, specbits);
9665         }
9666     }
9667   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9668     {
9669       if (toplevel_bindings_p ())
9670         {
9671           /* It's common practice (and completely valid) to have a const
9672              be initialized and declared extern.  */
9673           if (!(type_quals & TYPE_QUAL_CONST))
9674             warning ("`%s' initialized and declared `extern'", name);
9675         }
9676       else
9677         error ("`%s' has both `extern' and initializer", name);
9678     }
9679   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9680            && ! toplevel_bindings_p ())
9681     error ("nested function `%s' declared `extern'", name);
9682   else if (toplevel_bindings_p ())
9683     {
9684       if (RIDBIT_SETP (RID_AUTO, specbits))
9685         error ("top-level declaration of `%s' specifies `auto'", name);
9686     }
9687
9688   if (nclasses > 0 && friendp)
9689     error ("storage class specifiers invalid in friend function declarations");
9690
9691   /* Now figure out the structure of the declarator proper.
9692      Descend through it, creating more complex types, until we reach
9693      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9694
9695   inner_attrs = NULL_TREE;
9696   ignore_attrs = 0;  
9697
9698   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9699          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9700     {
9701       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9702          an INDIRECT_REF (for *...),
9703          a CALL_EXPR (for ...(...)),
9704          an identifier (for the name being declared)
9705          or a null pointer (for the place in an absolute declarator
9706          where the name was omitted).
9707          For the last two cases, we have just exited the loop.
9708
9709          For C++ it could also be
9710          a SCOPE_REF (for class :: ...).  In this case, we have converted
9711          sensible names to types, and those are the values we use to
9712          qualify the member name.
9713          an ADDR_EXPR (for &...),
9714          a BIT_NOT_EXPR (for destructors)
9715
9716          At this point, TYPE is the type of elements of an array,
9717          or for a function to return, or for a pointer to point to.
9718          After this sequence of ifs, TYPE is the type of the
9719          array or function or pointer, and DECLARATOR has had its
9720          outermost layer removed.  */
9721
9722       if (type == error_mark_node)
9723         {
9724           if (TREE_CODE (declarator) == SCOPE_REF)
9725             declarator = TREE_OPERAND (declarator, 1);
9726           else
9727             declarator = TREE_OPERAND (declarator, 0);
9728           continue;
9729         }
9730       if (quals != NULL_TREE
9731           && (declarator == NULL_TREE
9732               || TREE_CODE (declarator) != SCOPE_REF))
9733         {
9734           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9735             ctype = TYPE_METHOD_BASETYPE (type);
9736           if (ctype != NULL_TREE)
9737             {
9738               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9739               ctype = grok_method_quals (ctype, dummy, quals);
9740               type = TREE_TYPE (dummy);
9741               quals = NULL_TREE;
9742             }
9743         }
9744
9745       /* See the comment for the TREE_LIST case, below.  */
9746       if (ignore_attrs)
9747         ignore_attrs = 0;
9748       else if (inner_attrs)
9749         {
9750           decl_attributes (type, inner_attrs, NULL_TREE);
9751           inner_attrs = NULL_TREE;
9752         }
9753
9754       switch (TREE_CODE (declarator))
9755         {
9756         case TREE_LIST:
9757           {
9758             /* We encode a declarator with embedded attributes using
9759                a TREE_LIST.  The attributes apply to the declarator
9760                directly inside them, so we have to skip an iteration
9761                before applying them to the type.  If the declarator just
9762                inside is the declarator-id, we apply the attrs to the
9763                decl itself.  */
9764             inner_attrs = TREE_PURPOSE (declarator);
9765             ignore_attrs = 1;
9766             declarator = TREE_VALUE (declarator);
9767           }
9768           break;
9769
9770         case ARRAY_REF:
9771           {
9772             register tree itype = NULL_TREE;
9773             register tree size = TREE_OPERAND (declarator, 1);
9774             /* The index is a signed object `sizetype' bits wide.  */
9775             tree index_type = signed_type (sizetype);
9776
9777             declarator = TREE_OPERAND (declarator, 0);
9778
9779             /* Check for some types that there cannot be arrays of.  */
9780
9781             if (TREE_CODE (type) == VOID_TYPE)
9782               {
9783                 cp_error ("declaration of `%D' as array of voids", dname);
9784                 type = error_mark_node;
9785               }
9786
9787             if (TREE_CODE (type) == FUNCTION_TYPE)
9788               {
9789                 cp_error ("declaration of `%D' as array of functions", dname);
9790                 type = error_mark_node;
9791               }
9792
9793             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9794                you can't have arrays of references.  If we allowed them,
9795                then we'd be saying x[i] is valid for an array x, but
9796                then you'd have to ask: what does `*(x + i)' mean?  */
9797             if (TREE_CODE (type) == REFERENCE_TYPE)
9798               {
9799                 if (decl_context == TYPENAME)
9800                   cp_error ("cannot make arrays of references");
9801                 else
9802                   cp_error ("declaration of `%D' as array of references",
9803                             dname);
9804                 type = error_mark_node;
9805               }
9806
9807             if (TREE_CODE (type) == OFFSET_TYPE)
9808               {
9809                   cp_error ("declaration of `%D' as array of data members",
9810                             dname);
9811                 type = error_mark_node;
9812               }
9813
9814             if (TREE_CODE (type) == METHOD_TYPE)
9815               {
9816                 cp_error ("declaration of `%D' as array of function members",
9817                           dname);
9818                 type = error_mark_node;
9819               }
9820
9821             if (size == error_mark_node)
9822               type = error_mark_node;
9823             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9824               {
9825                 /* [dcl.array]
9826
9827                    the constant expressions that specify the bounds of
9828                    the arrays can be omitted only for the first member
9829                    of the sequence.  */
9830                 cp_error ("declaration of `%D' as multidimensional array",
9831                           dname);
9832                 cp_error ("must have bounds for all dimensions except the first");
9833                 type = error_mark_node;
9834               }
9835
9836             if (type == error_mark_node)
9837               continue;
9838
9839             /* VC++ spells a zero-sized array with [].  */
9840             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9841                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9842               size = integer_zero_node;
9843
9844             if (size)
9845               {
9846                 /* Must suspend_momentary here because the index
9847                    type may need to live until the end of the function.
9848                    For example, it is used in the declaration of a
9849                    variable which requires destructing at the end of
9850                    the function; then build_vec_delete will need this
9851                    value.  */
9852                 int yes = suspend_momentary ();
9853                 /* Might be a cast. */
9854                 if (TREE_CODE (size) == NOP_EXPR
9855                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9856                   size = TREE_OPERAND (size, 0);
9857                 if (TREE_READONLY_DECL_P (size))
9858                   size = decl_constant_value (size);
9859
9860                 /* If this involves a template parameter, it will be a
9861                    constant at instantiation time, but we don't know
9862                    what the value is yet.  Even if no template
9863                    parameters are involved, we may an expression that
9864                    is not a constant; we don't even simplify `1 + 2'
9865                    when processing a template.  */
9866                 if (processing_template_decl)
9867                   {
9868                     /* Resolve a qualified reference to an enumerator or
9869                        static const data member of ours.  */
9870                     if (TREE_CODE (size) == SCOPE_REF
9871                         && TREE_OPERAND (size, 0) == current_class_type)
9872                       {
9873                         tree t = lookup_field (current_class_type,
9874                                                TREE_OPERAND (size, 1), 0, 0);
9875                         if (t)
9876                           size = t;
9877                       }
9878
9879                     itype = build_index_type (build_min
9880                       (MINUS_EXPR, sizetype, size, integer_one_node));
9881                     goto dont_grok_size;
9882                   }
9883
9884                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9885                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9886                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9887                   {
9888                     cp_error ("size of array `%D' has non-integer type",
9889                               dname);
9890                     size = integer_one_node;
9891                   }
9892                 if (pedantic && integer_zerop (size))
9893                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9894                 if (TREE_CONSTANT (size))
9895                   {
9896                     int old_flag_pedantic_errors = flag_pedantic_errors;
9897                     int old_pedantic = pedantic;
9898                     pedantic = flag_pedantic_errors = 1;
9899                     /* Always give overflow errors on array subscripts.  */
9900                     constant_expression_warning (size);
9901                     pedantic = old_pedantic;
9902                     flag_pedantic_errors = old_flag_pedantic_errors;
9903                     if (INT_CST_LT (size, integer_zero_node))
9904                       {
9905                         cp_error ("size of array `%D' is negative", dname);
9906                         size = integer_one_node;
9907                       }
9908                   }
9909                 else
9910                   {
9911                     if (pedantic)
9912                       {
9913                         if (dname)
9914                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9915                                       dname);
9916                         else
9917                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9918                       }
9919                   }
9920
9921                 itype
9922                   = fold (build_binary_op (MINUS_EXPR,
9923                                            cp_convert (index_type, size),
9924                                            cp_convert (index_type,
9925                                                        integer_one_node)));
9926                 if (! TREE_CONSTANT (itype))
9927                   itype = variable_size (itype);
9928                 else if (TREE_OVERFLOW (itype))
9929                   {
9930                     error ("overflow in array dimension");
9931                     TREE_OVERFLOW (itype) = 0;
9932                   }
9933
9934                 itype = build_index_type (itype);
9935
9936               dont_grok_size:
9937                 resume_momentary (yes);
9938               }
9939
9940             type = build_cplus_array_type (type, itype);
9941             ctype = NULL_TREE;
9942           }
9943           break;
9944
9945         case CALL_EXPR:
9946           {
9947             tree arg_types;
9948             int funcdecl_p;
9949             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9950             tree inner_decl = TREE_OPERAND (declarator, 0);
9951
9952             /* Declaring a function type.
9953                Make sure we have a valid type for the function to return.  */
9954
9955             /* We now know that the TYPE_QUALS don't apply to the
9956                decl, but to its return type.  */
9957             type_quals = TYPE_UNQUALIFIED;
9958
9959             /* Warn about some types functions can't return.  */
9960
9961             if (TREE_CODE (type) == FUNCTION_TYPE)
9962               {
9963                 error ("`%s' declared as function returning a function", name);
9964                 type = integer_type_node;
9965               }
9966             if (TREE_CODE (type) == ARRAY_TYPE)
9967               {
9968                 error ("`%s' declared as function returning an array", name);
9969                 type = integer_type_node;
9970               }
9971
9972             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9973               inner_decl = TREE_OPERAND (inner_decl, 1);
9974
9975             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
9976               inner_decl = dname;
9977
9978             /* Pick up type qualifiers which should be applied to `this'.  */
9979             quals = CALL_DECLARATOR_QUALS (declarator);
9980
9981             /* Pick up the exception specifications.  */
9982             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9983
9984             /* Say it's a definition only for the CALL_EXPR
9985                closest to the identifier.  */
9986             funcdecl_p
9987               = inner_decl 
9988               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9989                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
9990                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9991             
9992             if (ctype == NULL_TREE
9993                 && decl_context == FIELD
9994                 && funcdecl_p
9995                 && (friendp == 0 || dname == current_class_name))
9996               ctype = current_class_type;
9997
9998             if (ctype && return_type == return_conversion)
9999               TYPE_HAS_CONVERSION (ctype) = 1;
10000             if (ctype && constructor_name (ctype) == dname)
10001               {
10002                 /* We are within a class's scope. If our declarator name
10003                    is the same as the class name, and we are defining
10004                    a function, then it is a constructor/destructor, and
10005                    therefore returns a void type.  */
10006
10007                 if (flags == DTOR_FLAG)
10008                   {
10009                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10010                        not be declared const or volatile.  A destructor
10011                        may not be static.  */
10012                     if (staticp == 2)
10013                       error ("destructor cannot be static member function");
10014                     if (quals)
10015                       {
10016                         cp_error ("destructors may not be `%s'",
10017                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10018                         quals = NULL_TREE;
10019                       }
10020                     if (decl_context == FIELD)
10021                       {
10022                         if (! member_function_or_else (ctype, current_class_type,
10023                                                        "destructor for alien class `%s' cannot be a member"))
10024                           return void_type_node;
10025                       }
10026                   }
10027                 else            /* It's a constructor.  */
10028                   {
10029                     if (explicitp == 1)
10030                       explicitp = 2;
10031                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10032                        not be declared const or volatile.  A constructor may
10033                        not be virtual.  A constructor may not be static.  */
10034                     if (staticp == 2)
10035                       error ("constructor cannot be static member function");
10036                     if (virtualp)
10037                       {
10038                         pedwarn ("constructors cannot be declared virtual");
10039                         virtualp = 0;
10040                       }
10041                     if (quals)
10042                       {
10043                         cp_error ("constructors may not be `%s'",
10044                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10045                         quals = NULL_TREE;
10046                       }
10047                     {
10048                       RID_BIT_TYPE tmp_bits;
10049                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10050                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10051                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10052                       if (RIDBIT_ANY_SET (tmp_bits))
10053                         error ("return value type specifier for constructor ignored");
10054                     }
10055                     type = build_pointer_type (ctype);
10056                     if (decl_context == FIELD)
10057                       {
10058                         if (! member_function_or_else (ctype, current_class_type,
10059                                                        "constructor for alien class `%s' cannot be member"))
10060                           return void_type_node;
10061                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10062                         if (return_type != return_ctor)
10063                           return NULL_TREE;
10064                       }
10065                   }
10066                 if (decl_context == FIELD)
10067                   staticp = 0;
10068               }
10069             else if (friendp)
10070               {
10071                 if (initialized)
10072                   error ("can't initialize friend function `%s'", name);
10073                 if (virtualp)
10074                   {
10075                     /* Cannot be both friend and virtual.  */
10076                     error ("virtual functions cannot be friends");
10077                     RIDBIT_RESET (RID_FRIEND, specbits);
10078                     friendp = 0;
10079                   }
10080                 if (decl_context == NORMAL)
10081                   error ("friend declaration not in class definition");
10082                 if (current_function_decl && funcdef_flag)
10083                   cp_error ("can't define friend function `%s' in a local class definition",
10084                             name);
10085               }
10086
10087             /* Construct the function type and go to the next
10088                inner layer of declarator.  */
10089
10090             declarator = TREE_OPERAND (declarator, 0);
10091
10092             /* FIXME: This is where default args should be fully
10093                processed.  */
10094
10095             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10096
10097             if (declarator && flags == DTOR_FLAG)
10098               {
10099                 /* A destructor declared in the body of a class will
10100                    be represented as a BIT_NOT_EXPR.  But, we just
10101                    want the underlying IDENTIFIER.  */
10102                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10103                   declarator = TREE_OPERAND (declarator, 0);
10104                 
10105                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10106                   arg_types = void_list_node;
10107                 else if (arg_types == NULL_TREE
10108                          || arg_types != void_list_node)
10109                   {
10110                     cp_error ("destructors may not have parameters");
10111                     arg_types = void_list_node;
10112                     last_function_parms = NULL_TREE;
10113                   }
10114               }
10115
10116             /* ANSI says that `const int foo ();'
10117                does not make the function foo const.  */
10118             type = build_function_type (type, arg_types);
10119
10120             {
10121               tree t;
10122               for (t = arg_types; t; t = TREE_CHAIN (t))
10123                 if (TREE_PURPOSE (t)
10124                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10125                   {
10126                     add_defarg_fn (type);
10127                     break;
10128                   }
10129             }
10130           }
10131           break;
10132
10133         case ADDR_EXPR:
10134         case INDIRECT_REF:
10135           /* Filter out pointers-to-references and references-to-references.
10136              We can get these if a TYPE_DECL is used.  */
10137
10138           if (TREE_CODE (type) == REFERENCE_TYPE)
10139             {
10140               error ("cannot declare %s to references",
10141                      TREE_CODE (declarator) == ADDR_EXPR
10142                      ? "references" : "pointers");
10143               declarator = TREE_OPERAND (declarator, 0);
10144               continue;
10145             }
10146
10147           if (TREE_CODE (type) == OFFSET_TYPE
10148               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10149                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10150             {
10151               cp_error ("cannot declare pointer to `%#T' member",
10152                         TREE_TYPE (type));
10153               type = TREE_TYPE (type);
10154             }
10155
10156           /* Merge any constancy or volatility into the target type
10157              for the pointer.  */
10158
10159           /* We now know that the TYPE_QUALS don't apply to the decl,
10160              but to the target of the pointer.  */
10161           type_quals = TYPE_UNQUALIFIED;
10162
10163           if (TREE_CODE (declarator) == ADDR_EXPR)
10164             {
10165               if (TREE_CODE (type) == VOID_TYPE)
10166                 error ("invalid type: `void &'");
10167               else
10168                 type = build_reference_type (type);
10169             }
10170           else if (TREE_CODE (type) == METHOD_TYPE)
10171             type = build_ptrmemfunc_type (build_pointer_type (type));
10172           else
10173             type = build_pointer_type (type);
10174
10175           /* Process a list of type modifier keywords (such as
10176              const or volatile) that were given inside the `*' or `&'.  */
10177
10178           if (TREE_TYPE (declarator))
10179             {
10180               register tree typemodlist;
10181               int erred = 0;
10182
10183               constp = 0;
10184               volatilep = 0;
10185               restrictp = 0;
10186               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10187                    typemodlist = TREE_CHAIN (typemodlist))
10188                 {
10189                   tree qualifier = TREE_VALUE (typemodlist);
10190
10191                   if (qualifier == ridpointers[(int) RID_CONST])
10192                     constp++;
10193                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10194                     volatilep++;
10195                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10196                     restrictp++;
10197                   else if (!erred)
10198                     {
10199                       erred = 1;
10200                       error ("invalid type modifier within pointer declarator");
10201                     }
10202                 }
10203               if (constp > 1)
10204                 pedwarn ("duplicate `const'");
10205               if (volatilep > 1)
10206                 pedwarn ("duplicate `volatile'");
10207               if (restrictp > 1)
10208                 pedwarn ("duplicate `restrict'");
10209
10210               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10211                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10212                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10213               if (TREE_CODE (declarator) == ADDR_EXPR
10214                   && (constp || volatilep))
10215                 {
10216                   if (constp)
10217                     pedwarn ("discarding `const' applied to a reference");
10218                   if (volatilep)
10219                     pedwarn ("discarding `volatile' applied to a reference");
10220                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10221                 }
10222               type = cp_build_qualified_type (type, type_quals);
10223             }
10224           declarator = TREE_OPERAND (declarator, 0);
10225           ctype = NULL_TREE;
10226           break;
10227
10228         case SCOPE_REF:
10229           {
10230             /* We have converted type names to NULL_TREE if the
10231                name was bogus, or to a _TYPE node, if not.
10232
10233                The variable CTYPE holds the type we will ultimately
10234                resolve to.  The code here just needs to build
10235                up appropriate member types.  */
10236             tree sname = TREE_OPERAND (declarator, 1);
10237             tree t;
10238
10239             /* Destructors can have their visibilities changed as well.  */
10240             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10241               sname = TREE_OPERAND (sname, 0);
10242
10243             if (TREE_COMPLEXITY (declarator) == 0)
10244               /* This needs to be here, in case we are called
10245                  multiple times.  */ ;
10246             else if (TREE_COMPLEXITY (declarator) == -1)
10247               /* Namespace member. */
10248               pop_decl_namespace ();
10249             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10250               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10251             else if (! IS_AGGR_TYPE_CODE
10252                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10253               ;
10254             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10255               {
10256                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10257                    that refer to ctype.  They couldn't be resolved earlier
10258                    because we hadn't pushed into the class yet.
10259                    Example: resolve 'B<T>::type' in
10260                    'B<typename B<T>::type> B<T>::f () { }'.  */
10261                 if (current_template_parms
10262                     && uses_template_parms (type)
10263                     && uses_template_parms (current_class_type))
10264                   {
10265                     tree args = current_template_args ();
10266                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10267                   }
10268
10269                 /* This pop_nested_class corresponds to the
10270                    push_nested_class used to push into class scope for
10271                    parsing the argument list of a function decl, in
10272                    qualified_id.  */
10273                 pop_nested_class ();
10274                 TREE_COMPLEXITY (declarator) = current_class_depth;
10275               }
10276             else
10277               my_friendly_abort (16);
10278
10279             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10280               {
10281                 /* We had a reference to a global decl, or
10282                    perhaps we were given a non-aggregate typedef,
10283                    in which case we cleared this out, and should just
10284                    keep going as though it wasn't there.  */
10285                 declarator = sname;
10286                 continue;
10287               }
10288             ctype = TREE_OPERAND (declarator, 0);
10289
10290             t = ctype;
10291             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10292               {
10293                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10294                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10295                   template_count += 1;
10296                 t = TYPE_MAIN_DECL (t);
10297                 if (DECL_LANG_SPECIFIC (t))
10298                   t = DECL_CLASS_CONTEXT (t);
10299                 else
10300                   t = NULL_TREE;
10301               }
10302
10303             if (sname == NULL_TREE)
10304               goto done_scoping;
10305
10306             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10307               {
10308                 /* This is the `standard' use of the scoping operator:
10309                    basetype :: member .  */
10310
10311                 if (ctype == current_class_type)
10312                   {
10313                     /* class A {
10314                          void A::f ();
10315                        };
10316
10317                        Is this ill-formed?  */
10318
10319                     if (pedantic)
10320                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10321                                   ctype, name);
10322                   }
10323                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10324                   {
10325                     if (current_class_type == NULL_TREE
10326                         || friendp)
10327                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10328                                                       TYPE_ARG_TYPES (type));
10329                     else
10330                       {
10331                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10332                                   ctype, name, current_class_type);
10333                         return void_type_node;
10334                       }
10335                   }
10336                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10337                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10338                   {
10339                     /* Have to move this code elsewhere in this function.
10340                        this code is used for i.e., typedef int A::M; M *pm;
10341
10342                        It is?  How? jason 10/2/94 */
10343
10344                     if (current_class_type)
10345                       {
10346                         cp_error ("cannot declare member `%T::%s' within `%T'",
10347                                   ctype, name, current_class_type);
10348                         return void_type_node;
10349                       }
10350                     type = build_offset_type (ctype, type);
10351                   }
10352                 else if (uses_template_parms (ctype))
10353                   {
10354                     if (TREE_CODE (type) == FUNCTION_TYPE)
10355                       type
10356                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10357                                                    TYPE_ARG_TYPES (type));
10358                   }
10359                 else
10360                   {
10361                     cp_error ("structure `%T' not yet defined", ctype);
10362                     return error_mark_node;
10363                   }
10364
10365                 declarator = sname;
10366               }
10367             else if (TREE_CODE (sname) == SCOPE_REF)
10368               my_friendly_abort (17);
10369             else
10370               {
10371               done_scoping:
10372                 declarator = TREE_OPERAND (declarator, 1);
10373                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10374                   /* In this case, we will deal with it later.  */
10375                   ;
10376                 else
10377                   {
10378                     if (TREE_CODE (type) == FUNCTION_TYPE)
10379                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10380                                                       TYPE_ARG_TYPES (type));
10381                     else
10382                       type = build_offset_type (ctype, type);
10383                   }
10384               }
10385           }
10386           break;
10387
10388         case BIT_NOT_EXPR:
10389           declarator = TREE_OPERAND (declarator, 0);
10390           break;
10391
10392         case RECORD_TYPE:
10393         case UNION_TYPE:
10394         case ENUMERAL_TYPE:
10395           declarator = NULL_TREE;
10396           break;
10397
10398         case ERROR_MARK:
10399           declarator = NULL_TREE;
10400           break;
10401
10402         default:
10403           my_friendly_abort (158);
10404         }
10405     }
10406
10407   /* See the comment for the TREE_LIST case, above.  */
10408   if (inner_attrs)
10409     {
10410       if (! ignore_attrs)
10411         decl_attributes (type, inner_attrs, NULL_TREE);
10412       else if (attrlist)
10413         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10414       else
10415         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10416     }
10417
10418   /* Now TYPE has the actual type.  */
10419
10420   if (explicitp == 1 || (explicitp && friendp))
10421     {
10422       /* [dcl.fct.spec] The explicit specifier shall only be used in
10423          declarations of constructors within a class definition.  */
10424       error ("only declarations of constructors can be `explicit'");
10425       explicitp = 0;
10426     }
10427
10428   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10429     {
10430       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10431         {
10432           error ("non-member `%s' cannot be declared `mutable'", name);
10433           RIDBIT_RESET (RID_MUTABLE, specbits);
10434         }
10435       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10436         {
10437           error ("non-object member `%s' cannot be declared `mutable'", name);
10438           RIDBIT_RESET (RID_MUTABLE, specbits);
10439         }
10440       else if (TREE_CODE (type) == FUNCTION_TYPE
10441                || TREE_CODE (type) == METHOD_TYPE)
10442         {
10443           error ("function `%s' cannot be declared `mutable'", name);
10444           RIDBIT_RESET (RID_MUTABLE, specbits);
10445         }
10446       else if (staticp)
10447         {
10448           error ("static `%s' cannot be declared `mutable'", name);
10449           RIDBIT_RESET (RID_MUTABLE, specbits);
10450         }
10451       else if (type_quals & TYPE_QUAL_CONST)
10452         {
10453           error ("const `%s' cannot be declared `mutable'", name);
10454           RIDBIT_RESET (RID_MUTABLE, specbits);
10455         }
10456     }
10457
10458   if (declarator == NULL_TREE
10459       || TREE_CODE (declarator) == IDENTIFIER_NODE
10460       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10461           && (TREE_CODE (type) == FUNCTION_TYPE
10462               || TREE_CODE (type) == METHOD_TYPE)))
10463     /* OK */;
10464   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10465     {
10466       cp_error ("template-id `%D' used as a declarator", declarator);
10467       declarator = dname;
10468     }
10469   else
10470     /* Unexpected declarator format.  */
10471     my_friendly_abort (990210);
10472
10473   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10474
10475   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10476     {
10477       tree decl;
10478
10479       /* Note that the grammar rejects storage classes
10480          in typenames, fields or parameters.  */
10481       if (current_lang_name == lang_name_java)
10482         TYPE_FOR_JAVA (type) = 1;
10483
10484       if (decl_context == FIELD)
10485         {
10486           if (declarator == constructor_name (current_class_type))
10487             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10488                         declarator);
10489           decl = build_lang_decl (TYPE_DECL, declarator, type);
10490         }
10491       else
10492         {
10493           /* Make sure this typedef lives as long as its type,
10494              since it might be used as a template parameter. */
10495           if (type != error_mark_node)
10496             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10497           if (processing_template_decl)
10498             decl = build_lang_decl (TYPE_DECL, declarator, type);
10499           else
10500             decl = build_decl (TYPE_DECL, declarator, type);
10501           if (type != error_mark_node)
10502             pop_obstacks ();
10503         }
10504
10505       /* If the user declares "typedef struct {...} foo" then the
10506          struct will have an anonymous name.  Fill that name in now.
10507          Nothing can refer to it, so nothing needs know about the name
10508          change.  */
10509       if (type != error_mark_node
10510           && TYPE_NAME (type)
10511           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10512           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10513           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10514         {
10515           tree oldname = TYPE_NAME (type);
10516           tree t;
10517
10518           /* Replace the anonymous name with the real name everywhere.  */
10519           lookup_tag_reverse (type, declarator);
10520           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10521             if (TYPE_NAME (t) == oldname)
10522               TYPE_NAME (t) = decl;
10523
10524           if (TYPE_LANG_SPECIFIC (type))
10525             TYPE_WAS_ANONYMOUS (type) = 1;
10526
10527           /* If this is a typedef within a template class, the nested
10528              type is a (non-primary) template.  The name for the
10529              template needs updating as well.  */
10530           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10531             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10532               = TYPE_IDENTIFIER (type);
10533
10534           /* XXX Temporarily set the scope. 
10535              When returning, start_decl expects it as NULL_TREE,
10536              and will then then set it using pushdecl. */
10537           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10538           if (current_class_type)
10539             DECL_CONTEXT (decl) = current_class_type;
10540           else
10541             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10542
10543           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10544           DECL_ASSEMBLER_NAME (decl)
10545             = get_identifier (build_overload_name (type, 1, 1));
10546           DECL_CONTEXT (decl) = NULL_TREE;
10547
10548           /* FIXME remangle member functions; member functions of a
10549              type with external linkage have external linkage.  */
10550         }
10551
10552       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10553         {
10554           cp_error_at ("typedef name may not be class-qualified", decl);
10555           return NULL_TREE;
10556         }
10557       else if (quals)
10558         {
10559           if (ctype == NULL_TREE)
10560             {
10561               if (TREE_CODE (type) != METHOD_TYPE)
10562                 cp_error_at ("invalid type qualifier for non-method type", decl);
10563               else
10564                 ctype = TYPE_METHOD_BASETYPE (type);
10565             }
10566           if (ctype != NULL_TREE)
10567             grok_method_quals (ctype, decl, quals);
10568         }
10569
10570       if (RIDBIT_SETP (RID_SIGNED, specbits)
10571           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10572         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10573
10574       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10575                       inlinep, friendp, raises != NULL_TREE);
10576
10577       if (initialized)
10578         error ("typedef declaration includes an initializer");
10579
10580       return decl;
10581     }
10582
10583   /* Detect the case of an array type of unspecified size
10584      which came, as such, direct from a typedef name.
10585      We must copy the type, so that each identifier gets
10586      a distinct type, so that each identifier's size can be
10587      controlled separately by its own initializer.  */
10588
10589   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10590       && TYPE_DOMAIN (type) == NULL_TREE)
10591     {
10592       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10593     }
10594
10595   /* If this is a type name (such as, in a cast or sizeof),
10596      compute the type and return it now.  */
10597
10598   if (decl_context == TYPENAME)
10599     {
10600       /* Note that the grammar rejects storage classes
10601          in typenames, fields or parameters.  */
10602       if (type_quals != TYPE_UNQUALIFIED)
10603         type_quals = TYPE_UNQUALIFIED;
10604
10605       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10606       if (friendp)
10607         {
10608           if (type_quals != TYPE_UNQUALIFIED)
10609             {
10610               cp_error ("type qualifiers specified for friend class declaration");
10611               type_quals = TYPE_UNQUALIFIED;
10612             }
10613           if (inlinep)
10614             {
10615               cp_error ("`inline' specified for friend class declaration");
10616               inlinep = 0;
10617             }
10618
10619           /* Only try to do this stuff if we didn't already give up.  */
10620           if (type != integer_type_node)
10621             {
10622               /* A friendly class?  */
10623               if (current_class_type)
10624                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10625               else
10626                 error ("trying to make class `%s' a friend of global scope",
10627                        TYPE_NAME_STRING (type));
10628               type = void_type_node;
10629             }
10630         }
10631       else if (quals)
10632         {
10633           tree dummy = build_decl (TYPE_DECL, declarator, type);
10634           if (ctype == NULL_TREE)
10635             {
10636               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10637               ctype = TYPE_METHOD_BASETYPE (type);
10638             }
10639           grok_method_quals (ctype, dummy, quals);
10640           type = TREE_TYPE (dummy);
10641         }
10642
10643       return type;
10644     }
10645   else if (declarator == NULL_TREE && decl_context != PARM
10646            && decl_context != CATCHPARM
10647            && TREE_CODE (type) != UNION_TYPE
10648            && ! bitfield)
10649     {
10650       cp_error ("abstract declarator `%T' used as declaration", type);
10651       declarator = make_anon_name ();
10652     }
10653
10654   /* `void' at top level (not within pointer)
10655      is allowed only in typedefs or type names.
10656      We don't complain about parms either, but that is because
10657      a better error message can be made later.  */
10658
10659   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10660     {
10661       if (! declarator)
10662         error ("unnamed variable or field declared void");
10663       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10664         {
10665           if (IDENTIFIER_OPNAME_P (declarator))
10666             my_friendly_abort (356);
10667           else
10668             error ("variable or field `%s' declared void", name);
10669         }
10670       else
10671         error ("variable or field declared void");
10672       type = integer_type_node;
10673     }
10674
10675   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10676      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10677
10678   if (decl_context == PARM || decl_context == CATCHPARM)
10679     {
10680       if (ctype || in_namespace)
10681         error ("cannot use `::' in parameter declaration");
10682
10683       /* A parameter declared as an array of T is really a pointer to T.
10684          One declared as a function is really a pointer to a function.
10685          One declared as a member is really a pointer to member.  */
10686
10687       if (TREE_CODE (type) == ARRAY_TYPE)
10688         {
10689           /* Transfer const-ness of array into that of type pointed to.  */
10690           type = build_pointer_type (TREE_TYPE (type));
10691           type_quals = TYPE_UNQUALIFIED;
10692         }
10693       else if (TREE_CODE (type) == FUNCTION_TYPE)
10694         type = build_pointer_type (type);
10695       else if (TREE_CODE (type) == OFFSET_TYPE)
10696         type = build_pointer_type (type);
10697       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10698         {
10699           error ("declaration of `%s' as void", name);
10700           return NULL_TREE;
10701         }
10702     }
10703   
10704   {
10705     register tree decl;
10706
10707     if (decl_context == PARM)
10708       {
10709         decl = build_decl (PARM_DECL, declarator, type);
10710
10711         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10712                         inlinep, friendp, raises != NULL_TREE);
10713
10714         /* Compute the type actually passed in the parmlist,
10715            for the case where there is no prototype.
10716            (For example, shorts and chars are passed as ints.)
10717            When there is a prototype, this is overridden later.  */
10718
10719         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10720       }
10721     else if (decl_context == FIELD)
10722       {
10723         if (type == error_mark_node)
10724           {
10725             /* Happens when declaring arrays of sizes which
10726                are error_mark_node, for example.  */
10727             decl = NULL_TREE;
10728           }
10729         else if (in_namespace && !friendp)
10730           {
10731             /* Something like struct S { int N::j; };  */
10732             cp_error ("invalid use of `::'");
10733             decl = NULL_TREE;
10734           }
10735         else if (TREE_CODE (type) == FUNCTION_TYPE)
10736           {
10737             int publicp = 0;
10738             tree function_context;
10739
10740             /* We catch the others as conflicts with the builtin
10741                typedefs.  */
10742             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10743               {
10744                 cp_error ("function `%D' cannot be declared friend",
10745                           declarator);
10746                 friendp = 0;
10747               }
10748
10749             if (friendp == 0)
10750               {
10751                 if (ctype == NULL_TREE)
10752                   ctype = current_class_type;
10753
10754                 if (ctype == NULL_TREE)
10755                   {
10756                     cp_error ("can't make `%D' into a method -- not in a class",
10757                               declarator);
10758                     return void_type_node;
10759                   }
10760
10761                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10762                    ARM 9.5 */
10763                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10764                   {
10765                     cp_error ("function `%D' declared virtual inside a union",
10766                               declarator);
10767                     return void_type_node;
10768                   }
10769
10770                 if (declarator == ansi_opname[(int) NEW_EXPR]
10771                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10772                     || declarator == ansi_opname[(int) DELETE_EXPR]
10773                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10774                   {
10775                     if (virtualp)
10776                       {
10777                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10778                                   declarator);
10779                         virtualp = 0;
10780                       }
10781                   }
10782                 else if (staticp < 2)
10783                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10784                                                   TYPE_ARG_TYPES (type));
10785               }
10786
10787             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10788             function_context = (ctype != NULL_TREE) ? 
10789               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10790             publicp = (! friendp || ! staticp)
10791               && function_context == NULL_TREE;
10792             decl = grokfndecl (ctype, type, 
10793                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10794                                ? declarator : dname,
10795                                declarator,
10796                                virtualp, flags, quals, raises,
10797                                friendp ? -1 : 0, friendp, publicp, inlinep,
10798                                funcdef_flag, template_count, in_namespace);
10799             if (decl == NULL_TREE)
10800               return decl;
10801 #if 0
10802             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10803             /* The decl and setting of decl_machine_attr is also turned off.  */
10804             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10805 #endif
10806
10807             /* [class.conv.ctor]
10808
10809                A constructor declared without the function-specifier
10810                explicit that can be called with a single parameter
10811                specifies a conversion from the type of its first
10812                parameter to the type of its class.  Such a constructor
10813                is called a converting constructor.  */
10814             if (explicitp == 2)
10815               DECL_NONCONVERTING_P (decl) = 1;
10816             else if (DECL_CONSTRUCTOR_P (decl))
10817               {
10818                 /* The constructor can be called with exactly one
10819                    parameter if there is at least one parameter, and
10820                    any subsequent parameters have default arguments.
10821                    We don't look at the first parameter, which is
10822                    really just the `this' parameter for the new
10823                    object.  */
10824                 tree arg_types = 
10825                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10826
10827                 /* Skip the `in_chrg' argument too, if present.  */
10828                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10829                   arg_types = TREE_CHAIN (arg_types);
10830
10831                 if (arg_types == void_list_node
10832                     || (arg_types 
10833                         && TREE_CHAIN (arg_types) 
10834                         && TREE_CHAIN (arg_types) != void_list_node
10835                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10836                   DECL_NONCONVERTING_P (decl) = 1;
10837               }
10838           }
10839         else if (TREE_CODE (type) == METHOD_TYPE)
10840           {
10841             /* We only get here for friend declarations of
10842                members of other classes.  */
10843             /* All method decls are public, so tell grokfndecl to set
10844                TREE_PUBLIC, also.  */
10845             decl = grokfndecl (ctype, type, declarator, declarator,
10846                                virtualp, flags, quals, raises,
10847                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10848                                template_count, in_namespace);
10849             if (decl == NULL_TREE)
10850               return NULL_TREE;
10851           }
10852         else if (!staticp && ! processing_template_decl
10853                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10854                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10855           {
10856             if (declarator)
10857               cp_error ("field `%D' has incomplete type", declarator);
10858             else
10859               cp_error ("name `%T' has incomplete type", type);
10860
10861             /* If we're instantiating a template, tell them which
10862                instantiation made the field's type be incomplete.  */
10863             if (current_class_type
10864                 && TYPE_NAME (current_class_type)
10865                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10866                 && declspecs && TREE_VALUE (declspecs)
10867                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10868               cp_error ("  in instantiation of template `%T'",
10869                         current_class_type);
10870
10871             type = error_mark_node;
10872             decl = NULL_TREE;
10873           }
10874         else
10875           {
10876             if (friendp)
10877               {
10878                 error ("`%s' is neither function nor method; cannot be declared friend",
10879                        IDENTIFIER_POINTER (declarator));
10880                 friendp = 0;
10881               }
10882             decl = NULL_TREE;
10883           }
10884
10885         if (friendp)
10886           {
10887             /* Friends are treated specially.  */
10888             if (ctype == current_class_type)
10889               warning ("member functions are implicitly friends of their class");
10890             else
10891               {
10892                 tree t = NULL_TREE;
10893                 if (decl && DECL_NAME (decl))
10894                   {
10895                     if (template_class_depth (current_class_type) == 0)
10896                       {
10897                         decl 
10898                           = check_explicit_specialization 
10899                           (declarator, decl,
10900                            template_count, 2 * (funcdef_flag != 0) + 4);
10901                         if (decl == error_mark_node)
10902                           return error_mark_node;
10903                       }
10904
10905                     t = do_friend (ctype, declarator, decl,
10906                                    last_function_parms, attrlist, flags, quals,
10907                                    funcdef_flag);
10908                   }
10909                 if (t && funcdef_flag)
10910                   return t;
10911                 
10912                 return void_type_node;
10913               }
10914           }
10915
10916         /* Structure field.  It may not be a function, except for C++ */
10917
10918         if (decl == NULL_TREE)
10919           {
10920             if (initialized)
10921               {
10922                 if (!staticp)
10923                   {
10924                     /* An attempt is being made to initialize a non-static
10925                        member.  But, from [class.mem]:
10926                        
10927                        4 A member-declarator can contain a
10928                        constant-initializer only if it declares a static
10929                        member (_class.static_) of integral or enumeration
10930                        type, see _class.static.data_.  
10931
10932                        This used to be relatively common practice, but
10933                        the rest of the compiler does not correctly
10934                        handle the initialization unless the member is
10935                        static so we make it static below.  */
10936                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10937                                 declarator);
10938                     cp_pedwarn ("making `%D' static", declarator);
10939                     staticp = 1;
10940                   }
10941
10942                 if (uses_template_parms (type))
10943                   /* We'll check at instantiation time.  */
10944                   ;
10945                 else if (check_static_variable_definition (declarator,
10946                                                            type))
10947                   /* If we just return the declaration, crashes
10948                      will sometimes occur.  We therefore return
10949                      void_type_node, as if this was a friend
10950                      declaration, to cause callers to completely
10951                      ignore this declaration.  */
10952                   return void_type_node;
10953               }
10954
10955             /* 9.2p13 [class.mem] */
10956             if (declarator == constructor_name (current_class_type)
10957                 /* Divergence from the standard:  In extern "C", we
10958                    allow non-static data members here, because C does
10959                    and /usr/include/netinet/in.h uses that.  */
10960                 && (staticp || ! in_system_header))
10961               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10962                           declarator);
10963
10964             if (staticp)
10965               {
10966                 /* C++ allows static class members.  All other work
10967                    for this is done by grokfield.  */
10968                 decl = build_lang_decl (VAR_DECL, declarator, type);
10969                 TREE_STATIC (decl) = 1;
10970                 /* In class context, 'static' means public access.  */
10971                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10972               }
10973             else
10974               {
10975                 decl = build_lang_decl (FIELD_DECL, declarator, type);
10976                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10977                   {
10978                     DECL_MUTABLE_P (decl) = 1;
10979                     RIDBIT_RESET (RID_MUTABLE, specbits);
10980                   }
10981               }
10982
10983             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10984                             inlinep, friendp, raises != NULL_TREE);
10985           }
10986       }
10987     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10988       {
10989         tree original_name;
10990         int publicp = 0;
10991
10992         if (! declarator)
10993           return NULL_TREE;
10994
10995         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10996           original_name = dname;
10997         else
10998           original_name = declarator;
10999
11000         if (RIDBIT_SETP (RID_AUTO, specbits))
11001           error ("storage class `auto' invalid for function `%s'", name);
11002         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11003           error ("storage class `register' invalid for function `%s'", name);
11004
11005         /* Function declaration not at top level.
11006            Storage classes other than `extern' are not allowed
11007            and `extern' makes no difference.  */
11008         if (! toplevel_bindings_p ()
11009             && (RIDBIT_SETP (RID_STATIC, specbits)
11010                 || RIDBIT_SETP (RID_INLINE, specbits))
11011             && pedantic)
11012           {
11013             if (RIDBIT_SETP (RID_STATIC, specbits))
11014               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11015             else
11016               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11017           }
11018         
11019         if (ctype == NULL_TREE)
11020           {
11021             if (virtualp)
11022               {
11023                 error ("virtual non-class function `%s'", name);
11024                 virtualp = 0;
11025               }
11026           }
11027         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11028           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11029                                           TYPE_ARG_TYPES (type));
11030
11031         /* Record presence of `static'.  */
11032         publicp = (ctype != NULL_TREE
11033                    || RIDBIT_SETP (RID_EXTERN, specbits)
11034                    || !RIDBIT_SETP (RID_STATIC, specbits));
11035
11036         decl = grokfndecl (ctype, type, original_name, declarator,
11037                            virtualp, flags, quals, raises,
11038                            1, friendp,
11039                            publicp, inlinep, funcdef_flag, 
11040                            template_count, in_namespace);
11041         if (decl == NULL_TREE)
11042           return NULL_TREE;
11043
11044         if (staticp == 1)
11045           {
11046             int illegal_static = 0;
11047
11048             /* Don't allow a static member function in a class, and forbid
11049                declaring main to be static.  */
11050             if (TREE_CODE (type) == METHOD_TYPE)
11051               {
11052                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11053                 illegal_static = 1;
11054               }
11055             else if (current_function_decl)
11056               {
11057                 /* FIXME need arm citation */
11058                 error ("cannot declare static function inside another function");
11059                 illegal_static = 1;
11060               }
11061
11062             if (illegal_static)
11063               {
11064                 staticp = 0;
11065                 RIDBIT_RESET (RID_STATIC, specbits);
11066               }
11067           }
11068       }
11069     else
11070       {
11071         /* It's a variable.  */
11072
11073         /* An uninitialized decl with `extern' is a reference.  */
11074         decl = grokvardecl (type, declarator, &specbits, 
11075                             initialized, 
11076                             (type_quals & TYPE_QUAL_CONST) != 0, 
11077                             in_namespace);
11078         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11079                         inlinep, friendp, raises != NULL_TREE);
11080
11081         if (ctype)
11082           {
11083             DECL_CONTEXT (decl) = ctype;
11084             if (staticp == 1)
11085               {
11086                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11087                 staticp = 0;
11088                 RIDBIT_RESET (RID_STATIC, specbits);
11089               }
11090             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11091               {
11092                 cp_error ("static member `%D' declared `register'", decl);
11093                 RIDBIT_RESET (RID_REGISTER, specbits);
11094               }
11095             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11096               {
11097                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11098                             decl);
11099                 RIDBIT_RESET (RID_EXTERN, specbits);
11100               }
11101           }
11102       }
11103
11104     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11105
11106     /* Record `register' declaration for warnings on &
11107        and in case doing stupid register allocation.  */
11108
11109     if (RIDBIT_SETP (RID_REGISTER, specbits))
11110       DECL_REGISTER (decl) = 1;
11111
11112     if (RIDBIT_SETP (RID_EXTERN, specbits))
11113       DECL_THIS_EXTERN (decl) = 1;
11114
11115     if (RIDBIT_SETP (RID_STATIC, specbits))
11116       DECL_THIS_STATIC (decl) = 1;
11117
11118     /* Record constancy and volatility.  There's no need to do this
11119        when processing a template; we'll do this for the instantiated
11120        declaration based on the type of DECL.  */
11121     if (!processing_template_decl)
11122       c_apply_type_quals_to_decl (type_quals, decl);
11123
11124     return decl;
11125   }
11126 }
11127 \f
11128 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11129    An empty exprlist is a parmlist.  An exprlist which
11130    contains only identifiers at the global level
11131    is a parmlist.  Otherwise, it is an exprlist.  */
11132
11133 int
11134 parmlist_is_exprlist (exprs)
11135      tree exprs;
11136 {
11137   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11138     return 0;
11139
11140   if (toplevel_bindings_p ())
11141     {
11142       /* At the global level, if these are all identifiers,
11143          then it is a parmlist.  */
11144       while (exprs)
11145         {
11146           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11147             return 1;
11148           exprs = TREE_CHAIN (exprs);
11149         }
11150       return 0;
11151     }
11152   return 1;
11153 }
11154
11155 /* Subroutine of start_function.  Ensure that each of the parameter
11156    types (as listed in PARMS) is complete, as is required for a
11157    function definition.  */
11158
11159 static void
11160 require_complete_types_for_parms (parms)
11161      tree parms;
11162 {
11163   while (parms)
11164     {
11165       tree type = TREE_TYPE (parms);
11166       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11167         {
11168           if (DECL_NAME (parms))
11169             error ("parameter `%s' has incomplete type",
11170                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11171           else
11172             error ("parameter has incomplete type");
11173           TREE_TYPE (parms) = error_mark_node;
11174         }
11175       else
11176         layout_decl (parms, 0);
11177
11178       parms = TREE_CHAIN (parms);
11179     }
11180 }
11181
11182 /* Returns *TP if *TP is a local variable (or parameter).  Returns
11183    NULL_TREE otherwise.  */
11184
11185 static tree
11186 local_variable_p (tp)
11187      tree *tp;
11188 {
11189   tree t = *tp;
11190
11191   if ((TREE_CODE (t) == VAR_DECL 
11192        /* A VAR_DECL with a context that is a _TYPE is a static data
11193           member.  */
11194        && !TYPE_P (CP_DECL_CONTEXT (t))
11195        /* Any other non-local variable must be at namespace scope.  */
11196        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11197       || (TREE_CODE (t) == PARM_DECL))
11198     return t;
11199
11200   return NULL_TREE;
11201 }
11202
11203 /* Check that ARG, which is a default-argument expression for a
11204    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11205    something goes wrong.  DECL may also be a _TYPE node, rather than a
11206    DECL, if there is no DECL available.  */
11207
11208 tree
11209 check_default_argument (decl, arg)
11210      tree decl;
11211      tree arg;
11212 {
11213   tree var;
11214   tree decl_type;
11215
11216   if (TREE_CODE (arg) == DEFAULT_ARG)
11217     /* We get a DEFAULT_ARG when looking at an in-class declaration
11218        with a default argument.  Ignore the argument for now; we'll
11219        deal with it after the class is complete.  */
11220     return arg;
11221
11222   if (processing_template_decl || uses_template_parms (arg))
11223     /* We don't do anything checking until instantiation-time.  Note
11224        that there may be uninstantiated arguments even for an
11225        instantiated function, since default arguments are not
11226        instantiated until they are needed.  */
11227     return arg;
11228
11229   if (TYPE_P (decl))
11230     {
11231       decl_type = decl;
11232       decl = NULL_TREE;
11233     }
11234   else
11235     decl_type = TREE_TYPE (decl);
11236
11237   if (arg == error_mark_node 
11238       || decl == error_mark_node
11239       || TREE_TYPE (arg) == error_mark_node
11240       || decl_type == error_mark_node)
11241     /* Something already went wrong.  There's no need to check
11242        further.  */
11243     return error_mark_node;
11244
11245   /* [dcl.fct.default]
11246      
11247      A default argument expression is implicitly converted to the
11248      parameter type.  */
11249   if (!TREE_TYPE (arg)
11250       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11251     {
11252       if (decl)
11253         cp_error ("default argument for `%#D' has type `%T'", 
11254                   decl, TREE_TYPE (arg));
11255       else
11256         cp_error ("default argument for parameter of type `%T' has type `%T'",
11257                   decl_type, TREE_TYPE (arg));
11258
11259       return error_mark_node;
11260     }
11261
11262   /* [dcl.fct.default]
11263
11264      Local variables shall not be used in default argument
11265      expressions. 
11266
11267      The keyword `this' shall not be used in a default argument of a
11268      member function.  */
11269   var = search_tree (&arg, local_variable_p);
11270   if (var)
11271     {
11272       cp_error ("default argument `%E' uses local variable `%D'",
11273                 arg, var);
11274       return error_mark_node;
11275     }
11276
11277   /* All is well.  */
11278   return arg;
11279 }
11280
11281 /* Decode the list of parameter types for a function type.
11282    Given the list of things declared inside the parens,
11283    return a list of types.
11284
11285    The list we receive can have three kinds of elements:
11286    an IDENTIFIER_NODE for names given without types,
11287    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11288    or void_type_node, to mark the end of an argument list
11289    when additional arguments are not permitted (... was not used).
11290
11291    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11292    a mere declaration.  A nonempty identifier-list gets an error message
11293    when FUNCDEF_FLAG is zero.
11294    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11295    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11296
11297    If all elements of the input list contain types,
11298    we return a list of the types.
11299    If all elements contain no type (except perhaps a void_type_node
11300    at the end), we return a null list.
11301    If some have types and some do not, it is an error, and we
11302    return a null list.
11303
11304    Also set last_function_parms to either
11305    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11306    A list of names is converted to a chain of PARM_DECLs
11307    by store_parm_decls so that ultimately it is always a chain of decls.
11308
11309    Note that in C++, parameters can take default values.  These default
11310    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11311    an error to specify default values which are followed by parameters
11312    that have no default values, or an ELLIPSES.  For simplicities sake,
11313    only parameters which are specified with their types can take on
11314    default values.  */
11315
11316 static tree
11317 grokparms (first_parm, funcdef_flag)
11318      tree first_parm;
11319      int funcdef_flag;
11320 {
11321   tree result = NULL_TREE;
11322   tree decls = NULL_TREE;
11323
11324   if (first_parm != NULL_TREE
11325       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11326     {
11327       if (! funcdef_flag)
11328         pedwarn ("parameter names (without types) in function declaration");
11329       last_function_parms = first_parm;
11330       return NULL_TREE;
11331     }
11332   else if (first_parm != NULL_TREE
11333            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11334            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11335     my_friendly_abort (145);
11336   else
11337     {
11338       /* Types were specified.  This is a list of declarators
11339          each represented as a TREE_LIST node.  */
11340       register tree parm, chain;
11341       int any_init = 0, any_error = 0;
11342
11343       if (first_parm != NULL_TREE)
11344         {
11345           tree last_result = NULL_TREE;
11346           tree last_decl = NULL_TREE;
11347
11348           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11349             {
11350               tree type = NULL_TREE, list_node = parm;
11351               register tree decl = TREE_VALUE (parm);
11352               tree init = TREE_PURPOSE (parm);
11353
11354               chain = TREE_CHAIN (parm);
11355               /* @@ weak defense against parse errors.  */
11356               if (TREE_CODE (decl) != VOID_TYPE 
11357                   && TREE_CODE (decl) != TREE_LIST)
11358                 {
11359                   /* Give various messages as the need arises.  */
11360                   if (TREE_CODE (decl) == STRING_CST)
11361                     cp_error ("invalid string constant `%E'", decl);
11362                   else if (TREE_CODE (decl) == INTEGER_CST)
11363                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11364                   continue;
11365                 }
11366
11367               if (TREE_CODE (decl) != VOID_TYPE)
11368                 {
11369                   decl = grokdeclarator (TREE_VALUE (decl),
11370                                          TREE_PURPOSE (decl),
11371                                          PARM, init != NULL_TREE,
11372                                          NULL_TREE);
11373                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11374                     continue;
11375
11376                   /* Top-level qualifiers on the parameters are
11377                      ignored for function types.  */
11378                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11379
11380                   if (TREE_CODE (type) == VOID_TYPE)
11381                     decl = void_type_node;
11382                   else if (TREE_CODE (type) == METHOD_TYPE)
11383                     {
11384                       if (DECL_NAME (decl))
11385                         /* Cannot use the decl here because
11386                            we don't have DECL_CONTEXT set up yet.  */
11387                         cp_error ("parameter `%D' invalidly declared method type",
11388                                   DECL_NAME (decl));
11389                       else
11390                         error ("parameter invalidly declared method type");
11391                       type = build_pointer_type (type);
11392                       TREE_TYPE (decl) = type;
11393                     }
11394                   else if (TREE_CODE (type) == OFFSET_TYPE)
11395                     {
11396                       if (DECL_NAME (decl))
11397                         cp_error ("parameter `%D' invalidly declared offset type",
11398                                   DECL_NAME (decl));
11399                       else
11400                         error ("parameter invalidly declared offset type");
11401                       type = build_pointer_type (type);
11402                       TREE_TYPE (decl) = type;
11403                     }
11404                   else if (abstract_virtuals_error (decl, type))
11405                     any_error = 1;  /* Seems like a good idea. */
11406                   else if (POINTER_TYPE_P (type))
11407                     {
11408                       tree t = type;
11409                       while (POINTER_TYPE_P (t)
11410                              || (TREE_CODE (t) == ARRAY_TYPE
11411                                  && TYPE_DOMAIN (t) != NULL_TREE))
11412                         t = TREE_TYPE (t);
11413                       if (TREE_CODE (t) == ARRAY_TYPE)
11414                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11415                                   type,
11416                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11417                     }
11418                 }
11419
11420               if (TREE_CODE (decl) == VOID_TYPE)
11421                 {
11422                   if (result == NULL_TREE)
11423                     {
11424                       result = void_list_node;
11425                       last_result = result;
11426                     }
11427                   else
11428                     {
11429                       TREE_CHAIN (last_result) = void_list_node;
11430                       last_result = void_list_node;
11431                     }
11432                   if (chain
11433                       && (chain != void_list_node || TREE_CHAIN (chain)))
11434                     error ("`void' in parameter list must be entire list");
11435                   break;
11436                 }
11437
11438               /* Since there is a prototype, args are passed in their own types.  */
11439               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11440               if (PROMOTE_PROTOTYPES
11441                   && (TREE_CODE (type) == INTEGER_TYPE
11442                       || TREE_CODE (type) == ENUMERAL_TYPE)
11443                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11444                 DECL_ARG_TYPE (decl) = integer_type_node;
11445               if (!any_error && init)
11446                 {
11447                   any_init++;
11448                   init = check_default_argument (decl, init);
11449                 }
11450               else
11451                 init = NULL_TREE;
11452
11453               if (decls == NULL_TREE)
11454                 {
11455                   decls = decl;
11456                   last_decl = decls;
11457                 }
11458               else
11459                 {
11460                   TREE_CHAIN (last_decl) = decl;
11461                   last_decl = decl;
11462                 }
11463               list_node = tree_cons (init, type, NULL_TREE);
11464               if (result == NULL_TREE)
11465                 {
11466                   result = list_node;
11467                   last_result = result;
11468                 }
11469               else
11470                 {
11471                   TREE_CHAIN (last_result) = list_node;
11472                   last_result = list_node;
11473                 }
11474             }
11475           if (last_result)
11476             TREE_CHAIN (last_result) = NULL_TREE;
11477           /* If there are no parameters, and the function does not end
11478              with `...', then last_decl will be NULL_TREE.  */
11479           if (last_decl != NULL_TREE)
11480             TREE_CHAIN (last_decl) = NULL_TREE;
11481         }
11482     }
11483
11484   last_function_parms = decls;
11485
11486   return result;
11487 }
11488
11489 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11490    FUNCTION_TYPE with the newly parsed version of its default argument, which
11491    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11492
11493 void
11494 replace_defarg (arg, init)
11495      tree arg, init;
11496 {
11497   if (! processing_template_decl
11498       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11499     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11500                 TREE_TYPE (init), TREE_VALUE (arg));
11501   TREE_PURPOSE (arg) = init;
11502 }
11503 \f
11504 int
11505 copy_args_p (d)
11506      tree d;
11507 {
11508   tree t = FUNCTION_ARG_CHAIN (d);
11509   if (DECL_CONSTRUCTOR_P (d)
11510       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11511     t = TREE_CHAIN (t);
11512   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11513       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11514           == DECL_CLASS_CONTEXT (d))
11515       && (TREE_CHAIN (t) == NULL_TREE
11516           || TREE_CHAIN (t) == void_list_node
11517           || TREE_PURPOSE (TREE_CHAIN (t))))
11518     return 1;
11519   return 0;
11520 }
11521
11522 /* These memoizing functions keep track of special properties which
11523    a class may have.  `grok_ctor_properties' notices whether a class
11524    has a constructor of the form X(X&), and also complains
11525    if the class has a constructor of the form X(X).
11526    `grok_op_properties' takes notice of the various forms of
11527    operator= which are defined, as well as what sorts of type conversion
11528    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11529
11530 int
11531 grok_ctor_properties (ctype, decl)
11532      tree ctype, decl;
11533 {
11534   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11535   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11536
11537   /* When a type has virtual baseclasses, a magical first int argument is
11538      added to any ctor so we can tell if the class has been initialized
11539      yet.  This could screw things up in this function, so we deliberately
11540      ignore the leading int if we're in that situation.  */
11541   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11542     {
11543       my_friendly_assert (parmtypes
11544                           && TREE_VALUE (parmtypes) == integer_type_node,
11545                           980529);
11546       parmtypes = TREE_CHAIN (parmtypes);
11547       parmtype = TREE_VALUE (parmtypes);
11548     }
11549
11550   /* [class.copy]
11551
11552      A non-template constructor for class X is a copy constructor if
11553      its first parameter is of type X&, const X&, volatile X& or const
11554      volatile X&, and either there are no other parameters or else all
11555      other parameters have default arguments.  */
11556   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11557       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11558       && (TREE_CHAIN (parmtypes) == NULL_TREE
11559           || TREE_CHAIN (parmtypes) == void_list_node
11560           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11561       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11562            && is_member_template (DECL_TI_TEMPLATE (decl))))
11563     {
11564       TYPE_HAS_INIT_REF (ctype) = 1;
11565       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11566         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11567     }
11568   /* [class.copy]
11569
11570      A declaration of a constructor for a class X is ill-formed if its
11571      first parameter is of type (optionally cv-qualified) X and either
11572      there are no other parameters or else all other parameters have
11573      default arguments.  
11574
11575      We *don't* complain about member template instantiations that
11576      have this form, though; they can occur as we try to decide what
11577      constructor to use during overload resolution.  Since overload
11578      resolution will never prefer such a constructor to the
11579      non-template copy constructor (which is either explicitly or
11580      implicitly defined), there's no need to worry about their
11581      existence.  Theoretically, they should never even be
11582      instantiated, but that's hard to forestall.  */
11583   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11584            && (TREE_CHAIN (parmtypes) == NULL_TREE
11585                || TREE_CHAIN (parmtypes) == void_list_node
11586                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11587            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11588                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11589     {
11590       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11591                 ctype, ctype);
11592       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11593       return 0;
11594     }
11595   else if (TREE_CODE (parmtype) == VOID_TYPE
11596            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11597     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11598
11599   return 1;
11600 }
11601
11602 /* An operator with this name can be either unary or binary.  */
11603
11604 static int
11605 ambi_op_p (name)
11606      tree name;
11607 {
11608   return (name == ansi_opname [(int) INDIRECT_REF]
11609           || name == ansi_opname [(int) ADDR_EXPR]
11610           || name == ansi_opname [(int) NEGATE_EXPR]
11611           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11612           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11613           || name == ansi_opname [(int) CONVERT_EXPR]);
11614 }
11615
11616 /* An operator with this name can only be unary.  */
11617
11618 static int
11619 unary_op_p (name)
11620      tree name;
11621 {
11622   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11623           || name == ansi_opname [(int) BIT_NOT_EXPR]
11624           || name == ansi_opname [(int) COMPONENT_REF]
11625           || IDENTIFIER_TYPENAME_P (name));
11626 }
11627
11628 /* Do a little sanity-checking on how they declared their operator.  */
11629
11630 void
11631 grok_op_properties (decl, virtualp, friendp)
11632      tree decl;
11633      int virtualp, friendp;
11634 {
11635   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11636   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11637   tree name = DECL_NAME (decl);
11638
11639   if (current_class_type == NULL_TREE)
11640     friendp = 1;
11641
11642   if (! friendp)
11643     {
11644       /* [class.copy]
11645
11646          A user-declared copy assignment operator X::operator= is a
11647          non-static non-template member function of class X with
11648          exactly one parameter of type X, X&, const X&, volatile X& or
11649          const volatile X&.  */
11650       if (name == ansi_opname[(int) MODIFY_EXPR]
11651           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11652                && is_member_template (DECL_TI_TEMPLATE (decl))))
11653         ;
11654       else if (name == ansi_opname[(int) CALL_EXPR])
11655         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11656       else if (name == ansi_opname[(int) ARRAY_REF])
11657         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11658       else if (name == ansi_opname[(int) COMPONENT_REF]
11659                || name == ansi_opname[(int) MEMBER_REF])
11660         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11661       else if (name == ansi_opname[(int) NEW_EXPR])
11662         TYPE_GETS_NEW (current_class_type) |= 1;
11663       else if (name == ansi_opname[(int) DELETE_EXPR])
11664         TYPE_GETS_DELETE (current_class_type) |= 1;
11665       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11666         TYPE_GETS_NEW (current_class_type) |= 2;
11667       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11668         TYPE_GETS_DELETE (current_class_type) |= 2;
11669     }
11670
11671   if (name == ansi_opname[(int) NEW_EXPR]
11672       || name == ansi_opname[(int) VEC_NEW_EXPR])
11673     {
11674       /* When the compiler encounters the definition of A::operator new, it
11675          doesn't look at the class declaration to find out if it's static.  */
11676       if (methodp)
11677         revert_static_member_fn (&decl, NULL, NULL);
11678      
11679       /* Take care of function decl if we had syntax errors.  */
11680       if (argtypes == NULL_TREE)
11681         TREE_TYPE (decl)
11682           = build_function_type (ptr_type_node,
11683                                  hash_tree_chain (integer_type_node,
11684                                                   void_list_node));
11685       else
11686         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11687     }
11688   else if (name == ansi_opname[(int) DELETE_EXPR]
11689            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11690     {
11691       if (methodp)
11692         revert_static_member_fn (&decl, NULL, NULL);
11693      
11694       if (argtypes == NULL_TREE)
11695         TREE_TYPE (decl)
11696           = build_function_type (void_type_node,
11697                                  hash_tree_chain (ptr_type_node,
11698                                                   void_list_node));
11699       else
11700         {
11701           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11702
11703           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11704               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11705                   != void_list_node))
11706             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11707         }
11708     }
11709   else
11710     {
11711       /* An operator function must either be a non-static member function
11712          or have at least one parameter of a class, a reference to a class,
11713          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11714       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11715         {
11716           if (IDENTIFIER_TYPENAME_P (name)
11717               || name == ansi_opname[(int) CALL_EXPR]
11718               || name == ansi_opname[(int) MODIFY_EXPR]
11719               || name == ansi_opname[(int) COMPONENT_REF]
11720               || name == ansi_opname[(int) ARRAY_REF])
11721             cp_error ("`%D' must be a nonstatic member function", decl);
11722           else
11723             {
11724               tree p = argtypes;
11725
11726               if (DECL_STATIC_FUNCTION_P (decl))
11727                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11728
11729               if (p)
11730                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11731                   {
11732                     tree arg = TREE_VALUE (p);
11733                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11734                       arg = TREE_TYPE (arg);
11735
11736                     /* This lets bad template code slip through.  */
11737                     if (IS_AGGR_TYPE (arg)
11738                         || TREE_CODE (arg) == ENUMERAL_TYPE
11739                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11740                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11741                       goto foundaggr;
11742                   }
11743               cp_error
11744                 ("`%D' must have an argument of class or enumerated type",
11745                  decl);
11746             foundaggr:
11747               ;
11748             }
11749         }
11750       
11751       if (name == ansi_opname[(int) CALL_EXPR])
11752         return;                 /* No restrictions on args. */
11753
11754       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11755         {
11756           tree t = TREE_TYPE (name);
11757           if (TREE_CODE (t) == VOID_TYPE)
11758             pedwarn ("void is not a valid type conversion operator");
11759           else if (! friendp)
11760             {
11761               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11762               const char *what = 0;
11763               if (ref)
11764                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11765
11766               if (t == current_class_type)
11767                 what = "the same type";
11768               /* Don't force t to be complete here.  */
11769               else if (IS_AGGR_TYPE (t)
11770                        && TYPE_SIZE (t)
11771                        && DERIVED_FROM_P (t, current_class_type))
11772                 what = "a base class";
11773
11774               if (what)
11775                 warning ("conversion to %s%s will never use a type conversion operator",
11776                          ref ? "a reference to " : "", what);
11777             }
11778         }
11779
11780       if (name == ansi_opname[(int) MODIFY_EXPR])
11781         {
11782           tree parmtype;
11783
11784           if (list_length (argtypes) != 3 && methodp)
11785             {
11786               cp_error ("`%D' must take exactly one argument", decl);
11787               return;
11788             }
11789           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11790
11791           if (copy_assignment_arg_p (parmtype, virtualp)
11792               && ! friendp)
11793             {
11794               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11795               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11796                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11797                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11798             }
11799         }
11800       else if (name == ansi_opname[(int) COND_EXPR])
11801         {
11802           /* 13.4.0.3 */
11803           cp_error ("ANSI C++ prohibits overloading operator ?:");
11804         }         
11805       else if (ambi_op_p (name))
11806         {
11807           if (list_length (argtypes) == 2)
11808             /* prefix */;
11809           else if (list_length (argtypes) == 3)
11810             {
11811               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11812                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11813                   && ! processing_template_decl
11814                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11815                 {
11816                   if (methodp)
11817                     cp_error ("postfix `%D' must take `int' as its argument",
11818                               decl);
11819                   else
11820                     cp_error
11821                       ("postfix `%D' must take `int' as its second argument",
11822                        decl);
11823                 }
11824             }
11825           else
11826             {
11827               if (methodp)
11828                 cp_error ("`%D' must take either zero or one argument", decl);
11829               else
11830                 cp_error ("`%D' must take either one or two arguments", decl);
11831             }
11832
11833           /* More Effective C++ rule 6.  */
11834           if (warn_ecpp
11835               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11836                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11837             {
11838               tree arg = TREE_VALUE (argtypes);
11839               tree ret = TREE_TYPE (TREE_TYPE (decl));
11840               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11841                 arg = TREE_TYPE (arg);
11842               arg = TYPE_MAIN_VARIANT (arg);
11843               if (list_length (argtypes) == 2)
11844                 {
11845                   if (TREE_CODE (ret) != REFERENCE_TYPE
11846                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11847                                        arg))
11848                     cp_warning ("prefix `%D' should return `%T'", decl,
11849                                 build_reference_type (arg));
11850                 }
11851               else
11852                 {
11853                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11854                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11855                 }
11856             }
11857         }
11858       else if (unary_op_p (name))
11859         {
11860           if (list_length (argtypes) != 2)
11861             {
11862               if (methodp)
11863                 cp_error ("`%D' must take `void'", decl);
11864               else
11865                 cp_error ("`%D' must take exactly one argument", decl);
11866             }
11867         }
11868       else /* if (binary_op_p (name)) */
11869         {
11870           if (list_length (argtypes) != 3)
11871             {
11872               if (methodp)
11873                 cp_error ("`%D' must take exactly one argument", decl);
11874               else
11875                 cp_error ("`%D' must take exactly two arguments", decl);
11876             }
11877
11878           /* More Effective C++ rule 7.  */
11879           if (warn_ecpp
11880               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11881                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11882                   || name == ansi_opname [COMPOUND_EXPR]))
11883             cp_warning ("user-defined `%D' always evaluates both arguments",
11884                         decl);
11885         }
11886
11887       /* Effective C++ rule 23.  */
11888       if (warn_ecpp
11889           && list_length (argtypes) == 3
11890           && (name == ansi_opname [PLUS_EXPR]
11891               || name == ansi_opname [MINUS_EXPR]
11892               || name == ansi_opname [TRUNC_DIV_EXPR]
11893               || name == ansi_opname [MULT_EXPR])
11894           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11895         cp_warning ("`%D' should return by value", decl);
11896
11897       /* 13.4.0.8 */
11898       if (argtypes)
11899         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11900           if (TREE_PURPOSE (argtypes))
11901             {
11902               TREE_PURPOSE (argtypes) = NULL_TREE;
11903               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11904                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11905                 {
11906                   if (pedantic)
11907                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11908                 }
11909               else
11910                 cp_error ("`%D' cannot have default arguments", decl);
11911             }
11912     }
11913 }
11914 \f
11915 static const char *
11916 tag_name (code)
11917      enum tag_types code;
11918 {
11919   switch (code)
11920     {
11921     case record_type:
11922       return "struct";
11923     case class_type:
11924       return "class";
11925     case union_type:
11926       return "union ";
11927     case enum_type:
11928       return "enum";
11929     default:
11930       my_friendly_abort (981122);
11931     }
11932 }
11933
11934 /* Get the struct, enum or union (CODE says which) with tag NAME.
11935    Define the tag as a forward-reference if it is not defined.
11936
11937    C++: If a class derivation is given, process it here, and report
11938    an error if multiple derivation declarations are not identical.
11939
11940    If this is a definition, come in through xref_tag and only look in
11941    the current frame for the name (since C++ allows new names in any
11942    scope.)  */
11943
11944 tree
11945 xref_tag (code_type_node, name, globalize)
11946      tree code_type_node;
11947      tree name;
11948      int globalize;
11949 {
11950   enum tag_types tag_code;
11951   enum tree_code code;
11952   int temp = 0;
11953   register tree ref, t;
11954   struct binding_level *b = current_binding_level;
11955   int got_type = 0;
11956   tree attributes = NULL_TREE;
11957   tree context = NULL_TREE;
11958
11959   /* If we are called from the parser, code_type_node will sometimes be a
11960      TREE_LIST.  This indicates that the user wrote
11961      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11962      use them later.  */
11963   if (TREE_CODE (code_type_node) == TREE_LIST)
11964     {
11965       attributes = TREE_PURPOSE (code_type_node);
11966       code_type_node = TREE_VALUE (code_type_node);
11967     }
11968
11969   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11970   switch (tag_code)
11971     {
11972     case record_type:
11973     case class_type:
11974       code = RECORD_TYPE;
11975       break;
11976     case union_type:
11977       code = UNION_TYPE;
11978       break;
11979     case enum_type:
11980       code = ENUMERAL_TYPE;
11981       break;
11982     default:
11983       my_friendly_abort (18);
11984     }
11985
11986   /* If a cross reference is requested, look up the type
11987      already defined for this tag and return it.  */
11988   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11989     {
11990       t = name;
11991       name = TYPE_IDENTIFIER (t);
11992       got_type = 1;
11993     }
11994   else
11995     t = IDENTIFIER_TYPE_VALUE (name);
11996
11997   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11998       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11999     t = NULL_TREE;
12000
12001   if (! globalize)
12002     {
12003       /* If we know we are defining this tag, only look it up in
12004          this scope and don't try to find it as a type.  */
12005       ref = lookup_tag (code, name, b, 1);
12006     }
12007   else
12008     {
12009       if (t)
12010         {
12011           /* [dcl.type.elab] If the identifier resolves to a
12012              typedef-name or a template type-parameter, the
12013              elaborated-type-specifier is ill-formed.  */
12014           if (t != TYPE_MAIN_VARIANT (t)
12015               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12016             cp_pedwarn ("using typedef-name `%D' after `%s'",
12017                         TYPE_NAME (t), tag_name (tag_code));
12018           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12019             cp_error ("using template type parameter `%T' after `%s'",
12020                       t, tag_name (tag_code));
12021
12022           ref = t;
12023         }
12024       else
12025         ref = lookup_tag (code, name, b, 0);
12026           
12027       if (! ref)
12028         {
12029           /* Try finding it as a type declaration.  If that wins,
12030              use it.  */ 
12031           ref = lookup_name (name, 1);
12032
12033           if (ref != NULL_TREE
12034               && processing_template_decl
12035               && DECL_CLASS_TEMPLATE_P (ref)
12036               && template_class_depth (current_class_type) == 0)
12037             /* Since GLOBALIZE is true, we're declaring a global
12038                template, so we want this type.  */
12039             ref = DECL_RESULT (ref);
12040
12041           if (ref && TREE_CODE (ref) == TYPE_DECL
12042               && TREE_CODE (TREE_TYPE (ref)) == code)
12043             ref = TREE_TYPE (ref);
12044           else
12045             ref = NULL_TREE;
12046         }
12047
12048       if (ref && current_class_type 
12049           && template_class_depth (current_class_type) 
12050           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12051         {
12052           /* Since GLOBALIZE is non-zero, we are not looking at a
12053              definition of this tag.  Since, in addition, we are currently
12054              processing a (member) template declaration of a template
12055              class, we must be very careful; consider:
12056
12057                template <class X>
12058                struct S1
12059
12060                template <class U>
12061                struct S2
12062                { template <class V>
12063                friend struct S1; };
12064
12065              Here, the S2::S1 declaration should not be confused with the
12066              outer declaration.  In particular, the inner version should
12067              have a template parameter of level 2, not level 1.  This
12068              would be particularly important if the member declaration
12069              were instead:
12070
12071                template <class V = U> friend struct S1;
12072
12073              say, when we should tsubst into `U' when instantiating
12074              S2.  On the other hand, when presented with:
12075
12076                  template <class T>
12077                  struct S1 {
12078                    template <class U>
12079                    struct S2 {};
12080                    template <class U>
12081                    friend struct S2;
12082                  };
12083
12084               we must find the inner binding eventually.  We
12085               accomplish this by making sure that the new type we
12086               create to represent this declaration has the right
12087               TYPE_CONTEXT.  */
12088           context = TYPE_CONTEXT (ref);
12089           ref = NULL_TREE;
12090         }
12091     }
12092
12093   push_obstacks_nochange ();
12094
12095   if (! ref)
12096     {
12097       /* If no such tag is yet defined, create a forward-reference node
12098          and record it as the "definition".
12099          When a real declaration of this type is found,
12100          the forward-reference will be altered into a real type.  */
12101
12102       /* In C++, since these migrate into the global scope, we must
12103          build them on the permanent obstack.  */
12104
12105       temp = allocation_temporary_p ();
12106       if (temp)
12107         end_temporary_allocation ();
12108
12109       if (code == ENUMERAL_TYPE)
12110         {
12111           cp_error ("use of enum `%#D' without previous declaration", name);
12112
12113           ref = make_node (ENUMERAL_TYPE);
12114
12115           /* Give the type a default layout like unsigned int
12116              to avoid crashing if it does not get defined.  */
12117           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12118           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12119           TREE_UNSIGNED (ref) = 1;
12120           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12121           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12122           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12123
12124           /* Enable us to recognize when a type is created in class context.
12125              To do nested classes correctly, this should probably be cleared
12126              out when we leave this classes scope.  Currently this in only
12127              done in `start_enum'.  */
12128
12129           pushtag (name, ref, globalize);
12130         }
12131       else
12132         {
12133           struct binding_level *old_b = class_binding_level;
12134
12135           ref = make_lang_type (code);
12136           TYPE_CONTEXT (ref) = context;
12137
12138 #ifdef NONNESTED_CLASSES
12139           /* Class types don't nest the way enums do.  */
12140           class_binding_level = (struct binding_level *)0;
12141 #endif
12142           pushtag (name, ref, globalize);
12143           class_binding_level = old_b;
12144         }
12145     }
12146   else
12147     {
12148       /* If it no longer looks like a nested type, make sure it's
12149          in global scope.  
12150          If it is not an IDENTIFIER, this is not a declaration */
12151       if (b->namespace_p && !class_binding_level
12152           && TREE_CODE (name) == IDENTIFIER_NODE
12153           && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12154         SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12155
12156       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12157         redeclare_class_template (ref, current_template_parms);
12158     }
12159
12160   /* Until the type is defined, tentatively accept whatever
12161      structure tag the user hands us.  */
12162   if (TYPE_SIZE (ref) == NULL_TREE
12163       && ref != current_class_type
12164       /* Have to check this, in case we have contradictory tag info.  */
12165       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12166     {
12167       if (tag_code == class_type)
12168         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12169       else if (tag_code == record_type)
12170         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12171     }
12172
12173   pop_obstacks ();
12174
12175   TREE_TYPE (ref) = attributes;
12176
12177   return ref;
12178 }
12179
12180 tree
12181 xref_tag_from_type (old, id, globalize)
12182      tree old, id;
12183      int globalize;
12184 {
12185   tree code_type_node;
12186
12187   if (TREE_CODE (old) == RECORD_TYPE)
12188     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12189                       ? class_type_node : record_type_node);
12190   else
12191     code_type_node = union_type_node;
12192
12193   if (id == NULL_TREE)
12194     id = TYPE_IDENTIFIER (old);
12195
12196   return xref_tag (code_type_node, id, globalize);
12197 }
12198
12199 /* REF is a type (named NAME), for which we have just seen some
12200    baseclasses.  BINFO is a list of those baseclasses; the
12201    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12202    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12203    struct, or union.  */
12204
12205 void
12206 xref_basetypes (code_type_node, name, ref, binfo)
12207      tree code_type_node;
12208      tree name, ref;
12209      tree binfo;
12210 {
12211   /* In the declaration `A : X, Y, ... Z' we mark all the types
12212      (A, X, Y, ..., Z) so we can check for duplicates.  */
12213   tree binfos;
12214   tree base;
12215
12216   int i, len;
12217   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12218
12219   if (tag_code == union_type)
12220     {
12221       cp_error ("derived union `%T' invalid", ref);
12222       return;
12223     }
12224
12225   len = list_length (binfo);
12226   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12227
12228   /* First, make sure that any templates in base-classes are
12229      instantiated.  This ensures that if we call ourselves recursively
12230      we do not get confused about which classes are marked and which
12231      are not.  */
12232   for (base = binfo; base; base = TREE_CHAIN (base))
12233     complete_type (TREE_VALUE (base));
12234
12235   SET_CLASSTYPE_MARKED (ref);
12236   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12237
12238   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12239     {
12240       /* The base of a derived struct is public by default.  */
12241       int via_public
12242         = (TREE_PURPOSE (binfo) == access_public_node
12243            || TREE_PURPOSE (binfo) == access_public_virtual_node
12244            || (tag_code != class_type
12245                && (TREE_PURPOSE (binfo) == access_default_node
12246                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12247       int via_protected
12248         = (TREE_PURPOSE (binfo) == access_protected_node
12249            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12250       int via_virtual
12251         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12252            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12253            || TREE_PURPOSE (binfo) == access_public_virtual_node
12254            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12255       tree basetype = TREE_VALUE (binfo);
12256       tree base_binfo;
12257
12258       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12259         basetype = TREE_TYPE (basetype);
12260       if (!basetype
12261           || (TREE_CODE (basetype) != RECORD_TYPE
12262               && TREE_CODE (basetype) != TYPENAME_TYPE
12263               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12264               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12265         {
12266           cp_error ("base type `%T' fails to be a struct or class type",
12267                     TREE_VALUE (binfo));
12268           continue;
12269         }
12270
12271       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12272
12273       /* This code replaces similar code in layout_basetypes.
12274          We put the complete_type first for implicit `typename'.  */
12275       if (TYPE_SIZE (basetype) == NULL_TREE
12276           && ! (current_template_parms && uses_template_parms (basetype)))
12277         {
12278           cp_error ("base class `%T' has incomplete type", basetype);
12279           continue;
12280         }
12281       else
12282         {
12283           if (CLASSTYPE_MARKED (basetype))
12284             {
12285               if (basetype == ref)
12286                 cp_error ("recursive type `%T' undefined", basetype);
12287               else
12288                 cp_error ("duplicate base type `%T' invalid", basetype);
12289               continue;
12290             }
12291
12292           if (TYPE_FOR_JAVA (basetype)
12293               && (current_lang_stack 
12294                   == &VARRAY_TREE (current_lang_base, 0)))
12295             TYPE_FOR_JAVA (ref) = 1;
12296
12297           /* Note that the BINFO records which describe individual
12298              inheritances are *not* shared in the lattice!  They
12299              cannot be shared because a given baseclass may be
12300              inherited with different `accessibility' by different
12301              derived classes.  (Each BINFO record describing an
12302              individual inheritance contains flags which say what
12303              the `accessibility' of that particular inheritance is.)  */
12304   
12305           base_binfo 
12306             = make_binfo (integer_zero_node, basetype,
12307                           CLASS_TYPE_P (basetype)
12308                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12309                           CLASS_TYPE_P (basetype)
12310                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12311  
12312           TREE_VEC_ELT (binfos, i) = base_binfo;
12313           TREE_VIA_PUBLIC (base_binfo) = via_public;
12314           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12315           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12316           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12317
12318           /* We need to unshare the binfos now so that lookups during class
12319              definition work.  */
12320           unshare_base_binfos (base_binfo);
12321
12322           SET_CLASSTYPE_MARKED (basetype);
12323
12324           /* We are free to modify these bits because they are meaningless
12325              at top level, and BASETYPE is a top-level type.  */
12326           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12327             {
12328               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12329               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12330             }
12331
12332           if (CLASS_TYPE_P (basetype))
12333             {
12334               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12335               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12336             }
12337
12338           i += 1;
12339         }
12340     }
12341   if (i)
12342     TREE_VEC_LENGTH (binfos) = i;
12343   else
12344     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12345
12346   if (i > 1)
12347     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12348   else if (i == 1)
12349     {
12350       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12351       
12352       if (CLASS_TYPE_P (basetype))
12353         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12354           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12355     }
12356
12357   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12358     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12359
12360   /* Unmark all the types.  */
12361   while (--i >= 0)
12362     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12363   CLEAR_CLASSTYPE_MARKED (ref);
12364
12365   /* Now that we know all the base-classes, set up the list of virtual
12366      bases.  */
12367   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12368
12369   pop_obstacks ();
12370 }
12371   
12372 \f
12373 /* Begin compiling the definition of an enumeration type.
12374    NAME is its name (or null if anonymous).
12375    Returns the type object, as yet incomplete.
12376    Also records info about it so that build_enumerator
12377    may be used to declare the individual values as they are read.  */
12378
12379 tree
12380 start_enum (name)
12381      tree name;
12382 {
12383   register tree enumtype = NULL_TREE;
12384   struct binding_level *b = current_binding_level;
12385
12386   /* We are wasting space here and putting these on the permanent_obstack so
12387      that typeid(local enum) will work correctly. */
12388   push_obstacks (&permanent_obstack, &permanent_obstack);
12389
12390   /* If this is the real definition for a previous forward reference,
12391      fill in the contents in the same object that used to be the
12392      forward reference.  */
12393
12394   if (name != NULL_TREE)
12395     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12396
12397   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12398     {
12399       cp_error ("multiple definition of `%#T'", enumtype);
12400       cp_error_at ("previous definition here", enumtype);
12401     }
12402   else
12403     {
12404       enumtype = make_node (ENUMERAL_TYPE);
12405       pushtag (name, enumtype, 0);
12406     }
12407
12408   if (current_class_type)
12409     TREE_ADDRESSABLE (b->tags) = 1;
12410
12411   /* We don't copy this value because build_enumerator needs to do it.  */
12412   enum_next_value = integer_zero_node;
12413   enum_overflow = 0;
12414
12415   GNU_xref_decl (current_function_decl, enumtype);
12416   return enumtype;
12417 }
12418
12419 /* After processing and defining all the values of an enumeration type,
12420    install their decls in the enumeration type and finish it off.
12421    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12422    Returns ENUMTYPE.  */
12423
12424 tree
12425 finish_enum (enumtype)
12426      tree enumtype;
12427 {
12428   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12429   /* Calculate the maximum value of any enumerator in this type.  */
12430
12431   tree values = TYPE_VALUES (enumtype);
12432   if (values)
12433     {
12434       tree pair;
12435
12436       for (pair = values; pair; pair = TREE_CHAIN (pair))
12437         {
12438           tree decl;
12439           tree value;
12440
12441           /* The TREE_VALUE is a CONST_DECL for this enumeration
12442              constant.  */
12443           decl = TREE_VALUE (pair);
12444
12445           /* The DECL_INITIAL will be NULL if we are processing a
12446              template declaration and this enumeration constant had no
12447              explicit initializer.  */
12448           value = DECL_INITIAL (decl);
12449           if (value && !processing_template_decl)
12450             {
12451               /* Set the TREE_TYPE for the VALUE as well.  That's so
12452                  that when we call decl_constant_value we get an
12453                  entity of the right type (but with the constant
12454                  value).  Since we shouldn't ever call
12455                  decl_constant_value on a template type, there's no
12456                  reason to do that when processing_template_decl.
12457                  And, if the expression is something like a
12458                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12459                  wreak havoc on the intended type of the expression.  
12460
12461                  Of course, there's also no point in trying to compute
12462                  minimum or maximum values if we're in a template.  */
12463               TREE_TYPE (value) = enumtype;
12464
12465               if (!minnode)
12466                 minnode = maxnode = value;
12467               else if (tree_int_cst_lt (maxnode, value))
12468                 maxnode = value;
12469               else if (tree_int_cst_lt (value, minnode))
12470                 minnode = value;
12471             }
12472
12473           if (processing_template_decl) 
12474             /* If this is just a template, leave the CONST_DECL
12475                alone.  That way tsubst_copy will find CONST_DECLs for
12476                CONST_DECLs, and not INTEGER_CSTs.  */
12477             ;
12478           else
12479             /* In the list we're building up, we want the enumeration
12480                values, not the CONST_DECLs.  */
12481             TREE_VALUE (pair) = value;
12482         }
12483     }
12484   else
12485     maxnode = minnode = integer_zero_node;
12486
12487   TYPE_VALUES (enumtype) = nreverse (values);
12488
12489   if (processing_template_decl)
12490     {
12491       tree scope = current_scope ();
12492       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12493         add_tree (build_min (TAG_DEFN, enumtype));
12494     }
12495   else
12496     {
12497       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12498       int lowprec = min_precision (minnode, unsignedp);
12499       int highprec = min_precision (maxnode, unsignedp);
12500       int precision = MAX (lowprec, highprec);
12501       tree tem;
12502
12503       TYPE_SIZE (enumtype) = NULL_TREE;
12504
12505       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12506
12507       TYPE_PRECISION (enumtype) = precision;
12508       if (unsignedp)
12509         fixup_unsigned_type (enumtype);
12510       else
12511         fixup_signed_type (enumtype);
12512
12513       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12514         /* Use the width of the narrowest normal C type which is wide
12515            enough.  */ 
12516         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12517                                                     (precision, 1));
12518       else
12519         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12520
12521       TYPE_SIZE (enumtype) = 0;
12522       layout_type (enumtype);
12523     
12524       /* Fix up all variant types of this enum type.  */
12525       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12526            tem = TYPE_NEXT_VARIANT (tem))
12527         {
12528           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12529           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12530           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12531           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12532           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12533           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12534           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12535           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12536           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12537         }
12538
12539       /* Finish debugging output for this type.  */
12540       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12541     }
12542
12543   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12544   pop_obstacks ();
12545
12546   return enumtype;
12547 }
12548
12549 /* Build and install a CONST_DECL for an enumeration constant of the
12550    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12551    Assignment of sequential values by default is handled here.  */
12552
12553 tree
12554 build_enumerator (name, value, type)
12555      tree name;
12556      tree value;
12557      tree type;
12558 {
12559   tree decl, result;
12560   tree context;
12561
12562   /* Remove no-op casts from the value.  */
12563   if (value)
12564     STRIP_TYPE_NOPS (value);
12565
12566  if (! processing_template_decl)
12567    {
12568      /* Validate and default VALUE.  */
12569      if (value != NULL_TREE)
12570        {
12571          if (TREE_READONLY_DECL_P (value))
12572            value = decl_constant_value (value);
12573
12574          if (TREE_CODE (value) == INTEGER_CST)
12575            {
12576              value = default_conversion (value);
12577              constant_expression_warning (value);
12578            }
12579          else
12580            {
12581              cp_error ("enumerator value for `%D' not integer constant", name);
12582              value = NULL_TREE;
12583            }
12584        }
12585
12586      /* Default based on previous value.  */
12587      if (value == NULL_TREE && ! processing_template_decl)
12588        {
12589          value = enum_next_value;
12590          if (enum_overflow)
12591            cp_error ("overflow in enumeration values at `%D'", name);
12592        }
12593
12594      /* Remove no-op casts from the value.  */
12595      if (value)
12596        STRIP_TYPE_NOPS (value);
12597 #if 0
12598      /* To fix MAX_VAL enum consts. (bkoz)  */
12599      TREE_TYPE (value) = integer_type_node;
12600 #endif
12601    }
12602
12603  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12604     Even in other cases, we will later (in finish_enum) be setting the
12605     type of VALUE.  */
12606  if (value != NULL_TREE)
12607    value = copy_node (value);
12608
12609   /* C++ associates enums with global, function, or class declarations.  */
12610  
12611  context = current_scope ();
12612  if (context && context == current_class_type)
12613    /* This enum declaration is local to the class.  */
12614    decl = build_lang_decl (CONST_DECL, name, type);
12615  else
12616    /* It's a global enum, or it's local to a function.  (Note local to
12617       a function could mean local to a class method.  */
12618    decl = build_decl (CONST_DECL, name, type);
12619
12620  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12621  DECL_INITIAL (decl) = value;
12622  TREE_READONLY (decl) = 1;
12623
12624  if (context && context == current_class_type)
12625    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12626       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12627       things like `S::i' later.)  */
12628    finish_member_declaration (decl);
12629  else
12630    {
12631      pushdecl (decl);
12632      GNU_xref_decl (current_function_decl, decl);
12633    }
12634
12635  if (! processing_template_decl)
12636    {
12637      /* Set basis for default for next value.  */
12638      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12639                                                   integer_one_node, PLUS_EXPR);
12640      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12641    }
12642
12643   result = tree_cons (name, decl, NULL_TREE);
12644   return result;
12645 }
12646
12647 \f
12648 static int function_depth;
12649
12650 /* We're defining DECL.  Make sure that it's type is OK.  */
12651
12652 static void
12653 check_function_type (decl)
12654      tree decl;
12655 {
12656   tree fntype = TREE_TYPE (decl);
12657
12658   /* In a function definition, arg types must be complete.  */
12659   require_complete_types_for_parms (current_function_parms);
12660
12661   if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12662     {
12663       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12664
12665       /* Make it return void instead, but don't change the
12666          type of the DECL_RESULT, in case we have a named return value.  */
12667       if (TREE_CODE (fntype) == METHOD_TYPE)
12668         {
12669           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12670           TREE_TYPE (decl)
12671             = build_cplus_method_type (ctype,
12672                                        void_type_node,
12673                                        FUNCTION_ARG_CHAIN (decl));
12674         }
12675       else
12676         TREE_TYPE (decl)
12677           = build_function_type (void_type_node,
12678                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
12679       TREE_TYPE (decl) 
12680         = build_exception_variant (fntype,
12681                                    TYPE_RAISES_EXCEPTIONS (fntype));
12682     }
12683   else
12684     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12685 }
12686
12687 /* Create the FUNCTION_DECL for a function definition.
12688    DECLSPECS and DECLARATOR are the parts of the declaration;
12689    they describe the function's name and the type it returns,
12690    but twisted together in a fashion that parallels the syntax of C.
12691
12692    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12693    DECLARATOR is really the DECL for the function we are about to
12694    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12695    indicating that the function is an inline defined in-class, and
12696    SF_EXPAND indicating that we should generate RTL for this
12697    function.  
12698    
12699    This function creates a binding context for the function body
12700    as well as setting up the FUNCTION_DECL in current_function_decl.
12701
12702    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12703    (it defines a datum instead), we return 0, which tells
12704    yyparse to report a parse error.
12705
12706    For C++, we must first check whether that datum makes any sense.
12707    For example, "class A local_a(1,2);" means that variable local_a
12708    is an aggregate of type A, which should have a constructor
12709    applied to it with the argument list [1, 2].  */
12710
12711 int
12712 start_function (declspecs, declarator, attrs, flags)
12713      tree declspecs, declarator, attrs;
12714      int flags;
12715 {
12716   tree decl1;
12717   tree ctype = NULL_TREE;
12718   tree fntype;
12719   tree restype;
12720   extern int have_extern_spec;
12721   extern int used_extern_spec;
12722   int doing_friend = 0;
12723   struct binding_level *bl;
12724
12725   /* Sanity check.  */
12726   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12727   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12728
12729   /* This should only be done once on the top most decl.  */
12730   if (have_extern_spec && !used_extern_spec)
12731     {
12732       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12733       used_extern_spec = 1;
12734     }
12735
12736   if (flags & SF_PRE_PARSED)
12737     {
12738       decl1 = declarator;
12739
12740       fntype = TREE_TYPE (decl1);
12741       if (TREE_CODE (fntype) == METHOD_TYPE)
12742         ctype = TYPE_METHOD_BASETYPE (fntype);
12743
12744       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12745          class is in the (lexical) scope of the class in which it is
12746          defined.  */
12747       if (!ctype && DECL_FRIEND_P (decl1))
12748         {
12749           ctype = DECL_CLASS_CONTEXT (decl1);
12750
12751           /* CTYPE could be null here if we're dealing with a template;
12752              for example, `inline friend float foo()' inside a template
12753              will have no CTYPE set.  */
12754           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12755             ctype = NULL_TREE;
12756           else
12757             doing_friend = 1;
12758         }
12759
12760       last_function_parms = DECL_ARGUMENTS (decl1);
12761       last_function_parm_tags = NULL_TREE;
12762     }
12763   else
12764     {
12765       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12766       /* If the declarator is not suitable for a function definition,
12767          cause a syntax error.  */
12768       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12769
12770       fntype = TREE_TYPE (decl1);
12771
12772       restype = TREE_TYPE (fntype);
12773       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12774         {
12775           cp_error ("semicolon missing after declaration of `%#T'", restype);
12776           shadow_tag (build_expr_list (NULL_TREE, restype));
12777           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12778           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12779             fntype = build_function_type (integer_type_node,
12780                                           TYPE_ARG_TYPES (fntype));
12781           else
12782             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12783                                               integer_type_node,
12784                                               TYPE_ARG_TYPES (fntype));
12785           TREE_TYPE (decl1) = fntype;
12786         }
12787
12788       if (TREE_CODE (fntype) == METHOD_TYPE)
12789         ctype = TYPE_METHOD_BASETYPE (fntype);
12790       else if (DECL_MAIN_P (decl1))
12791         {
12792           /* If this doesn't return integer_type, complain.  */
12793           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12794             {
12795               if (pedantic || warn_return_type)
12796                 pedwarn ("return type for `main' changed to `int'");
12797               TREE_TYPE (decl1) = fntype = default_function_type;
12798             }
12799         }
12800     }
12801   
12802   /* Sometimes we don't notice that a function is a static member, and
12803      build a METHOD_TYPE for it.  Fix that up now.  */
12804   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12805       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12806     {
12807       revert_static_member_fn (&decl1, NULL, NULL);
12808       last_function_parms = TREE_CHAIN (last_function_parms);
12809       ctype = NULL_TREE;
12810     }
12811
12812   /* Warn if function was previously implicitly declared
12813      (but not if we warned then).  */
12814   if (! warn_implicit
12815       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12816     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12817
12818   /* Set up current_class_type, and enter the scope of the class, if
12819      appropriate.  */
12820   if (ctype)
12821     push_nested_class (ctype, 1);
12822   else if (DECL_STATIC_FUNCTION_P (decl1))
12823     push_nested_class (DECL_CONTEXT (decl1), 2);
12824
12825   /* Now that we have entered the scope of the class, we must restore
12826      the bindings for any template parameters surrounding DECL1, if it
12827      is an inline member template.  (Order is important; consider the
12828      case where a template parameter has the same name as a field of
12829      the class.)  It is not until after this point that
12830      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12831   if (flags & SF_INCLASS_INLINE)
12832     maybe_begin_member_template_processing (decl1);
12833
12834   /* Effective C++ rule 15.  See also c_expand_return.  */
12835   if (warn_ecpp
12836       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12837       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12838     cp_warning ("`operator=' should return a reference to `*this'");
12839
12840   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12841      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12842   if (!DECL_INITIAL (decl1))
12843     DECL_INITIAL (decl1) = error_mark_node;
12844
12845 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12846   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12847 #endif
12848   
12849   /* This function exists in static storage.
12850      (This does not mean `static' in the C sense!)  */
12851   TREE_STATIC (decl1) = 1;
12852
12853   /* We must call push_template_decl after current_class_type is set
12854      up.  (If we are processing inline definitions after exiting a
12855      class scope, current_class_type will be NULL_TREE until set above
12856      by push_nested_class.)  */
12857   if (processing_template_decl)
12858     decl1 = push_template_decl (decl1);
12859
12860   /* We are now in the scope of the function being defined.  */
12861   current_function_decl = decl1;
12862
12863   /* Save the parm names or decls from this function's declarator
12864      where store_parm_decls will find them.  */
12865   current_function_parms = last_function_parms;
12866   current_function_parm_tags = last_function_parm_tags;
12867
12868   /* Make sure the parameter and return types are reasonable.  When
12869      you declare a function, these types can be incomplete, but they
12870      must be complete when you define the function.  */
12871   if (! processing_template_decl)
12872     check_function_type (decl1);
12873
12874   /* Build the return declaration for the function.  */
12875   restype = TREE_TYPE (fntype);
12876   if (!processing_template_decl)
12877     {
12878       if (!DECL_RESULT (decl1))
12879         {
12880           DECL_RESULT (decl1)
12881             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12882           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype), 
12883                                       DECL_RESULT (decl1)); 
12884         }
12885     }
12886   else
12887     /* Just use `void'.  Nobody will ever look at this anyhow.  */
12888     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12889
12890   /* Initialize RTL machinery.  We cannot do this until
12891      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12892      even when processing a template; this is how we get
12893      CURRENT_FUNCTION set up, and our per-function variables
12894      initialized.  */
12895   bl = current_binding_level;
12896   init_function_start (decl1, input_filename, lineno);
12897   current_binding_level = bl;
12898   expanding_p = (flags & SF_EXPAND) != 0;
12899
12900   /* Even though we're inside a function body, we still don't want to
12901      call expand_expr to calculate the size of a variable-sized array.
12902      We haven't necessarily assigned RTL to all variables yet, so it's
12903      not safe to try to expand expressions involving them.  */
12904   immediate_size_expand = 0;
12905   current_function->x_dont_save_pending_sizes_p = 1;
12906
12907   /* If we're building a statement-tree, start the tree now.  */
12908   if (processing_template_decl || !expanding_p)
12909     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
12910
12911   /* Let the user know we're compiling this function.  */
12912   if (processing_template_decl || !building_stmt_tree ())
12913     announce_function (decl1);
12914
12915   /* Record the decl so that the function name is defined.
12916      If we already have a decl for this name, and it is a FUNCTION_DECL,
12917      use the old decl.  */
12918   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12919     {
12920       /* A specialization is not used to guide overload resolution.  */
12921       if ((flag_guiding_decls 
12922            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12923           && ! DECL_FUNCTION_MEMBER_P (decl1))
12924         decl1 = pushdecl (decl1);
12925       else
12926         {
12927           /* We need to set the DECL_CONTEXT. */
12928           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12929             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12930           /* And make sure we have enough default args.  */
12931           check_default_args (decl1);
12932         }
12933       DECL_MAIN_VARIANT (decl1) = decl1;
12934       fntype = TREE_TYPE (decl1);
12935     }
12936
12937   /* Reset these in case the call to pushdecl changed them.  */
12938   current_function_decl = decl1;
12939   current_function->decl = decl1;
12940
12941   /* Initialize the per-function data.  */
12942   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12943     {
12944       /* If we already parsed this function, and we're just expanding it
12945          now, restore saved state.  */
12946       struct binding_level *bl = current_binding_level;
12947       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12948       current_binding_level = bl;
12949
12950       /* This function is being processed in whole-function mode; we
12951          already did semantic analysis.  */
12952       current_function->x_whole_function_mode_p = 1;
12953
12954       /* If we decided that we didn't want to inline this function,
12955          make sure the back-end knows that.  */
12956       if (!current_function_cannot_inline)
12957         current_function_cannot_inline = cp_function_chain->cannot_inline;
12958
12959       /* We don't need the saved data anymore.  */
12960       free (DECL_SAVED_FUNCTION_DATA (decl1));
12961       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12962     }
12963   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12964     {
12965       /* We know that this was set up by `grokclassfn'.  We do not
12966          wait until `store_parm_decls', since evil parse errors may
12967          never get us to that point.  Here we keep the consistency
12968          between `current_class_type' and `current_class_ptr'.  */
12969       tree t = DECL_ARGUMENTS (decl1);
12970               
12971       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL, 
12972                           162);
12973       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12974                           19990811);
12975           
12976       cp_function_chain->x_current_class_ref 
12977         = build_indirect_ref (t, NULL_PTR);
12978       cp_function_chain->x_current_class_ptr = t;
12979
12980       if (DECL_DESTRUCTOR_P (decl1))
12981         current_in_charge_parm = TREE_CHAIN (t);
12982     }
12983
12984   if (DECL_INTERFACE_KNOWN (decl1))
12985     {
12986       tree ctx = hack_decl_function_context (decl1);
12987
12988       if (DECL_NOT_REALLY_EXTERN (decl1))
12989         DECL_EXTERNAL (decl1) = 0;
12990
12991       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12992           && TREE_PUBLIC (ctx))
12993         /* This is a function in a local class in an extern inline
12994            function.  */
12995         comdat_linkage (decl1);
12996     }
12997   /* If this function belongs to an interface, it is public.
12998      If it belongs to someone else's interface, it is also external.
12999      This only affects inlines and template instantiations.  */
13000   else if (interface_unknown == 0
13001            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13002                || flag_alt_external_templates))
13003     {
13004       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13005           || processing_template_decl)
13006         {
13007           DECL_EXTERNAL (decl1)
13008             = (interface_only
13009                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13010                    && !DECL_VINDEX (decl1)));
13011
13012           /* For WIN32 we also want to put these in linkonce sections.  */
13013           maybe_make_one_only (decl1);
13014         }
13015       else
13016         DECL_EXTERNAL (decl1) = 0;
13017       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13018       DECL_INTERFACE_KNOWN (decl1) = 1;
13019     }
13020   else if (interface_unknown && interface_only
13021            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13022                || flag_alt_external_templates))
13023     {
13024       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13025          interface, we will have interface_only set but not
13026          interface_known.  In that case, we don't want to use the normal
13027          heuristics because someone will supply a #pragma implementation
13028          elsewhere, and deducing it here would produce a conflict.  */
13029       comdat_linkage (decl1);
13030       DECL_EXTERNAL (decl1) = 0;
13031       DECL_INTERFACE_KNOWN (decl1) = 1;
13032       DECL_DEFER_OUTPUT (decl1) = 1;
13033     }
13034   else
13035     {
13036       /* This is a definition, not a reference.
13037          So clear DECL_EXTERNAL.  */
13038       DECL_EXTERNAL (decl1) = 0;
13039
13040       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13041           && ! DECL_INTERFACE_KNOWN (decl1)
13042           /* Don't try to defer nested functions for now.  */
13043           && ! hack_decl_function_context (decl1))
13044         DECL_DEFER_OUTPUT (decl1) = 1;
13045       else
13046         DECL_INTERFACE_KNOWN (decl1) = 1;
13047     }
13048
13049   if (doing_semantic_analysis_p ())
13050     {
13051       pushlevel (0);
13052       current_binding_level->parm_flag = 1;
13053     }
13054
13055   if (attrs)
13056     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13057   
13058   if (!building_stmt_tree ())
13059     {
13060       GNU_xref_function (decl1, current_function_parms);
13061       make_function_rtl (decl1);
13062     }
13063
13064   /* Promote the value to int before returning it.  */
13065   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13066     restype = type_promotes_to (restype);
13067
13068   /* If this fcn was already referenced via a block-scope `extern' decl
13069      (or an implicit decl), propagate certain information about the usage.  */
13070   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13071     TREE_ADDRESSABLE (decl1) = 1;
13072
13073   if (DECL_RESULT (decl1) == NULL_TREE)
13074     {
13075       DECL_RESULT (decl1)
13076         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13077       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13078       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13079     }
13080
13081   /* Allocate further tree nodes temporarily during compilation
13082      of this function only.  Tiemann moved up here from bottom of fn.  */
13083   /* If this is a nested function, then we must continue to allocate RTL
13084      on the permanent obstack in case we need to inline it later.  */
13085   if (! hack_decl_function_context (decl1))
13086     temporary_allocation ();
13087   
13088   /* Make sure that we always have a momntary obstack while we're in a
13089      function body.  */
13090   push_momentary ();
13091
13092   ++function_depth;
13093
13094   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13095       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13096     dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13097   else if (DECL_CONSTRUCTOR_P (decl1))
13098     ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13099
13100   return 1;
13101 }
13102 \f
13103 /* Called after store_parm_decls for a function-try-block.  We need to update
13104    last_parm_cleanup_insn so that the base initializers for a constructor
13105    are run within this block, not before it.  */
13106
13107 void
13108 expand_start_early_try_stmts ()
13109 {
13110   expand_start_try_stmts ();
13111   last_parm_cleanup_insn = get_last_insn ();
13112 }
13113
13114 /* Store the parameter declarations into the current function declaration.
13115    This is called after parsing the parameter declarations, before
13116    digesting the body of the function.
13117
13118    Also install to binding contour return value identifier, if any.  */
13119
13120 void
13121 store_parm_decls ()
13122 {
13123   register tree fndecl = current_function_decl;
13124   register tree parm;
13125   int parms_have_cleanups = 0;
13126   tree cleanups = NULL_TREE;
13127
13128   /* This is a list of types declared among parms in a prototype.  */
13129   tree parmtags = current_function_parm_tags;
13130
13131   /* This is a chain of any other decls that came in among the parm
13132      declarations.  If a parm is declared with  enum {foo, bar} x;
13133      then CONST_DECLs for foo and bar are put here.  */
13134   tree nonparms = NULL_TREE;
13135
13136   /* Create a binding level for the parms.  */
13137   if (!building_stmt_tree ())
13138     expand_start_bindings (2);
13139
13140   if (current_function_parms)
13141     {
13142       /* This case is when the function was defined with an ANSI prototype.
13143          The parms already have decls, so we need not do anything here
13144          except record them as in effect
13145          and complain if any redundant old-style parm decls were written.  */
13146
13147       tree specparms = current_function_parms;
13148       tree next;
13149
13150       if (doing_semantic_analysis_p ())
13151         {
13152           /* Must clear this because it might contain TYPE_DECLs declared
13153              at class level.  */
13154           storedecls (NULL_TREE);
13155
13156           /* If we're doing semantic analysis, then we'll call pushdecl
13157              for each of these.  We must do them in reverse order so that
13158              they end in the correct forward order.  */
13159           specparms = nreverse (specparms);
13160         }
13161
13162       for (parm = specparms; parm; parm = next)
13163         {
13164           next = TREE_CHAIN (parm);
13165           if (TREE_CODE (parm) == PARM_DECL)
13166             {
13167               tree cleanup;
13168               
13169               if (doing_semantic_analysis_p ())
13170                 {
13171                   if (DECL_NAME (parm) == NULL_TREE
13172                       || TREE_CODE (TREE_TYPE (parm)) != VOID_TYPE)
13173                     pushdecl (parm);
13174                   else
13175                     cp_error ("parameter `%D' declared void", parm);
13176                 }
13177
13178               if (! building_stmt_tree ()
13179                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13180                 {
13181                   expand_decl (parm);
13182                   parms_have_cleanups = 1;
13183
13184                   /* Keep track of the cleanups.  */
13185                   cleanups = tree_cons (parm, cleanup, cleanups);
13186                 }
13187             }
13188           else
13189             {
13190               /* If we find an enum constant or a type tag,
13191                  put it aside for the moment.  */
13192               TREE_CHAIN (parm) = NULL_TREE;
13193               nonparms = chainon (nonparms, parm);
13194             }
13195         }
13196
13197       if (doing_semantic_analysis_p ())
13198         {
13199           /* Get the decls in their original chain order
13200              and record in the function.  This is all and only the
13201              PARM_DECLs that were pushed into scope by the loop above.  */
13202           DECL_ARGUMENTS (fndecl) = getdecls ();
13203           storetags (chainon (parmtags, gettags ()));
13204
13205           /* We built up the cleanups in reversed order.  */
13206           cleanups = nreverse (cleanups);
13207         }
13208     }
13209   else
13210     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13211
13212   /* Now store the final chain of decls for the arguments
13213      as the decl-chain of the current lexical scope.
13214      Put the enumerators in as well, at the front so that
13215      DECL_ARGUMENTS is not modified.  */
13216   if (doing_semantic_analysis_p ())
13217     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13218
13219   /* Initialize the RTL code for the function.  */
13220   DECL_SAVED_INSNS (fndecl) = 0;
13221   if (! building_stmt_tree ())
13222     expand_function_start (fndecl, parms_have_cleanups);
13223
13224   current_function_parms_stored = 1;
13225
13226   /* If this function is `main', emit a call to `__main'
13227      to run global initializers, etc.  */
13228   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13229     expand_main_function ();
13230
13231   /* Now that we have initialized the parms, we can start their
13232      cleanups.  We cannot do this before, since expand_decl_cleanup
13233      should not be called before the parm can be used.  */
13234   if (cleanups && !building_stmt_tree ())
13235     while (cleanups)
13236       {
13237         if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), 
13238                                    TREE_VALUE (cleanups)))
13239           cp_error ("parser lost in parsing declaration of `%D'",
13240                     TREE_PURPOSE (cleanups));
13241         
13242         cleanups = TREE_CHAIN (cleanups);
13243       }
13244
13245   /* Create a binding contour which can be used to catch
13246      cleanup-generated temporaries.  Also, if the return value needs or
13247      has initialization, deal with that now.  */
13248   if (parms_have_cleanups)
13249     {
13250       pushlevel (0);
13251       if (!building_stmt_tree ())
13252         expand_start_bindings (2);
13253     }
13254
13255   /* Do the starting of the exception specifications, if we have any.  */
13256   if (flag_exceptions && !processing_template_decl 
13257       && building_stmt_tree () 
13258       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13259     current_eh_spec_try_block = expand_start_eh_spec ();
13260
13261   last_parm_cleanup_insn = get_last_insn ();
13262   last_dtor_insn = get_last_insn ();
13263 }
13264
13265 /* Bind a name and initialization to the return value of
13266    the current function.  */
13267
13268 void
13269 store_return_init (decl)
13270      tree decl;
13271 {
13272   /* If this named return value comes in a register, put it in a
13273      pseudo-register.  */
13274   if (DECL_REGISTER (decl))
13275     {
13276       original_result_rtx = DECL_RTL (decl);
13277       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13278     }
13279 }
13280
13281 \f
13282 /* We have finished doing semantic analysis on DECL, but have not yet
13283    generated RTL for its body.  Save away our current state, so that
13284    when we want to generate RTL later we know what to do.  */
13285
13286 static void
13287 save_function_data (decl)
13288      tree decl;
13289 {
13290   struct language_function *f;
13291
13292   /* Save the language-specific per-function data so that we can
13293      get it back when we really expand this function.  */
13294   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13295                       19990908);
13296       
13297   /* Make a copy.  */
13298   f = ((struct language_function *) 
13299        xmalloc (sizeof (struct language_function)));
13300   bcopy ((char *) cp_function_chain, (char *) f,
13301          sizeof (struct language_function));
13302   DECL_SAVED_FUNCTION_DATA (decl) = f;
13303
13304   /* Clear out the bits we don't need.  */
13305   f->x_base_init_list = NULL_TREE;
13306   f->x_member_init_list = NULL_TREE;
13307   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13308   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13309   f->x_last_dtor_insn = NULL_RTX;
13310   f->x_last_parm_cleanup_insn = NULL_RTX;
13311   f->x_result_rtx = NULL_RTX;
13312   f->x_named_label_uses = NULL;
13313   f->bindings = NULL;
13314
13315   /* When we get back here again, we will be expanding.  */
13316   f->x_expanding_p = 1;
13317
13318   /* If we've already decided that we cannot inline this function, we
13319      must remember that fact when we actually go to expand the
13320      function.  */
13321   f->cannot_inline = current_function_cannot_inline;
13322 }
13323
13324 /* At the end of every constructor we generate to code to return
13325    `this'.  Do that now.  */
13326
13327 static void
13328 finish_constructor_body ()
13329 {
13330   /* Any return from a constructor will end up here.  */
13331   add_tree (build_min_nt (LABEL_STMT, ctor_label));
13332
13333   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13334      generate the return, rather than a goto to CTOR_LABEL.  */
13335   ctor_label = NULL_TREE;
13336   /* In check_return_expr we translate an empty return from a
13337      constructor to a return of `this'.  */
13338   finish_return_stmt (NULL_TREE);
13339 }
13340
13341 /* At the end of every destructor we generate code to restore virtual
13342    function tables to the values desired by base classes and to call
13343    to base class destructors.  Do that now.  */
13344
13345 static void
13346 finish_destructor_body ()
13347 {
13348   tree compound_stmt;
13349   tree in_charge;
13350   tree virtual_size;
13351   tree exprstmt;
13352
13353   /* Create a block to contain all the extra code.  */
13354   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13355
13356   /* Any return from a destructor will end up here.  */
13357   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13358
13359   /* Generate the code to call destructor on base class.  If this
13360      destructor belongs to a class with virtual functions, then set
13361      the virtual function table pointer to represent the type of our
13362      base class.  */
13363
13364   /* This side-effect makes call to `build_delete' generate the code
13365      we have to have at the end of this destructor.  `build_delete'
13366      will set the flag again.  */
13367   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13368
13369   /* These are two cases where we cannot delegate deletion.  */
13370   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13371       || TYPE_GETS_REG_DELETE (current_class_type))
13372     in_charge = integer_zero_node;
13373   else
13374     in_charge = current_in_charge_parm;
13375
13376   exprstmt = build_delete (current_class_type,
13377                            current_class_ref, 
13378                            in_charge,
13379                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 
13380                            0);
13381
13382   if (exprstmt != error_mark_node
13383       && (TREE_CODE (exprstmt) != NOP_EXPR
13384           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13385           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13386     {
13387       if (exprstmt != void_zero_node)
13388         /* Don't call `expand_expr_stmt' if we're not going to do
13389            anything, since -Wall will give a diagnostic.  */
13390         finish_expr_stmt (exprstmt);
13391
13392       /* Run destructors for all virtual baseclasses.  */
13393       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13394         {
13395           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13396           tree if_stmt = begin_if_stmt ();
13397           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13398                                       current_in_charge_parm, 
13399                                       integer_two_node),
13400                                if_stmt);
13401
13402           while (vbases)
13403             {
13404               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13405                 {
13406                   tree vb = get_vbase
13407                     (BINFO_TYPE (vbases),
13408                      TYPE_BINFO (current_class_type));
13409                   finish_expr_stmt
13410                     (build_scoped_method_call
13411                      (current_class_ref, vb, dtor_identifier,
13412                       build_expr_list (NULL_TREE, integer_zero_node)));
13413                 }
13414               vbases = TREE_CHAIN (vbases);
13415             }
13416
13417           finish_then_clause (if_stmt);
13418           finish_if_stmt ();
13419         }
13420     }
13421   
13422   virtual_size = c_sizeof (current_class_type);
13423
13424   /* At the end, call delete if that's what's requested.  */
13425   
13426   /* FDIS sez: At the point of definition of a virtual destructor
13427      (including an implicit definition), non-placement operator delete
13428      shall be looked up in the scope of the destructor's class and if
13429      found shall be accessible and unambiguous.
13430      
13431      This is somewhat unclear, but I take it to mean that if the class
13432      only defines placement deletes we don't do anything here.  So we
13433      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13434      they ever try to delete one of these.  */
13435   if (TYPE_GETS_REG_DELETE (current_class_type)
13436       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13437     {
13438       tree if_stmt;
13439
13440       exprstmt = build_op_delete_call
13441         (DELETE_EXPR, current_class_ptr, virtual_size,
13442          LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13443
13444       if_stmt = begin_if_stmt ();
13445       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13446                                   current_in_charge_parm,
13447                                   integer_one_node),
13448                            if_stmt);
13449       finish_expr_stmt (exprstmt);
13450       finish_then_clause (if_stmt);
13451       finish_if_stmt ();
13452     }
13453
13454   /* Close the block we started above.  */
13455   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13456 }
13457
13458 /* Finish up a function declaration and compile that function
13459    all the way to assembler language output.  The free the storage
13460    for the function definition.
13461
13462    This is called after parsing the body of the function definition.
13463    LINENO is the current line number.
13464
13465    FLAGS is a bitwise or of the following values: 
13466      1 - CALL_POPLEVEL 
13467        An extra call to poplevel (and expand_end_bindings) must be
13468        made to take care of the binding contour for the base
13469        initializers.  This is only relevant for constructors.
13470      2 - INCLASS_INLINE
13471        We just finished processing the body of an in-class inline
13472        function definition.  (This processing will have taken place
13473        after the class definition is complete.)  */
13474
13475 tree
13476 finish_function (lineno, flags)
13477      int lineno;
13478      int flags;
13479 {
13480   register tree fndecl = current_function_decl;
13481   tree fntype, ctype = NULL_TREE;
13482   /* Label to use if this function is supposed to return a value.  */
13483   tree no_return_label = NULL_TREE;
13484   int call_poplevel = (flags & 1) != 0;
13485   int inclass_inline = (flags & 2) != 0;
13486   int expand_p;
13487   int nested;
13488
13489   /* When we get some parse errors, we can end up without a
13490      current_function_decl, so cope.  */
13491   if (fndecl == NULL_TREE)
13492     return error_mark_node;
13493
13494   nested = function_depth > 1;
13495   fntype = TREE_TYPE (fndecl);
13496
13497   /*  TREE_READONLY (fndecl) = 1;
13498       This caused &foo to be of type ptr-to-const-function
13499       which then got a warning when stored in a ptr-to-function variable.  */
13500
13501   /* This happens on strange parse errors.  */
13502   if (! current_function_parms_stored)
13503     {
13504       call_poplevel = 0;
13505       store_parm_decls ();
13506     }
13507
13508   if (building_stmt_tree ())
13509     {
13510       if (DECL_CONSTRUCTOR_P (fndecl))
13511         {
13512           finish_constructor_body ();
13513           if (call_poplevel)
13514             do_poplevel ();
13515         }
13516       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13517         finish_destructor_body ();
13518       else if (DECL_MAIN_P (fndecl))
13519         {
13520           /* Make it so that `main' always returns 0 by default.  */
13521 #ifdef VMS
13522           finish_return_stmt (integer_one_node);
13523 #else
13524           finish_return_stmt (integer_zero_node);
13525 #endif
13526         }
13527
13528       /* Finish dealing with exception specifiers.  */
13529       if (flag_exceptions && !processing_template_decl
13530           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13531         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS 
13532                             (TREE_TYPE (current_function_decl)),
13533                             current_eh_spec_try_block);
13534     }
13535   else
13536     {
13537       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13538         {
13539           tree ttype = target_type (fntype);
13540           tree parmdecl;
13541
13542           if (IS_AGGR_TYPE (ttype))
13543             /* Let debugger know it should output info for this type.  */
13544             note_debug_info_needed (ttype);
13545
13546           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13547             {
13548               ttype = target_type (TREE_TYPE (parmdecl));
13549               if (IS_AGGR_TYPE (ttype))
13550                 /* Let debugger know it should output info for this type.  */
13551                 note_debug_info_needed (ttype);
13552             }
13553         }
13554
13555       /* Clean house because we will need to reorder insns here.  */
13556       do_pending_stack_adjust ();
13557
13558       if (dtor_label)
13559         ;
13560       else if (DECL_CONSTRUCTOR_P (fndecl))
13561         {
13562           /* All subobjects have been fully constructed at this point.  */
13563           end_protect_partials ();
13564
13565           if (call_poplevel)
13566             do_poplevel ();
13567         }
13568       else if (return_label != NULL_RTX
13569                && flag_this_is_variable <= 0
13570                && current_function_return_value == NULL_TREE
13571                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13572         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13573
13574       if (flag_exceptions)
13575         expand_exception_blocks ();
13576
13577       /* If this function is supposed to return a value, ensure that
13578          we do not fall into the cleanups by mistake.  The end of our
13579          function will look like this:
13580          
13581          user code (may have return stmt somewhere)
13582          goto no_return_label
13583          cleanup_label:
13584          cleanups
13585          goto return_label
13586          no_return_label:
13587          NOTE_INSN_FUNCTION_END
13588          return_label:
13589          things for return
13590          
13591          If the user omits a return stmt in the USER CODE section, we
13592          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13593          Otherwise, we won't.  */
13594       if (no_return_label)
13595         {
13596           DECL_CONTEXT (no_return_label) = fndecl;
13597           DECL_INITIAL (no_return_label) = error_mark_node;
13598           DECL_SOURCE_FILE (no_return_label) = input_filename;
13599           DECL_SOURCE_LINE (no_return_label) = lineno;
13600           expand_goto (no_return_label);
13601         }
13602
13603       if (cleanup_label)
13604         {
13605           /* Remove the binding contour which is used
13606              to catch cleanup-generated temporaries.  */
13607           expand_end_bindings (0, 0, 0);
13608           poplevel (0, 0, 0);
13609
13610           /* Emit label at beginning of cleanup code for parameters.  */
13611           emit_label (cleanup_label);
13612         }
13613
13614       /* Get return value into register if that's where it's supposed
13615          to be.  */
13616       if (original_result_rtx)
13617         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13618
13619       /* Finish building code that will trigger warnings if users forget
13620          to make their functions return values.  */
13621       if (no_return_label || cleanup_label)
13622         emit_jump (return_label);
13623       if (no_return_label)
13624         {
13625           /* We don't need to call `expand_*_return' here because we
13626              don't need any cleanups here--this path of code is only
13627              for error checking purposes.  */
13628           expand_label (no_return_label);
13629         }
13630
13631       /* We hard-wired immediate_size_expand to zero in
13632          start_function.  Expand_function_end will decrement this
13633          variable.  So, we set the variable to one here, so that after
13634          the decrement it will remain zero.  */
13635       immediate_size_expand = 1;
13636
13637       /* Generate rtl for function exit.  */
13638       expand_function_end (input_filename, lineno, 1);
13639     }
13640
13641   /* We have to save this value here in case
13642      maybe_end_member_template_processing decides to pop all the
13643      template parameters.  */
13644   expand_p = !building_stmt_tree ();
13645   
13646   /* If we're saving up tree structure, tie off the function now.  */
13647   if (!expand_p)
13648     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
13649
13650   /* This must come after expand_function_end because cleanups might
13651      have declarations (from inline functions) that need to go into
13652      this function's blocks.  */
13653   if (doing_semantic_analysis_p ())
13654     {
13655       if (current_binding_level->parm_flag != 1)
13656         my_friendly_abort (122);
13657       poplevel (1, 0, 1);
13658     }
13659
13660   /* Remember that we were in class scope.  */
13661   if (current_class_name)
13662     ctype = current_class_type;
13663
13664   /* Must mark the RESULT_DECL as being in this function.  */
13665   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13666
13667   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13668      to the FUNCTION_DECL node itself.  */
13669   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13670
13671   /* Undo the call to push_momentary in start_function.  */
13672   pop_momentary ();
13673
13674   /* Save away current state, if appropriate.  */
13675   if (!expanding_p && !processing_template_decl)
13676     save_function_data (fndecl);
13677
13678   if (expand_p)
13679     {
13680       int returns_null;
13681       int returns_value;
13682       int saved_flag_keep_inline_functions =
13683         flag_keep_inline_functions;
13684
13685       /* So we can tell if jump_optimize sets it to 1.  */
13686       can_reach_end = 0;
13687
13688       if (DECL_CONTEXT (fndecl) != NULL_TREE
13689           && hack_decl_function_context (fndecl))
13690         /* Trick rest_of_compilation into not deferring output of this
13691            function, even if it is inline, since the rtl_obstack for
13692            this function is the function_obstack of the enclosing
13693            function and will be deallocated when the enclosing
13694            function is gone.  See save_tree_status.  */
13695         flag_keep_inline_functions = 1;
13696
13697       /* Before we call rest_of_compilation (which will pop the
13698          CURRENT_FUNCTION), we must save these values.  */
13699       returns_null = current_function_returns_null;
13700       returns_value = current_function_returns_value;
13701
13702       /* If this is a nested function (like a template instantiation
13703          that we're compiling in the midst of compiling something
13704          else), push a new GC context.  That will keep local variables
13705          on the stack from being collected while we're doing the
13706          compilation of this function.  */
13707       if (function_depth > 1)
13708         ggc_push_context ();
13709
13710       /* Run the optimizers and output the assembler code for this
13711          function.  */
13712       if (DECL_ARTIFICIAL (fndecl))
13713         {
13714           /* Do we really *want* to inline this synthesized method?  */
13715
13716           int save_fif = flag_inline_functions;
13717           flag_inline_functions = 1;
13718
13719           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13720              will check our size.  */
13721           DECL_INLINE (fndecl) = 0;
13722
13723           rest_of_compilation (fndecl);
13724           flag_inline_functions = save_fif;
13725         }
13726       else
13727         rest_of_compilation (fndecl);
13728
13729       /* Undo the call to ggc_push_context above.  */
13730       if (function_depth > 1)
13731         ggc_pop_context ();
13732
13733       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13734
13735       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13736         {
13737           /* Set DECL_EXTERNAL so that assemble_external will be called as
13738              necessary.  We'll clear it again in finish_file.  */
13739           if (! DECL_EXTERNAL (fndecl))
13740             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13741           DECL_EXTERNAL (fndecl) = 1;
13742           mark_inline_for_output (fndecl);
13743         }
13744
13745       if (ctype && TREE_ASM_WRITTEN (fndecl))
13746         note_debug_info_needed (ctype);
13747
13748       returns_null |= can_reach_end;
13749
13750       /* Since we don't normally go through c_expand_return for constructors,
13751          this normally gets the wrong value.
13752          Also, named return values have their return codes emitted after
13753          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13754       if (DECL_CONSTRUCTOR_P (fndecl)
13755           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13756         returns_null = 0;
13757
13758       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13759         cp_warning ("`noreturn' function `%D' does return", fndecl);
13760       else if ((warn_return_type || pedantic)
13761                && returns_null
13762                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13763         {
13764           /* If this function returns non-void and control can drop through,
13765              complain.  */
13766           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13767         }
13768       /* With just -W, complain only if function returns both with
13769          and without a value.  */
13770       else if (extra_warnings && returns_value && returns_null)
13771         warning ("this function may return with or without a value");
13772     }
13773   else
13774     {
13775       /* Since we never call rest_of_compilation, we never clear
13776          CURRENT_FUNCTION.  Do so explicitly.  */
13777       free_after_compilation (current_function);
13778       current_function = NULL;
13779     }
13780
13781   /* If this is a in-class inline definition, we may have to pop the
13782      bindings for the template parameters that we added in
13783      maybe_begin_member_template_processing when start_function was
13784      called.  */
13785   if (inclass_inline)
13786     maybe_end_member_template_processing ();
13787
13788   /* Leave the scope of the class.  */
13789   if (ctype)
13790     pop_nested_class ();
13791
13792   --function_depth;
13793
13794   /* Free all the tree nodes making up this function.  */
13795   /* Switch back to allocating nodes permanently
13796      until we start another function.  */
13797   if (! nested)
13798     permanent_allocation (1);
13799
13800   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13801     {
13802       tree t;
13803
13804       /* Stop pointing to the local nodes about to be freed.  */
13805       /* But DECL_INITIAL must remain nonzero so we know this
13806          was an actual function definition.  */
13807       DECL_INITIAL (fndecl) = error_mark_node;
13808       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13809         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13810     }
13811
13812   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13813     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13814   if (DECL_STATIC_DESTRUCTOR (fndecl))
13815     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13816
13817   /* Clean up.  */
13818   if (! nested)
13819     {
13820       /* Let the error reporting routines know that we're outside a
13821          function.  For a nested function, this value is used in
13822          pop_cp_function_context and then reset via pop_function_context.  */
13823       current_function_decl = NULL_TREE;
13824     }
13825
13826   return fndecl;
13827 }
13828 \f
13829 /* Create the FUNCTION_DECL for a function definition.
13830    DECLSPECS and DECLARATOR are the parts of the declaration;
13831    they describe the return type and the name of the function,
13832    but twisted together in a fashion that parallels the syntax of C.
13833
13834    This function creates a binding context for the function body
13835    as well as setting up the FUNCTION_DECL in current_function_decl.
13836
13837    Returns a FUNCTION_DECL on success.
13838
13839    If the DECLARATOR is not suitable for a function (it defines a datum
13840    instead), we return 0, which tells yyparse to report a parse error.
13841
13842    May return void_type_node indicating that this method is actually
13843    a friend.  See grokfield for more details.
13844
13845    Came here with a `.pushlevel' .
13846
13847    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13848    CHANGES TO CODE IN `grokfield'.  */
13849
13850 tree
13851 start_method (declspecs, declarator, attrlist)
13852      tree declarator, declspecs, attrlist;
13853 {
13854   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13855                                 attrlist);
13856
13857   /* Something too ugly to handle.  */
13858   if (fndecl == NULL_TREE)
13859     return NULL_TREE;
13860
13861   /* Pass friends other than inline friend functions back.  */
13862   if (fndecl == void_type_node)
13863     return fndecl;
13864
13865   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13866     /* Not a function, tell parser to report parse error.  */
13867     return NULL_TREE;
13868
13869   if (DECL_IN_AGGR_P (fndecl))
13870     {
13871       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13872         {
13873           if (DECL_CONTEXT (fndecl) 
13874               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13875             cp_error ("`%D' is already defined in class %s", fndecl,
13876                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13877         }
13878       return void_type_node;
13879     }
13880
13881   check_template_shadow (fndecl);
13882
13883   DECL_THIS_INLINE (fndecl) = 1;
13884
13885   if (flag_default_inline)
13886     DECL_INLINE (fndecl) = 1;
13887
13888   /* We process method specializations in finish_struct_1.  */
13889   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13890     fndecl = push_template_decl (fndecl);
13891
13892   /* We read in the parameters on the maybepermanent_obstack,
13893      but we won't be getting back to them until after we
13894      may have clobbered them.  So the call to preserve_data
13895      will keep them safe.  */
13896   preserve_data ();
13897
13898   if (! DECL_FRIEND_P (fndecl))
13899     {
13900       if (TREE_CHAIN (fndecl))
13901         {
13902           fndecl = copy_node (fndecl);
13903           TREE_CHAIN (fndecl) = NULL_TREE;
13904         }
13905
13906       if (DECL_CONSTRUCTOR_P (fndecl))
13907         {
13908           if (! grok_ctor_properties (current_class_type, fndecl))
13909             return void_type_node;
13910         }
13911       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13912         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13913     }
13914
13915   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13916
13917   /* Make a place for the parms */
13918   pushlevel (0);
13919   current_binding_level->parm_flag = 1;
13920   
13921   DECL_IN_AGGR_P (fndecl) = 1;
13922   return fndecl;
13923 }
13924
13925 /* Go through the motions of finishing a function definition.
13926    We don't compile this method until after the whole class has
13927    been processed.
13928
13929    FINISH_METHOD must return something that looks as though it
13930    came from GROKFIELD (since we are defining a method, after all).
13931
13932    This is called after parsing the body of the function definition.
13933    STMTS is the chain of statements that makes up the function body.
13934
13935    DECL is the ..._DECL that `start_method' provided.  */
13936
13937 tree
13938 finish_method (decl)
13939      tree decl;
13940 {
13941   register tree fndecl = decl;
13942   tree old_initial;
13943
13944   register tree link;
13945
13946   if (decl == void_type_node)
13947     return decl;
13948
13949   old_initial = DECL_INITIAL (fndecl);
13950
13951   /* Undo the level for the parms (from start_method).
13952      This is like poplevel, but it causes nothing to be
13953      saved.  Saving information here confuses symbol-table
13954      output routines.  Besides, this information will
13955      be correctly output when this method is actually
13956      compiled.  */
13957
13958   /* Clear out the meanings of the local variables of this level;
13959      also record in each decl which block it belongs to.  */
13960
13961   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13962     {
13963       if (DECL_NAME (link) != NULL_TREE)
13964         pop_binding (DECL_NAME (link), link);
13965       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13966       DECL_CONTEXT (link) = NULL_TREE;
13967     }
13968
13969   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13970                       (HOST_WIDE_INT) current_binding_level->level_chain,
13971                       current_binding_level->parm_flag,
13972                       current_binding_level->keep);
13973
13974   poplevel (0, 0, 0);
13975
13976   DECL_INITIAL (fndecl) = old_initial;
13977
13978   /* We used to check if the context of FNDECL was different from
13979      current_class_type as another way to get inside here.  This didn't work
13980      for String.cc in libg++.  */
13981   if (DECL_FRIEND_P (fndecl))
13982     {
13983       CLASSTYPE_INLINE_FRIENDS (current_class_type)
13984         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13985       decl = void_type_node;
13986     }
13987
13988   return decl;
13989 }
13990 \f
13991 /* Called when a new struct TYPE is defined.
13992    If this structure or union completes the type of any previous
13993    variable declaration, lay it out and output its rtl.  */
13994
13995 void
13996 hack_incomplete_structures (type)
13997      tree type;
13998 {
13999   tree *list;
14000
14001   if (current_binding_level->incomplete == NULL_TREE)
14002     return;
14003
14004   if (!type) /* Don't do this for class templates.  */
14005     return;
14006
14007   for (list = &current_binding_level->incomplete; *list; )
14008     {
14009       tree decl = TREE_VALUE (*list);
14010       if ((decl && TREE_TYPE (decl) == type)
14011           || (TREE_TYPE (decl)
14012               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14013               && TREE_TYPE (TREE_TYPE (decl)) == type))
14014         {
14015           int toplevel = toplevel_bindings_p ();
14016           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14017               && TREE_TYPE (TREE_TYPE (decl)) == type)
14018             layout_type (TREE_TYPE (decl));
14019           layout_decl (decl, 0);
14020           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14021           if (! toplevel)
14022             {
14023               tree cleanup;
14024               expand_decl (decl);
14025               cleanup = maybe_build_cleanup (decl);
14026               expand_decl_init (decl);
14027               if (! expand_decl_cleanup (decl, cleanup))
14028                 cp_error ("parser lost in parsing declaration of `%D'",
14029                           decl);
14030             }
14031           *list = TREE_CHAIN (*list);
14032         }
14033       else
14034         list = &TREE_CHAIN (*list);
14035     }
14036 }
14037
14038 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14039    See build_delete for information about AUTO_DELETE.
14040
14041    Don't build these on the momentary obstack; they must live
14042    the life of the binding contour.  */
14043
14044 static tree
14045 maybe_build_cleanup_1 (decl, auto_delete)
14046      tree decl, auto_delete;
14047 {
14048   tree type = TREE_TYPE (decl);
14049   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14050     {
14051       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14052       tree rval;
14053
14054       if (TREE_CODE (decl) != PARM_DECL)
14055         temp = suspend_momentary ();
14056
14057       if (TREE_CODE (type) == ARRAY_TYPE)
14058         rval = decl;
14059       else
14060         {
14061           mark_addressable (decl);
14062           rval = build_unary_op (ADDR_EXPR, decl, 0);
14063         }
14064
14065       /* Optimize for space over speed here.  */
14066       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14067           || flag_expensive_optimizations)
14068         flags |= LOOKUP_NONVIRTUAL;
14069
14070       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14071
14072       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14073           && ! TYPE_HAS_DESTRUCTOR (type))
14074         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14075                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14076
14077       if (TREE_CODE (decl) != PARM_DECL)
14078         resume_momentary (temp);
14079
14080       return rval;
14081     }
14082   return 0;
14083 }
14084
14085 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
14086
14087 tree
14088 build_target_expr (decl, value)
14089      tree decl;
14090      tree value;
14091 {
14092   tree t;
14093
14094   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
14095              maybe_build_cleanup (decl), NULL_TREE);
14096   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14097      ignore the TARGET_EXPR.  If there really turn out to be no
14098      side-effects, then the optimizer should be able to get rid of
14099      whatever code is generated anyhow.  */
14100   TREE_SIDE_EFFECTS (t) = 1;
14101
14102   return t;
14103 }
14104
14105 /* If DECL is of a type which needs a cleanup, build that cleanup
14106    here.  The cleanup does free the storage with a call to delete.  */
14107
14108 tree
14109 maybe_build_cleanup_and_delete (decl)
14110      tree decl;
14111 {
14112   return maybe_build_cleanup_1 (decl, integer_three_node);
14113 }
14114
14115 /* If DECL is of a type which needs a cleanup, build that cleanup
14116    here.  The cleanup does not free the storage with a call a delete.  */
14117
14118 tree
14119 maybe_build_cleanup (decl)
14120      tree decl;
14121 {
14122   return maybe_build_cleanup_1 (decl, integer_two_node);
14123 }
14124 \f
14125 /* Expand a C++ expression at the statement level.
14126    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14127    The C++ type checker should get all of these out when
14128    expressions are combined with other, type-providing, expressions,
14129    leaving only orphan expressions, such as:
14130
14131    &class::bar;         / / takes its address, but does nothing with it.  */
14132
14133 void
14134 cplus_expand_expr_stmt (exp)
14135      tree exp;
14136 {
14137   if (stmts_are_full_exprs_p)
14138     exp = convert_to_void (exp, "statement");
14139   
14140 #if 0
14141   /* We should do this eventually, but right now this causes regex.o from
14142      libg++ to miscompile, and tString to core dump.  */
14143   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14144 #endif
14145
14146   /* If we don't do this, we end up down inside expand_expr
14147      trying to do TYPE_MODE on the ERROR_MARK, and really
14148      go outside the bounds of the type.  */
14149   if (exp != error_mark_node)
14150     expand_expr_stmt (break_out_cleanups (exp));
14151 }
14152
14153 /* When a stmt has been parsed, this function is called.  */
14154
14155 void
14156 finish_stmt ()
14157 {
14158   /* Always assume this statement was not an expression statement.  If
14159      it actually was an expression statement, its our callers
14160      responsibility to fix this up.  */
14161   last_expr_type = NULL_TREE;
14162 }
14163
14164 /* Change a static member function definition into a FUNCTION_TYPE, instead
14165    of the METHOD_TYPE that we create when it's originally parsed.
14166
14167    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14168    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14169    other decls.  Either pass the addresses of local variables or NULL.  */
14170
14171 void
14172 revert_static_member_fn (decl, fn, argtypes)
14173      tree *decl, *fn, *argtypes;
14174 {
14175   tree tmp;
14176   tree function = fn ? *fn : TREE_TYPE (*decl);
14177   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14178
14179   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14180       != TYPE_UNQUALIFIED)
14181     cp_error ("static member function `%#D' declared with type qualifiers", 
14182               *decl);
14183
14184   args = TREE_CHAIN (args);
14185   tmp = build_function_type (TREE_TYPE (function), args);
14186   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14187   tmp = build_exception_variant (tmp,
14188                                  TYPE_RAISES_EXCEPTIONS (function));
14189   TREE_TYPE (*decl) = tmp;
14190   if (DECL_ARGUMENTS (*decl))
14191     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14192   DECL_STATIC_FUNCTION_P (*decl) = 1;
14193   if (fn)
14194     *fn = tmp;
14195   if (argtypes)
14196     *argtypes = args;
14197 }
14198
14199 /* Initialize the variables used during compilation of a C++ 
14200    function.  */ 
14201
14202 static void
14203 push_cp_function_context (f)
14204      struct function *f;
14205 {
14206   struct language_function *p 
14207     = ((struct language_function *) 
14208        xcalloc (1, sizeof (struct language_function)));
14209   f->language = p;
14210
14211   /* It takes an explicit call to expand_body to generate RTL for a
14212      function.  */
14213   expanding_p = 0;
14214
14215   /* Whenever we start a new function, we destroy temporaries in the
14216      usual way.  */
14217   stmts_are_full_exprs_p = 1;
14218 }
14219
14220 /* Free the language-specific parts of F, now that we've finished
14221    compiling the function.  */
14222
14223 static void
14224 pop_cp_function_context (f)
14225      struct function *f;
14226 {
14227   free (f->language);
14228   f->language = 0;
14229 }
14230
14231 /* Mark P for GC.  */
14232
14233 static void
14234 mark_lang_function (p)
14235      struct language_function *p;
14236 {
14237   if (!p)
14238     return;
14239
14240   ggc_mark_tree (p->x_named_labels);
14241   ggc_mark_tree (p->x_ctor_label);
14242   ggc_mark_tree (p->x_dtor_label);
14243   ggc_mark_tree (p->x_base_init_list);
14244   ggc_mark_tree (p->x_member_init_list);
14245   ggc_mark_tree (p->x_current_class_ptr);
14246   ggc_mark_tree (p->x_current_class_ref);
14247   ggc_mark_tree (p->x_eh_spec_try_block);
14248   ggc_mark_tree (p->x_scope_stmt_stack);
14249
14250   ggc_mark_rtx (p->x_last_dtor_insn);
14251   ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14252   ggc_mark_rtx (p->x_result_rtx);
14253
14254   mark_stmt_tree (&p->x_stmt_tree);
14255   mark_binding_level (&p->bindings);
14256 }
14257
14258 /* Mark the language-specific data in F for GC.  */
14259
14260 void
14261 mark_cp_function_context (f)
14262      struct function *f;
14263 {
14264   mark_lang_function (f->language);
14265 }
14266
14267 int
14268 in_function_p ()
14269 {
14270   return function_depth != 0;
14271 }
14272
14273
14274 void
14275 lang_mark_false_label_stack (l)
14276      struct label_node *l;
14277 {
14278   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14279   my_friendly_assert (l == NULL, 19990904);
14280 }
14281
14282 void
14283 lang_mark_tree (t)
14284      tree t;
14285 {
14286   enum tree_code code = TREE_CODE (t);
14287   if (code == IDENTIFIER_NODE)
14288     {
14289       struct lang_identifier *li = (struct lang_identifier *) t;
14290       struct lang_id2 *li2 = li->x;
14291       ggc_mark_tree (li->namespace_bindings);
14292       ggc_mark_tree (li->bindings);
14293       ggc_mark_tree (li->class_value);
14294       ggc_mark_tree (li->class_template_info);
14295
14296       if (li2)
14297         {
14298           ggc_mark_tree (li2->label_value);
14299           ggc_mark_tree (li2->implicit_decl);
14300           ggc_mark_tree (li2->error_locus);
14301         }
14302     }
14303   else if (code == CPLUS_BINDING)
14304     {
14305       if (BINDING_HAS_LEVEL_P (t))
14306         mark_binding_level (&BINDING_LEVEL (t));
14307       else
14308         ggc_mark_tree (BINDING_SCOPE (t));
14309       ggc_mark_tree (BINDING_VALUE (t));
14310     }
14311   else if (code == OVERLOAD)
14312     ggc_mark_tree (OVL_FUNCTION (t));
14313   else if (code == TEMPLATE_PARM_INDEX)
14314     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14315   else if (TREE_CODE_CLASS (code) == 'd')
14316     {
14317       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14318
14319       if (ld)
14320         {
14321           ggc_mark (ld);
14322           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14323             ggc_mark_tree (ld->decl_flags.u2.access);
14324           ggc_mark_tree (ld->decl_flags.context);
14325           if (TREE_CODE (t) != NAMESPACE_DECL)
14326             ggc_mark_tree (ld->decl_flags.u.template_info);
14327           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14328             {
14329               ggc_mark_tree (ld->main_decl_variant);
14330               ggc_mark_tree (ld->befriending_classes);
14331               ggc_mark_tree (ld->saved_tree);
14332               if (TREE_CODE (t) == TYPE_DECL)
14333                 ggc_mark_tree (ld->u.sorted_fields);
14334               else if (TREE_CODE (t) == FUNCTION_DECL
14335                        && !DECL_PENDING_INLINE_P (t))
14336                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14337             }
14338         }
14339     }
14340   else if (TREE_CODE_CLASS (code) == 't')
14341     {
14342       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14343
14344       if (lt && !(TREE_CODE (t) == POINTER_TYPE 
14345                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14346         {
14347           ggc_mark (lt);
14348           ggc_mark_tree (lt->vfields);
14349           ggc_mark_tree (lt->vbases);
14350           ggc_mark_tree (lt->tags);
14351           ggc_mark_tree (lt->search_slot);
14352           ggc_mark_tree (lt->size);
14353           ggc_mark_tree (lt->abstract_virtuals);
14354           ggc_mark_tree (lt->friend_classes);
14355           ggc_mark_tree (lt->rtti);
14356           ggc_mark_tree (lt->methods);
14357           ggc_mark_tree (lt->template_info);
14358           ggc_mark_tree (lt->befriending_classes);
14359         }
14360       else if (lt)
14361         /* In the case of pointer-to-member function types, the
14362            TYPE_LANG_SPECIFIC is really just a tree.  */
14363         ggc_mark_tree ((tree) lt);
14364     }
14365 }
14366