OSDN Git Service

* cp-tree.h (begin_new_placement): 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 *, int *, void *));
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 if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
353    objects.  */
354 extern int flag_huge_objects;
355
356 /* Nonzero if we want to conserve space in the .o files.  We do this
357    by putting uninitialized data and runtime initialized data into
358    .common instead of .data at the expense of not flagging multiple
359    definitions.  */
360 extern int flag_conserve_space;
361 \f
362 /* C and C++ flags are in decl2.c.  */
363
364 /* Flag used when debugging spew.c */
365
366 extern int spew_debug;
367
368 /* A expression of value 0 with the same precision as a sizetype
369    node, but signed.  */
370 tree signed_size_zero_node;
371
372 /* The name of the anonymous namespace, throughout this translation
373    unit.  */
374 tree anonymous_namespace_name;
375
376 \f
377 /* For each binding contour we allocate a binding_level structure
378    which records the names defined in that contour.
379    Contours include:
380     0) the global one
381     1) one for each function definition,
382        where internal declarations of the parameters appear.
383     2) one for each compound statement,
384        to record its declarations.
385
386    The current meaning of a name can be found by searching the levels
387    from the current one out to the global one.
388
389    Off to the side, may be the class_binding_level.  This exists only
390    to catch class-local declarations.  It is otherwise nonexistent.
391
392    Also there may be binding levels that catch cleanups that must be
393    run when exceptions occur.  Thus, to see whether a name is bound in
394    the current scope, it is not enough to look in the
395    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
396    instead.  */
397
398 /* Note that the information in the `names' component of the global contour
399    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
400
401 struct binding_level
402   {
403     /* A chain of _DECL nodes for all variables, constants, functions,
404        and typedef types.  These are in the reverse of the order
405        supplied.  There may be OVERLOADs on this list, too, but they
406        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
407     tree names;
408
409     /* A list of structure, union and enum definitions, for looking up
410        tag names.
411        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
412        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
413        or ENUMERAL_TYPE node.
414
415        C++: the TREE_VALUE nodes can be simple types for
416        component_bindings.  */
417     tree tags;
418
419     /* A list of USING_DECL nodes. */
420     tree usings;
421
422     /* A list of used namespaces. PURPOSE is the namespace,
423        VALUE the common ancestor with this binding_level's namespace. */
424     tree using_directives;
425
426     /* If this binding level is the binding level for a class, then
427        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
428        is the name of an entity bound in the class; the TREE_VALUE is
429        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
430        when leaving class scope, we can restore the
431        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
432        the DECL bound by this name in the class.  */
433     tree class_shadowed;
434
435     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
436        is used for all binding levels.  */
437     tree type_shadowed;
438
439     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
440        label in this scope.  The TREE_PURPOSE is the previous value of
441        the IDENTIFIER_LABEL VALUE.  */
442     tree shadowed_labels;
443
444     /* For each level (except not the global one),
445        a chain of BLOCK nodes for all the levels
446        that were entered and exited one level down.  */
447     tree blocks;
448
449     /* The BLOCK node for this level, if one has been preallocated.
450        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
451     tree this_block;
452
453     /* The binding level which this one is contained in (inherits from).  */
454     struct binding_level *level_chain;
455
456     /* List of decls in `names' that have incomplete
457        structure or union types.  */
458     tree incomplete;
459
460     /* List of VAR_DECLS saved from a previous for statement.
461        These would be dead in ANSI-conforming code, but might
462        be referenced in ARM-era code.  These are stored in a
463        TREE_LIST; the TREE_VALUE is the actual declaration.  */
464     tree dead_vars_from_for;
465
466     /* 1 for the level that holds the parameters of a function.
467        2 for the level that holds a class declaration.
468        3 for levels that hold parameter declarations.  */
469     unsigned parm_flag : 4;
470
471     /* 1 means make a BLOCK for this level regardless of all else.
472        2 for temporary binding contours created by the compiler.  */
473     unsigned keep : 3;
474
475     /* Nonzero if this level "doesn't exist" for tags.  */
476     unsigned tag_transparent : 1;
477
478     /* Nonzero if this level can safely have additional
479        cleanup-needing variables added to it.  */
480     unsigned more_cleanups_ok : 1;
481     unsigned have_cleanups : 1;
482
483     /* Nonzero if this level is for storing the decls for template
484        parameters and generic decls; these decls will be discarded and
485        replaced with a TEMPLATE_DECL.  */
486     unsigned pseudo_global : 1;
487
488     /* This is set for a namespace binding level.  */
489     unsigned namespace_p : 1;
490
491     /* True if this level is that of a for-statement where we need to
492        worry about ambiguous (ARM or ANSI) scope rules.  */
493     unsigned is_for_scope : 1;
494
495     /* True if this level corresponds to an EH region, as for a try block.  */
496     unsigned eh_region : 1;
497
498     /* One bit left for this word.  */
499
500 #if defined(DEBUG_CP_BINDING_LEVELS)
501     /* Binding depth at which this level began.  */
502     unsigned binding_depth;
503 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
504   };
505
506 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
507   
508 /* The binding level currently in effect.  */
509
510 #define current_binding_level                   \
511   (current_function                             \
512    ? cp_function_chain->bindings                \
513    : scope_chain->bindings)
514
515 /* The binding level of the current class, if any.  */
516
517 #define class_binding_level scope_chain->class_bindings
518
519 /* A chain of binding_level structures awaiting reuse.  */
520
521 static struct binding_level *free_binding_level;
522
523 /* The outermost binding level, for names of file scope.
524    This is created when the compiler is started and exists
525    through the entire run.  */
526
527 static struct binding_level *global_binding_level;
528
529 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
530
531 static int keep_next_level_flag;
532
533 #if defined(DEBUG_CP_BINDING_LEVELS)
534 static int binding_depth = 0;
535 static int is_class_level = 0;
536
537 static void
538 indent ()
539 {
540   register unsigned i;
541
542   for (i = 0; i < binding_depth*2; i++)
543     putc (' ', stderr);
544 }
545 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
546
547 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
548
549 static void
550 push_binding_level (newlevel, tag_transparent, keep)
551      struct binding_level *newlevel;
552      int tag_transparent, keep;
553 {
554   /* Add this level to the front of the chain (stack) of levels that
555      are active.  */
556   bzero ((char*) newlevel, sizeof (struct binding_level));
557   newlevel->level_chain = current_binding_level;
558   current_binding_level = newlevel;
559   newlevel->tag_transparent = tag_transparent;
560   newlevel->more_cleanups_ok = 1;
561
562   /* We are called before expand_start_bindings, but after
563      expand_eh_region_start for a try block; so we check this now,
564      before the EH block is covered up.  */
565   newlevel->eh_region = is_eh_region ();
566
567   newlevel->keep = keep;
568 #if defined(DEBUG_CP_BINDING_LEVELS)
569   newlevel->binding_depth = binding_depth;
570   indent ();
571   fprintf (stderr, "push %s level 0x%08x line %d\n",
572            (is_class_level) ? "class" : "block", newlevel, lineno);
573   is_class_level = 0;
574   binding_depth++;
575 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
576 }
577
578 /* Find the innermost enclosing class scope, and reset
579    CLASS_BINDING_LEVEL appropriately.  */
580
581 static void
582 find_class_binding_level ()
583 {
584   struct binding_level *level = current_binding_level;
585
586   while (level && level->parm_flag != 2)
587     level = level->level_chain;
588   if (level && level->parm_flag == 2)
589     class_binding_level = level;
590   else
591     class_binding_level = 0;
592 }
593
594 static void
595 pop_binding_level ()
596 {
597   if (global_binding_level)
598     {
599       /* Cannot pop a level, if there are none left to pop.  */
600       if (current_binding_level == global_binding_level)
601         my_friendly_abort (123);
602     }
603   /* Pop the current level, and free the structure for reuse.  */
604 #if defined(DEBUG_CP_BINDING_LEVELS)
605   binding_depth--;
606   indent ();
607   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
608           (is_class_level) ? "class" : "block",
609           current_binding_level, lineno);
610   if (is_class_level != (current_binding_level == class_binding_level))
611     {
612       indent ();
613       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
614     }
615   is_class_level = 0;
616 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
617   {
618     register struct binding_level *level = current_binding_level;
619     current_binding_level = current_binding_level->level_chain;
620     level->level_chain = free_binding_level;
621 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
622     if (level->binding_depth != binding_depth)
623       abort ();
624 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
625     free_binding_level = level;
626     find_class_binding_level ();
627   }
628 }
629
630 static void
631 suspend_binding_level ()
632 {
633   if (class_binding_level)
634     current_binding_level = class_binding_level;
635
636   if (global_binding_level)
637     {
638       /* Cannot suspend a level, if there are none left to suspend.  */
639       if (current_binding_level == global_binding_level)
640         my_friendly_abort (123);
641     }
642   /* Suspend the current level.  */
643 #if defined(DEBUG_CP_BINDING_LEVELS)
644   binding_depth--;
645   indent ();
646   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
647           (is_class_level) ? "class" : "block",
648           current_binding_level, lineno);
649   if (is_class_level != (current_binding_level == class_binding_level))
650     {
651       indent ();
652       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
653     }
654   is_class_level = 0;
655 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
656   current_binding_level = current_binding_level->level_chain;
657   find_class_binding_level ();
658 }
659
660 static void
661 resume_binding_level (b)
662      struct binding_level *b;
663 {
664   /* Resuming binding levels is meant only for namespaces,
665      and those cannot nest into classes. */
666   my_friendly_assert(!class_binding_level, 386);
667   /* Also, resuming a non-directly nested namespace is a no-no.  */
668   my_friendly_assert(b->level_chain == current_binding_level, 386);
669   current_binding_level = b;
670 #if defined(DEBUG_CP_BINDING_LEVELS)
671   b->binding_depth = binding_depth;
672   indent ();
673   fprintf (stderr, "resume %s level 0x%08x line %d\n",
674            (is_class_level) ? "class" : "block", b, lineno);
675   is_class_level = 0;
676   binding_depth++;
677 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
678 }
679 \f
680 /* Create a new `struct binding_level'.  */
681
682 static
683 struct binding_level *
684 make_binding_level ()
685 {
686   /* NOSTRICT */
687   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
688 }
689
690 /* Nonzero if we are currently in the global binding level.  */
691
692 int
693 global_bindings_p ()
694 {
695   return current_binding_level == global_binding_level;
696 }
697
698 /* Return the innermost binding level that is not for a class scope.  */
699
700 static struct binding_level *
701 innermost_nonclass_level ()
702 {
703   struct binding_level *b;
704
705   b = current_binding_level;
706   while (b->parm_flag == 2)
707     b = b->level_chain;
708
709   return b;
710 }
711
712 /* Nonzero if we are currently in a toplevel binding level.  This
713    means either the global binding level or a namespace in a toplevel
714    binding level.  Since there are no non-toplevel namespace levels,
715    this really means any namespace or pseudo-global level.  We also
716    include a class whose context is toplevel.  */
717
718 int
719 toplevel_bindings_p ()
720 {
721   struct binding_level *b = innermost_nonclass_level ();
722
723   return b->namespace_p || b->pseudo_global;
724 }
725
726 /* Nonzero if this is a namespace scope, or if we are defining a class
727    which is itself at namespace scope, or whose enclosing class is
728    such a class, etc.  */
729
730 int
731 namespace_bindings_p ()
732 {
733   struct binding_level *b = innermost_nonclass_level ();
734
735   return b->namespace_p;
736 }
737
738 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
739    unconditionally.  Otherwise, use the normal logic to decide whether
740    or not to create a BLOCK.  */
741
742 void
743 keep_next_level (keep)
744      int keep;
745 {
746   keep_next_level_flag = keep;
747 }
748
749 /* Nonzero if the current level needs to have a BLOCK made.  */
750
751 int
752 kept_level_p ()
753 {
754   return (current_binding_level->blocks != NULL_TREE
755           || current_binding_level->keep
756           || current_binding_level->names != NULL_TREE
757           || (current_binding_level->tags != NULL_TREE
758               && !current_binding_level->tag_transparent));
759 }
760
761 void
762 declare_pseudo_global_level ()
763 {
764   current_binding_level->pseudo_global = 1;
765 }
766
767 static void
768 declare_namespace_level ()
769 {
770   current_binding_level->namespace_p = 1;
771 }
772
773 int
774 pseudo_global_level_p ()
775 {
776   return current_binding_level->pseudo_global;
777 }
778
779 void
780 set_class_shadows (shadows)
781      tree shadows;
782 {
783   class_binding_level->class_shadowed = shadows;
784 }
785
786 /* Enter a new binding level.
787    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
788    not for that of tags.  */
789
790 void
791 pushlevel (tag_transparent)
792      int tag_transparent;
793 {
794   struct binding_level *newlevel;
795
796   if (current_function && !doing_semantic_analysis_p ())
797     return;
798
799   /* Reuse or create a struct for this binding level.  */
800 #if defined(DEBUG_CP_BINDING_LEVELS)
801   if (0)
802 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
803   if (free_binding_level)
804 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
805     {
806       newlevel = free_binding_level;
807       free_binding_level = free_binding_level->level_chain;
808     }
809   else
810     newlevel = make_binding_level ();
811
812   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
813   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
814   keep_next_level_flag = 0;
815 }
816
817 void
818 note_level_for_for ()
819 {
820   current_binding_level->is_for_scope = 1;
821 }
822
823 /* For a binding between a name and an entity at a block scope,
824    this is the `struct binding_level' for the block.  */
825 #define BINDING_LEVEL(NODE) \
826    (((struct tree_binding*)NODE)->scope.level)
827
828 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
829    level at which this declaration is being bound.  */
830
831 static void
832 push_binding (id, decl, level)
833      tree id;
834      tree decl;
835      struct binding_level* level;
836 {
837   tree binding;
838
839   binding = make_node (CPLUS_BINDING);
840
841   /* Now, fill in the binding information.  */
842   BINDING_VALUE (binding) = decl;
843   BINDING_TYPE (binding) = NULL_TREE;
844   BINDING_LEVEL (binding) = level;
845   INHERITED_VALUE_BINDING_P (binding) = 0;
846   LOCAL_BINDING_P (binding) = (level != class_binding_level);
847   BINDING_HAS_LEVEL_P (binding) = 1;
848
849   /* And put it on the front of the list of bindings for ID.  */
850   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
851   IDENTIFIER_BINDING (id) = binding;
852 }
853
854 /* ID is already bound in the current scope.  But, DECL is an
855    additional binding for ID in the same scope.  This is the `struct
856    stat' hack whereby a non-typedef class-name or enum-name can be
857    bound at the same level as some other kind of entity.  It's the
858    responsibility of the caller to check that inserting this name is
859    legal here.  Returns nonzero if the new binding was successful.  */
860 static int
861 add_binding (id, decl)
862      tree id;
863      tree decl;
864 {
865   tree binding = IDENTIFIER_BINDING (id);
866   int ok = 1;
867
868   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
869     /* The new name is the type name.  */
870     BINDING_TYPE (binding) = decl;
871   else if (!BINDING_VALUE (binding))
872     /* This situation arises when push_class_level_binding moves an
873        inherited type-binding out of the way to make room for a new
874        value binding.  */
875     BINDING_VALUE (binding) = decl;
876   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
877            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
878     {
879       /* The old binding was a type name.  It was placed in
880          BINDING_VALUE because it was thought, at the point it was
881          declared, to be the only entity with such a name.  Move the
882          type name into the type slot; it is now hidden by the new
883          binding.  */
884       BINDING_TYPE (binding) = BINDING_VALUE (binding);
885       BINDING_VALUE (binding) = decl;
886       INHERITED_VALUE_BINDING_P (binding) = 0;
887     }
888   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
889            && TREE_CODE (decl) == TYPE_DECL
890            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
891            && same_type_p (TREE_TYPE (decl),
892                            TREE_TYPE (BINDING_VALUE (binding))))
893     /* We have two typedef-names, both naming the same type to have
894        the same name.  This is OK because of:
895
896          [dcl.typedef]
897
898          In a given scope, a typedef specifier can be used to redefine
899          the name of any type declared in that scope to refer to the
900          type to which it already refers.  */
901     ok = 0;
902   else
903     {
904       cp_error ("declaration of `%#D'", decl);
905       cp_error_at ("conflicts with previous declaration `%#D'",
906                    BINDING_VALUE (binding));
907       ok = 0;
908     }
909
910   return ok;
911 }
912
913 /* Add DECL to the list of things declared in B.  */
914
915 static void
916 add_decl_to_level (decl, b)
917      tree decl;
918      struct binding_level *b;
919 {
920   /* We build up the list in reverse order, and reverse it later if
921      necessary.  */
922   TREE_CHAIN (decl) = b->names;
923   b->names = decl;
924 }
925
926 /* Bind DECL to ID in the current_binding_level, assumed to be a local
927    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
928    doesn't really belong to this binding level, that it got here
929    through a using-declaration.  */
930
931 void
932 push_local_binding (id, decl, flags)
933      tree id;
934      tree decl;
935      int flags;
936 {
937   struct binding_level *b;
938
939   /* Skip over any local classes.  This makes sense if we call
940      push_local_binding with a friend decl of a local class.  */
941   b = current_binding_level;
942   while (b->parm_flag == 2)
943     b = b->level_chain;
944
945   if (lookup_name_current_level (id))
946     {
947       /* Supplement the existing binding.  */
948       if (!add_binding (id, decl))
949         /* It didn't work.  Something else must be bound at this
950            level.  Do not add DECL to the list of things to pop
951            later.  */
952         return;
953     }
954   else
955     /* Create a new binding.  */
956     push_binding (id, decl, b);
957
958   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
959     /* We must put the OVERLOAD into a TREE_LIST since the
960        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
961        decls that got here through a using-declaration.  */
962     decl = build_tree_list (NULL_TREE, decl);
963
964   /* And put DECL on the list of things declared by the current
965      binding level.  */
966   add_decl_to_level (decl, b);
967 }
968
969 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
970    binding was successful.  */
971
972 int
973 push_class_binding (id, decl)
974      tree id;
975      tree decl;
976 {
977   int result = 1;
978   tree binding = IDENTIFIER_BINDING (id);
979   tree context;
980
981   /* Note that we declared this value so that we can issue an error if
982      this an illegal redeclaration of a name already used for some
983      other purpose.  */
984   note_name_declared_in_class (id, decl);
985
986   if (binding && BINDING_LEVEL (binding) == class_binding_level)
987     /* Supplement the existing binding.  */
988     result = add_binding (id, decl);
989   else
990     /* Create a new binding.  */
991     push_binding (id, decl, class_binding_level);
992
993   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
994      class-level declaration.  Note that we do not use DECL here
995      because of the possibility of the `struct stat' hack; if DECL is
996      a class-name or enum-name we might prefer a field-name, or some
997      such.  */
998   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
999
1000   /* If this is a binding from a base class, mark it as such.  */
1001   binding = IDENTIFIER_BINDING (id);
1002   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1003     {
1004       /* Any implicit typename must be from a base-class.  The
1005          context for an implicit typename declaration is always
1006          the derived class in which the lookup was done, so the checks
1007          based on the context of DECL below will not trigger.  */
1008       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1009         INHERITED_VALUE_BINDING_P (binding) = 1;
1010       else
1011         {
1012           if (TREE_CODE (decl) == OVERLOAD)
1013             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1014           else
1015             {
1016               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1017                                   0);
1018               context = DECL_REAL_CONTEXT (decl);
1019             }
1020
1021           if (is_properly_derived_from (current_class_type, context))
1022             INHERITED_VALUE_BINDING_P (binding) = 1;
1023           else
1024             INHERITED_VALUE_BINDING_P (binding) = 0;
1025         }
1026     }
1027   else if (BINDING_VALUE (binding) == decl)
1028     /* We only encounter a TREE_LIST when push_class_decls detects an
1029        ambiguity.  Such an ambiguity can be overridden by a definition
1030        in this class.  */
1031     INHERITED_VALUE_BINDING_P (binding) = 1;
1032
1033   return result;
1034 }
1035
1036 /* Remove the binding for DECL which should be the innermost binding
1037    for ID.  */
1038
1039 static void 
1040 pop_binding (id, decl) 
1041      tree id;
1042      tree decl;
1043 {
1044   tree binding;
1045     
1046   if (id == NULL_TREE)
1047     /* It's easiest to write the loops that call this function without
1048        checking whether or not the entities involved have names.  We
1049        get here for such an entity.  */
1050     return;
1051
1052   /* Get the innermost binding for ID.  */
1053   binding = IDENTIFIER_BINDING (id);
1054
1055   /* The name should be bound.  */
1056   my_friendly_assert (binding != NULL_TREE, 0);
1057
1058   /* The DECL will be either the ordinary binding or the type
1059      binding for this identifier.  Remove that binding.  */
1060   if (BINDING_VALUE (binding) == decl)
1061     BINDING_VALUE (binding) = NULL_TREE;
1062   else if (BINDING_TYPE (binding) == decl)
1063     BINDING_TYPE (binding) = NULL_TREE;
1064   else
1065     my_friendly_abort (0);
1066
1067   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1068     /* We're completely done with the innermost binding for this
1069        identifier.  Unhook it from the list of bindings.  */
1070     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1071 }
1072
1073 /* When a label goes out of scope, check to see if that label was used
1074    in a valid manner, and issue any appropriate warnings or errors.  */
1075
1076 static void
1077 pop_label (link)
1078      tree link;
1079 {
1080   tree label = TREE_VALUE (link);
1081
1082   if (!processing_template_decl && doing_semantic_analysis_p ())
1083     {
1084       if (DECL_INITIAL (label) == NULL_TREE)
1085         {
1086           cp_error_at ("label `%D' used but not defined", label);
1087           /* Avoid crashing later.  */
1088           define_label (input_filename, 1, DECL_NAME (label));
1089         }
1090       else if (warn_unused && !TREE_USED (label))
1091         cp_warning_at ("label `%D' defined but not used", label);
1092     }
1093
1094   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1095 }
1096
1097 /* At the end of a function, all labels declared within the fucntion
1098    go out of scope.  BLOCK is the top-level block for the 
1099    function.  */
1100
1101 static void
1102 pop_labels (block)
1103      tree block;
1104 {
1105   tree link;
1106
1107   /* Clear out the definitions of all label names, since their scopes
1108      end here.  */
1109   for (link = named_labels; link; link = TREE_CHAIN (link))
1110     {
1111       pop_label (link);
1112       /* Put the labels into the "variables" of the top-level block,
1113          so debugger can see them.  */
1114       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1115       BLOCK_VARS (block) = TREE_VALUE (link);
1116     }
1117
1118   named_labels = NULL_TREE;
1119 }
1120
1121 /* Exit a binding level.
1122    Pop the level off, and restore the state of the identifier-decl mappings
1123    that were in effect when this level was entered.
1124
1125    If KEEP == 1, this level had explicit declarations, so
1126    and create a "block" (a BLOCK node) for the level
1127    to record its declarations and subblocks for symbol table output.
1128
1129    If FUNCTIONBODY is nonzero, this level is the body of a function,
1130    so create a block as if KEEP were set and also clear out all
1131    label names.
1132
1133    If REVERSE is nonzero, reverse the order of decls before putting
1134    them into the BLOCK.  */
1135
1136 tree
1137 poplevel (keep, reverse, functionbody)
1138      int keep;
1139      int reverse;
1140      int functionbody;
1141 {
1142   register tree link;
1143   /* The chain of decls was accumulated in reverse order.
1144      Put it into forward order, just for cleanliness.  */
1145   tree decls;
1146   int tmp = functionbody;
1147   int real_functionbody;
1148   tree tags;
1149   tree subblocks;
1150   tree block = NULL_TREE;
1151   tree decl;
1152   int block_previously_created;
1153   int leaving_for_scope;
1154
1155   if (current_function && !doing_semantic_analysis_p ())
1156     return NULL_TREE;
1157
1158   my_friendly_assert (current_binding_level->parm_flag != 2,
1159                       19990916);
1160
1161   real_functionbody = (current_binding_level->keep == 2
1162                        ? ((functionbody = 0), tmp) : functionbody);
1163   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1164   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1165
1166   my_friendly_assert (!current_binding_level->class_shadowed,
1167                       19990414);
1168
1169   /* We used to use KEEP == 2 to indicate that the new block should go
1170      at the beginning of the list of blocks at this binding level,
1171      rather than the end.  This hack is no longer used.  */
1172   my_friendly_assert (keep == 0 || keep == 1, 0);
1173
1174   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1175                       (HOST_WIDE_INT) current_binding_level->level_chain,
1176                       current_binding_level->parm_flag,
1177                       current_binding_level->keep);
1178
1179   if (current_binding_level->keep == 1)
1180     keep = 1;
1181
1182   /* Get the decls in the order they were written.
1183      Usually current_binding_level->names is in reverse order.
1184      But parameter decls were previously put in forward order.  */
1185
1186   if (reverse)
1187     current_binding_level->names
1188       = decls = nreverse (current_binding_level->names);
1189   else
1190     decls = current_binding_level->names;
1191
1192   /* Output any nested inline functions within this block
1193      if they weren't already output.  */
1194
1195   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1196     if (TREE_CODE (decl) == FUNCTION_DECL
1197         && ! TREE_ASM_WRITTEN (decl)
1198         && DECL_INITIAL (decl) != NULL_TREE
1199         && TREE_ADDRESSABLE (decl)
1200         && decl_function_context (decl) == current_function_decl)
1201       {
1202         /* If this decl was copied from a file-scope decl
1203            on account of a block-scope extern decl,
1204            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1205         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1206           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1207         else
1208           {
1209             push_function_context ();
1210             output_inline_function (decl);
1211             pop_function_context ();
1212           }
1213       }
1214
1215   /* If there were any declarations or structure tags in that level,
1216      or if this level is a function body,
1217      create a BLOCK to record them for the life of this function.  */
1218
1219   block = NULL_TREE;
1220   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1221   if (block_previously_created)
1222     block = current_binding_level->this_block;
1223   else if (keep == 1 || functionbody)
1224     block = make_node (BLOCK);
1225   if (block != NULL_TREE)
1226     {
1227       if (block_previously_created)
1228         {
1229           if (decls || tags || subblocks)
1230             {
1231               if (BLOCK_VARS (block))
1232                 warning ("internal compiler error: debugging info corrupted");
1233
1234               BLOCK_VARS (block) = decls;
1235
1236               /* We can have previous subblocks and new subblocks when
1237                  doing fixup_gotos with complex cleanups.  We chain the new
1238                  subblocks onto the end of any pre-existing subblocks.  */
1239               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1240                                                  subblocks);
1241             }
1242         }
1243       else
1244         {
1245           BLOCK_VARS (block) = decls;
1246           BLOCK_SUBBLOCKS (block) = subblocks;
1247         }
1248     }
1249
1250   /* In each subblock, record that this is its superior.  */
1251
1252   if (keep >= 0)
1253     for (link = subblocks; link; link = TREE_CHAIN (link))
1254       BLOCK_SUPERCONTEXT (link) = block;
1255
1256   /* We still support the old for-scope rules, whereby the variables
1257      in a for-init statement were in scope after the for-statement
1258      ended.  We only use the new rules in flag_new_for_scope is
1259      nonzero.  */
1260   leaving_for_scope 
1261     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1262
1263   /* Remove declarations for all the DECLs in this level.  */
1264   for (link = decls; link; link = TREE_CHAIN (link))
1265     {
1266       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1267         {
1268           tree outer_binding 
1269             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1270           tree ns_binding;
1271
1272           if (!outer_binding)
1273             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1274           else
1275             ns_binding = NULL_TREE;
1276
1277           if (outer_binding 
1278               && (BINDING_LEVEL (outer_binding) 
1279                   == current_binding_level->level_chain))
1280             /* We have something like:
1281                
1282                  int i;
1283                  for (int i; ;);
1284                  
1285                and we are leaving the `for' scope.  There's no reason to
1286                keep the binding of the inner `i' in this case.  */
1287             pop_binding (DECL_NAME (link), link);
1288           else if ((outer_binding 
1289                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1290                         == TYPE_DECL))
1291                    || (ns_binding 
1292                        && TREE_CODE (ns_binding) == TYPE_DECL))
1293             /* Here, we have something like:
1294
1295                  typedef int I;
1296
1297                  void f () {
1298                    for (int I; ;);
1299                  }
1300
1301                We must pop the for-scope binding so we know what's a
1302                type and what isn't.  */
1303             pop_binding (DECL_NAME (link), link);
1304           else
1305             {
1306               /* Mark this VAR_DECL as dead so that we can tell we left it
1307                  there only for backward compatibility.  */
1308               DECL_DEAD_FOR_LOCAL (link) = 1;
1309               
1310               /* Keep track of what should of have happenned when we
1311                  popped the binding.  */
1312               if (outer_binding && BINDING_VALUE (outer_binding))
1313                 DECL_SHADOWED_FOR_VAR (link) 
1314                   = BINDING_VALUE (outer_binding);
1315
1316               /* Add it to the list of dead variables in the next
1317                  outermost binding to that we can remove these when we
1318                  leave that binding.  */
1319               current_binding_level->level_chain->dead_vars_from_for
1320                 = tree_cons (NULL_TREE, link,
1321                              current_binding_level->level_chain->
1322                              dead_vars_from_for);
1323
1324               /* Although we don't pop the CPLUS_BINDING, we do clear
1325                  its BINDING_LEVEL since the level is going away now.  */
1326               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1327                 = 0;
1328             }
1329         }
1330       else 
1331         {
1332           /* Remove the binding.  */
1333           decl = link;
1334           if (TREE_CODE (decl) == TREE_LIST)
1335             decl = TREE_VALUE (decl);
1336           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1337             pop_binding (DECL_NAME (decl), decl);
1338           else if (TREE_CODE (decl) == OVERLOAD)
1339             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1340           else 
1341             my_friendly_abort (0);
1342         }
1343     }
1344
1345   /* Remove declarations for any `for' variables from inner scopes
1346      that we kept around.  */
1347   for (link = current_binding_level->dead_vars_from_for;
1348        link; link = TREE_CHAIN (link))
1349     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1350
1351   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1352   for (link = current_binding_level->type_shadowed;
1353        link; link = TREE_CHAIN (link))
1354     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1355
1356   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1357   for (link = current_binding_level->shadowed_labels;
1358        link; 
1359        link = TREE_CHAIN (link))
1360     pop_label (link);
1361
1362   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1363      list if a `using' declaration put them there.  The debugging
1364      back-ends won't understand OVERLOAD, so we remove them here.
1365      Because the BLOCK_VARS are (temporarily) shared with
1366      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1367      popped all the bindings.  */
1368   if (block)
1369     {
1370       tree* d;
1371
1372       for (d = &BLOCK_VARS (block); *d; )
1373         {
1374           if (TREE_CODE (*d) == TREE_LIST)
1375             *d = TREE_CHAIN (*d);
1376           else
1377             d = &TREE_CHAIN (*d);
1378         }
1379     }
1380
1381   /* If the level being exited is the top level of a function,
1382      check over all the labels.  */
1383   if (functionbody)
1384     {
1385       /* Since this is the top level block of a function, the vars are
1386          the function's parameters.  Don't leave them in the BLOCK
1387          because they are found in the FUNCTION_DECL instead.  */
1388       BLOCK_VARS (block) = 0;
1389       pop_labels (block);
1390     }
1391
1392   /* Any uses of undefined labels now operate under constraints
1393      of next binding contour.  */
1394   if (current_function)
1395     {
1396       struct binding_level *level_chain;
1397       level_chain = current_binding_level->level_chain;
1398       if (level_chain)
1399         {
1400           struct named_label_list *labels;
1401           for (labels = named_label_uses; labels; labels = labels->next)
1402             if (labels->binding_level == current_binding_level)
1403               {
1404                 labels->binding_level = level_chain;
1405                 labels->names_in_scope = level_chain->names;
1406               }
1407         }
1408     }
1409
1410   tmp = current_binding_level->keep;
1411
1412   pop_binding_level ();
1413   if (functionbody)
1414     DECL_INITIAL (current_function_decl) = block;
1415   else if (block)
1416     {
1417       if (!block_previously_created)
1418         current_binding_level->blocks
1419           = chainon (current_binding_level->blocks, block);
1420     }
1421   /* If we did not make a block for the level just exited,
1422      any blocks made for inner levels
1423      (since they cannot be recorded as subblocks in that level)
1424      must be carried forward so they will later become subblocks
1425      of something else.  */
1426   else if (subblocks)
1427     current_binding_level->blocks
1428       = chainon (current_binding_level->blocks, subblocks);
1429
1430   /* Take care of compiler's internal binding structures.  */
1431   if (tmp == 2)
1432     {
1433       add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1434       /* Each and every BLOCK node created here in `poplevel' is important
1435          (e.g. for proper debugging information) so if we created one
1436          earlier, mark it as "used".  */
1437       if (block)
1438         TREE_USED (block) = 1;
1439       block = poplevel (keep, reverse, functionbody);
1440     }
1441
1442   /* Each and every BLOCK node created here in `poplevel' is important
1443      (e.g. for proper debugging information) so if we created one
1444      earlier, mark it as "used".  */
1445   if (block)
1446     TREE_USED (block) = 1;
1447   return block;
1448 }
1449
1450 /* Delete the node BLOCK from the current binding level.
1451    This is used for the block inside a stmt expr ({...})
1452    so that the block can be reinserted where appropriate.  */
1453
1454 void
1455 delete_block (block)
1456      tree block;
1457 {
1458   tree t;
1459   if (current_binding_level->blocks == block)
1460     current_binding_level->blocks = TREE_CHAIN (block);
1461   for (t = current_binding_level->blocks; t;)
1462     {
1463       if (TREE_CHAIN (t) == block)
1464         TREE_CHAIN (t) = TREE_CHAIN (block);
1465       else
1466         t = TREE_CHAIN (t);
1467     }
1468   TREE_CHAIN (block) = NULL_TREE;
1469   /* Clear TREE_USED which is always set by poplevel.
1470      The flag is set again if insert_block is called.  */
1471   TREE_USED (block) = 0;
1472 }
1473
1474 /* Insert BLOCK at the end of the list of subblocks of the
1475    current binding level.  This is used when a BIND_EXPR is expanded,
1476    to handle the BLOCK node inside the BIND_EXPR.  */
1477
1478 void
1479 insert_block (block)
1480      tree block;
1481 {
1482   TREE_USED (block) = 1;
1483   current_binding_level->blocks
1484     = chainon (current_binding_level->blocks, block);
1485 }
1486
1487 /* Set the BLOCK node for the innermost scope
1488    (the one we are currently in).  */
1489
1490 void
1491 set_block (block)
1492     register tree block;
1493 {
1494   current_binding_level->this_block = block;
1495 }
1496
1497 /* Do a pushlevel for class declarations.  */
1498
1499 void
1500 pushlevel_class ()
1501 {
1502   register struct binding_level *newlevel;
1503
1504   /* Reuse or create a struct for this binding level.  */
1505 #if defined(DEBUG_CP_BINDING_LEVELS)
1506   if (0)
1507 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1508   if (free_binding_level)
1509 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1510     {
1511       newlevel = free_binding_level;
1512       free_binding_level = free_binding_level->level_chain;
1513     }
1514   else
1515     newlevel = make_binding_level ();
1516
1517 #if defined(DEBUG_CP_BINDING_LEVELS)
1518   is_class_level = 1;
1519 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1520
1521   push_binding_level (newlevel, 0, 0);
1522
1523   class_binding_level = current_binding_level;
1524   class_binding_level->parm_flag = 2;
1525 }
1526
1527 /* ...and a poplevel for class declarations.  */
1528
1529 void
1530 poplevel_class ()
1531 {
1532   register struct binding_level *level = class_binding_level;
1533   tree shadowed;
1534
1535   my_friendly_assert (level != 0, 354);
1536   
1537   /* If we're leaving a toplevel class, don't bother to do the setting
1538      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1539      shouldn't even be used when current_class_type isn't set, and second,
1540      if we don't touch it here, we're able to use the cache effect if the
1541      next time we're entering a class scope, it is the same class.  */
1542   if (current_class_depth != 1)
1543     {
1544       struct binding_level* b;
1545
1546       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1547       for (shadowed = level->class_shadowed;
1548            shadowed;
1549            shadowed = TREE_CHAIN (shadowed))
1550         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1551         
1552       /* Find the next enclosing class, and recreate
1553          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1554       b = level->level_chain;
1555       while (b && b->parm_flag != 2)
1556         b = b->level_chain;
1557
1558       if (b)
1559         for (shadowed = b->class_shadowed; 
1560              shadowed; 
1561              shadowed = TREE_CHAIN (shadowed))
1562           {
1563             tree t;
1564
1565             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1566             while (t && BINDING_LEVEL (t) != b)
1567               t = TREE_CHAIN (t);
1568       
1569             if (t)
1570               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1571                 = BINDING_VALUE (t);
1572           }
1573     }
1574   else
1575     /* Remember to save what IDENTIFIER's were bound in this scope so we
1576        can recover from cache misses.  */
1577     {
1578       previous_class_type = current_class_type;
1579       previous_class_values = class_binding_level->class_shadowed;
1580     }
1581   for (shadowed = level->type_shadowed;
1582        shadowed;
1583        shadowed = TREE_CHAIN (shadowed))
1584     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1585
1586   /* Remove the bindings for all of the class-level declarations.  */
1587   for (shadowed = level->class_shadowed; 
1588        shadowed; 
1589        shadowed = TREE_CHAIN (shadowed))
1590     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1591
1592   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1593                       (HOST_WIDE_INT) class_binding_level->level_chain,
1594                       class_binding_level->parm_flag,
1595                       class_binding_level->keep);
1596
1597   /* Now, pop out of the binding level which we created up in the
1598      `pushlevel_class' routine.  */
1599 #if defined(DEBUG_CP_BINDING_LEVELS)
1600   is_class_level = 1;
1601 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1602
1603   pop_binding_level ();
1604 }
1605
1606 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1607    for any names in enclosing classes.  */
1608
1609 void
1610 clear_identifier_class_values ()
1611 {
1612   tree t;
1613
1614   if (!class_binding_level)
1615     return;
1616
1617   for (t = class_binding_level->class_shadowed;
1618        t;
1619        t = TREE_CHAIN (t))
1620     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1621 }
1622
1623 /* Returns non-zero if T is a virtual function table.  */
1624
1625 int
1626 vtable_decl_p (t, data)
1627      tree t;
1628      void *data ATTRIBUTE_UNUSED;
1629 {
1630   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1631 }
1632
1633 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1634    functions.  */
1635
1636 int
1637 vtype_decl_p (t, data)
1638      tree t;
1639      void *data ATTRIBUTE_UNUSED;
1640 {
1641   return (TREE_CODE (t) == TYPE_DECL
1642           && TREE_TYPE (t) != error_mark_node
1643           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1644           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1645 }
1646
1647 /* Return the declarations that are members of the namespace NS.  */
1648
1649 tree
1650 cp_namespace_decls (ns)
1651      tree ns;
1652 {
1653   return NAMESPACE_LEVEL (ns)->names;
1654 }
1655
1656 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1657    itself, calling F for each.  The DATA is passed to F as well.  */
1658
1659 static int
1660 walk_namespaces_r (namespace, f, data)
1661      tree namespace;
1662      walk_namespaces_fn f;
1663      void *data;
1664 {
1665   tree current;
1666   int result = 0;
1667
1668   result |= (*f) (namespace, data);
1669
1670   for (current = cp_namespace_decls (namespace);
1671        current;
1672        current = TREE_CHAIN (current))
1673     {
1674       if (TREE_CODE (current) != NAMESPACE_DECL
1675           || DECL_NAMESPACE_ALIAS (current))
1676         continue;
1677       if (!DECL_LANG_SPECIFIC (current))
1678         {
1679           /* Hmm. std. */
1680           my_friendly_assert (current == std_node, 393);
1681           continue;
1682         }
1683
1684       /* We found a namespace.  */
1685       result |= walk_namespaces_r (current, f, data);
1686     }
1687
1688   return result;
1689 }
1690
1691 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1692    F as well.  */
1693
1694 int
1695 walk_namespaces (f, data)
1696      walk_namespaces_fn f;
1697      void *data;
1698 {
1699   return walk_namespaces_r (global_namespace, f, data);
1700 }
1701
1702 struct walk_globals_data {
1703   walk_globals_pred p;
1704   walk_globals_fn f;
1705   void *data;
1706 };
1707
1708 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1709    for which P returns non-zero, call F with its address.  If any call
1710    to F returns a non-zero value, return a non-zero value.  */
1711
1712 static int 
1713 walk_globals_r (namespace, data)
1714      tree namespace;
1715      void *data;
1716 {
1717   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1718   walk_globals_pred p = wgd->p;
1719   walk_globals_fn f = wgd->f;
1720   void *d = wgd->data;
1721   tree *t;
1722   int result = 0;
1723
1724   t = &NAMESPACE_LEVEL (namespace)->names;
1725
1726   while (*t)
1727     {
1728       tree glbl = *t;
1729
1730       if ((*p) (glbl, d))
1731         result |= (*f) (t, d);
1732
1733       /* If F changed *T, then *T still points at the next item to
1734          examine.  */
1735       if (*t == glbl)
1736         t = &TREE_CHAIN (*t);
1737     }
1738
1739   return result;
1740 }
1741
1742 /* Walk the global declarations.  Whenever one is found for which P
1743    returns non-zero, call F with its address.  If any call to F
1744    returns a non-zero value, return a non-zero value.  */
1745
1746 int
1747 walk_globals (p, f, data)
1748      walk_globals_pred p;
1749      walk_globals_fn f;
1750      void *data;
1751 {
1752   struct walk_globals_data wgd;
1753   wgd.p = p;
1754   wgd.f = f;
1755   wgd.data = data;
1756
1757   return walk_namespaces (walk_globals_r, &wgd);
1758 }
1759
1760 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1761    DATA is non-NULL, this is the last time we will call
1762    wrapup_global_declarations for this NAMESPACE.  */
1763
1764 int
1765 wrapup_globals_for_namespace (namespace, data)
1766      tree namespace;
1767      void *data;
1768 {
1769   tree globals = cp_namespace_decls (namespace);
1770   int len = list_length (globals);
1771   tree *vec = (tree *) alloca (sizeof (tree) * len);
1772   int i;
1773   int result;
1774   tree decl;
1775   int last_time = (data != 0);
1776
1777   if (last_time && namespace == global_namespace)
1778     /* Let compile_file handle the global namespace.  */
1779     return 0;
1780
1781   /* Process the decls in reverse order--earliest first.
1782      Put them into VEC from back to front, then take out from front.  */
1783   
1784   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1785     vec[len - i - 1] = decl;
1786   
1787   if (last_time)
1788     {
1789       check_global_declarations (vec, len);
1790       return 0;
1791     }
1792
1793   /* Temporarily mark vtables as external.  That prevents
1794      wrapup_global_declarations from writing them out; we must process
1795      them ourselves in finish_vtable_vardecl.  */
1796   for (i = 0; i < len; ++i)
1797     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1798       {
1799         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1800         DECL_EXTERNAL (vec[i]) = 1;
1801       }
1802
1803   /* Write out any globals that need to be output.  */
1804   result = wrapup_global_declarations (vec, len);
1805
1806   /* Undo the hack to DECL_EXTERNAL above.  */
1807   for (i = 0; i < len; ++i)
1808     if (vtable_decl_p (vec[i], /*data=*/0)
1809         && DECL_NOT_REALLY_EXTERN (vec[i]))
1810       {
1811         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1812         DECL_EXTERNAL (vec[i]) = 0;
1813       }
1814
1815   return result;
1816 }
1817
1818 \f
1819 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1820
1821 static void
1822 mark_binding_level (arg)
1823      void *arg;
1824 {
1825   struct binding_level *lvl = *(struct binding_level **)arg;
1826
1827   while (lvl)
1828     {
1829       ggc_mark_tree (lvl->names);
1830       ggc_mark_tree (lvl->tags);
1831       ggc_mark_tree (lvl->usings);
1832       ggc_mark_tree (lvl->using_directives);
1833       ggc_mark_tree (lvl->class_shadowed);
1834       ggc_mark_tree (lvl->type_shadowed);
1835       ggc_mark_tree (lvl->shadowed_labels);
1836       ggc_mark_tree (lvl->blocks);
1837       ggc_mark_tree (lvl->this_block);
1838       ggc_mark_tree (lvl->incomplete);
1839       ggc_mark_tree (lvl->dead_vars_from_for);
1840
1841       lvl = lvl->level_chain;
1842     }
1843 }
1844 \f
1845 /* For debugging.  */
1846 static int no_print_functions = 0;
1847 static int no_print_builtins = 0;
1848
1849 void
1850 print_binding_level (lvl)
1851      struct binding_level *lvl;
1852 {
1853   tree t;
1854   int i = 0, len;
1855   fprintf (stderr, " blocks=");
1856   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1857   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1858            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1859   if (lvl->tag_transparent)
1860     fprintf (stderr, " tag-transparent");
1861   if (lvl->more_cleanups_ok)
1862     fprintf (stderr, " more-cleanups-ok");
1863   if (lvl->have_cleanups)
1864     fprintf (stderr, " have-cleanups");
1865   fprintf (stderr, "\n");
1866   if (lvl->names)
1867     {
1868       fprintf (stderr, " names:\t");
1869       /* We can probably fit 3 names to a line?  */
1870       for (t = lvl->names; t; t = TREE_CHAIN (t))
1871         {
1872           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1873             continue;
1874           if (no_print_builtins
1875               && (TREE_CODE (t) == TYPE_DECL)
1876               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1877             continue;
1878
1879           /* Function decls tend to have longer names.  */
1880           if (TREE_CODE (t) == FUNCTION_DECL)
1881             len = 3;
1882           else
1883             len = 2;
1884           i += len;
1885           if (i > 6)
1886             {
1887               fprintf (stderr, "\n\t");
1888               i = len;
1889             }
1890           print_node_brief (stderr, "", t, 0);
1891           if (t == error_mark_node)
1892             break;
1893         }
1894       if (i)
1895         fprintf (stderr, "\n");
1896     }
1897   if (lvl->tags)
1898     {
1899       fprintf (stderr, " tags:\t");
1900       i = 0;
1901       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1902         {
1903           if (TREE_PURPOSE (t) == NULL_TREE)
1904             len = 3;
1905           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1906             len = 2;
1907           else
1908             len = 4;
1909           i += len;
1910           if (i > 5)
1911             {
1912               fprintf (stderr, "\n\t");
1913               i = len;
1914             }
1915           if (TREE_PURPOSE (t) == NULL_TREE)
1916             {
1917               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1918               fprintf (stderr, ">");
1919             }
1920           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1921             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1922           else
1923             {
1924               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1925               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1926               fprintf (stderr, ">");
1927             }
1928         }
1929       if (i)
1930         fprintf (stderr, "\n");
1931     }
1932   if (lvl->class_shadowed)
1933     {
1934       fprintf (stderr, " class-shadowed:");
1935       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1936         {
1937           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1938         }
1939       fprintf (stderr, "\n");
1940     }
1941   if (lvl->type_shadowed)
1942     {
1943       fprintf (stderr, " type-shadowed:");
1944       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1945         {
1946           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1947         }
1948       fprintf (stderr, "\n");
1949     }
1950 }
1951
1952 void
1953 print_other_binding_stack (stack)
1954      struct binding_level *stack;
1955 {
1956   struct binding_level *level;
1957   for (level = stack; level != global_binding_level; level = level->level_chain)
1958     {
1959       fprintf (stderr, "binding level ");
1960       fprintf (stderr, HOST_PTR_PRINTF, level);
1961       fprintf (stderr, "\n");
1962       print_binding_level (level);
1963     }
1964 }
1965
1966 void
1967 print_binding_stack ()
1968 {
1969   struct binding_level *b;
1970   fprintf (stderr, "current_binding_level=");
1971   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1972   fprintf (stderr, "\nclass_binding_level=");
1973   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1974   fprintf (stderr, "\nglobal_binding_level=");
1975   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1976   fprintf (stderr, "\n");
1977   if (class_binding_level)
1978     {
1979       for (b = class_binding_level; b; b = b->level_chain)
1980         if (b == current_binding_level)
1981           break;
1982       if (b)
1983         b = class_binding_level;
1984       else
1985         b = current_binding_level;
1986     }
1987   else
1988     b = current_binding_level;
1989   print_other_binding_stack (b);
1990   fprintf (stderr, "global:\n");
1991   print_binding_level (global_binding_level);
1992 }
1993
1994 /* Namespace binding access routines: The namespace_bindings field of
1995    the identifier is polymorphic, with three possible values:
1996    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1997    indicating the BINDING_VALUE of global_namespace. */
1998
1999 /* Check whether the a binding for the name to scope is known.
2000    Assumes that the bindings of the name are already a list
2001    of bindings. Returns the binding found, or NULL_TREE. */
2002
2003 static tree
2004 find_binding (name, scope)
2005      tree name;
2006      tree scope;
2007 {
2008   tree iter, prev = NULL_TREE;
2009
2010   scope = ORIGINAL_NAMESPACE (scope);
2011   
2012   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2013        iter = TREE_CHAIN (iter))
2014     {
2015       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2016       if (BINDING_SCOPE (iter) == scope)
2017         {
2018           /* Move binding found to the front of the list, so
2019              subsequent lookups will find it faster. */
2020           if (prev)
2021             {
2022               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2023               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2024               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2025             }
2026           return iter;
2027         }
2028       prev = iter;
2029     }
2030   return NULL_TREE;
2031 }
2032
2033 /* Always returns a binding for name in scope. If the
2034    namespace_bindings is not a list, convert it to one first.
2035    If no binding is found, make a new one. */
2036
2037 tree
2038 binding_for_name (name, scope)
2039      tree name;
2040      tree scope;
2041 {
2042   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2043   tree result;
2044
2045   scope = ORIGINAL_NAMESPACE (scope);
2046   
2047   if (b && TREE_CODE (b) != CPLUS_BINDING)
2048     {
2049       /* Get rid of optimization for global scope. */
2050       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2051       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2052       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2053     }
2054   if (b && (result = find_binding (name, scope)))
2055     return result;
2056   /* Not found, make a new permanent one. */
2057   push_obstacks (&permanent_obstack, &permanent_obstack);
2058   result = make_node (CPLUS_BINDING);
2059   TREE_CHAIN (result) = b;
2060   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2061   BINDING_SCOPE (result) = scope;
2062   BINDING_TYPE (result) = NULL_TREE;
2063   BINDING_VALUE (result) = NULL_TREE;
2064   pop_obstacks ();
2065   return result;
2066 }
2067
2068 /* Return the binding value for name in scope, considering that
2069    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2070
2071 tree
2072 namespace_binding (name, scope)
2073      tree name;
2074      tree scope;
2075 {
2076   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2077   if (b == NULL_TREE)
2078     return NULL_TREE;
2079   if (scope == NULL_TREE)
2080     scope = global_namespace;
2081   if (TREE_CODE (b) != CPLUS_BINDING)
2082     return (scope == global_namespace) ? b : NULL_TREE;
2083   name = find_binding (name,scope);
2084   if (name == NULL_TREE)
2085     return name;
2086   return BINDING_VALUE (name);
2087 }
2088
2089 /* Set the binding value for name in scope. If modifying the binding
2090    of global_namespace is attempted, try to optimize it. */
2091
2092 void
2093 set_namespace_binding (name, scope, val)
2094      tree name;
2095      tree scope;
2096      tree val;
2097 {
2098   tree b;
2099
2100   if (scope == NULL_TREE)
2101     scope = global_namespace;
2102   
2103   if (scope == global_namespace)
2104     {
2105       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2106       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2107         {
2108           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2109           return;
2110         }
2111     }
2112   b = binding_for_name (name, scope);
2113   BINDING_VALUE (b) = val;
2114 }
2115
2116 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2117    select a name that is unique to this compilation unit.  */
2118
2119 void
2120 push_namespace (name)
2121      tree name;
2122 {
2123   tree d = NULL_TREE;
2124   int need_new = 1;
2125   int implicit_use = 0;
2126   int global = 0;
2127   if (!global_namespace)
2128     {
2129       /* This must be ::. */
2130       my_friendly_assert (name == get_identifier ("::"), 377);
2131       global = 1;
2132     }
2133   else if (!name)
2134     {
2135       /* The name of anonymous namespace is unique for the translation
2136          unit.  */
2137       if (!anonymous_namespace_name)
2138         anonymous_namespace_name = get_file_function_name ('N');
2139       name = anonymous_namespace_name;
2140       d = IDENTIFIER_NAMESPACE_VALUE (name);
2141       if (d)
2142         /* Reopening anonymous namespace.  */
2143         need_new = 0;
2144       implicit_use = 1;
2145     }
2146   else if (current_namespace == global_namespace
2147            && name == DECL_NAME (std_node))
2148     {
2149       in_std++;
2150       return;
2151     }
2152   else
2153     {
2154       /* Check whether this is an extended namespace definition. */
2155       d = IDENTIFIER_NAMESPACE_VALUE (name);
2156       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2157         {
2158           need_new = 0;
2159           if (DECL_NAMESPACE_ALIAS (d))
2160             {
2161               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2162                         d, DECL_NAMESPACE_ALIAS (d));
2163               d = DECL_NAMESPACE_ALIAS (d);
2164             }
2165         }
2166     }
2167   
2168   if (need_new)
2169     {
2170       /* Make a new namespace, binding the name to it. */
2171       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2172       /* The global namespace is not pushed, and the global binding
2173          level is set elsewhere.  */
2174       if (!global)
2175         {
2176           d = pushdecl (d);
2177           pushlevel (0);
2178           declare_namespace_level ();
2179           NAMESPACE_LEVEL (d) = current_binding_level;
2180         }
2181     }
2182   else
2183     resume_binding_level (NAMESPACE_LEVEL (d));
2184
2185   if (implicit_use)
2186     do_using_directive (d);
2187   /* Enter the name space. */
2188   current_namespace = d;
2189 }
2190
2191 /* Pop from the scope of the current namespace.  */
2192
2193 void
2194 pop_namespace ()
2195 {
2196   if (current_namespace == global_namespace)
2197     {
2198       my_friendly_assert (in_std>0, 980421);
2199       in_std--;
2200       return;
2201     }
2202   current_namespace = CP_DECL_CONTEXT (current_namespace);
2203   /* The binding level is not popped, as it might be re-opened later.  */
2204   suspend_binding_level ();
2205 }
2206
2207 /* Push into the scope of the namespace NS, even if it is deeply
2208    nested within another namespace.  */
2209
2210 void
2211 push_nested_namespace (ns)
2212      tree ns;
2213 {
2214   if (ns == global_namespace)
2215     push_to_top_level ();
2216   else
2217     {
2218       push_nested_namespace (CP_DECL_CONTEXT (ns));
2219       push_namespace (DECL_NAME (ns));
2220     }
2221 }
2222
2223 /* Pop back from the scope of the namespace NS, which was previously
2224    entered with push_nested_namespace.  */
2225      
2226 void
2227 pop_nested_namespace (ns)
2228      tree ns;
2229 {
2230   while (ns != global_namespace)
2231     {
2232       pop_namespace ();
2233       ns = CP_DECL_CONTEXT (ns);
2234     }
2235
2236   pop_from_top_level ();
2237 }
2238
2239 \f
2240 /* Subroutines for reverting temporarily to top-level for instantiation
2241    of templates and such.  We actually need to clear out the class- and
2242    local-value slots of all identifiers, so that only the global values
2243    are at all visible.  Simply setting current_binding_level to the global
2244    scope isn't enough, because more binding levels may be pushed.  */
2245 struct saved_scope *scope_chain;
2246
2247 /* Mark ST for GC.  */
2248
2249 static void
2250 mark_stmt_tree (st)
2251      struct stmt_tree *st;
2252 {
2253   ggc_mark_tree (st->x_last_stmt);
2254   ggc_mark_tree (st->x_last_expr_type);
2255 }
2256
2257 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2258
2259 static void
2260 mark_saved_scope (arg)
2261      void *arg;
2262 {
2263   struct saved_scope *t = *(struct saved_scope **)arg;
2264   while (t)
2265     {
2266       mark_binding_level (&t->class_bindings);
2267       ggc_mark_tree (t->old_bindings);
2268       ggc_mark_tree (t->old_namespace);
2269       ggc_mark_tree (t->class_name);
2270       ggc_mark_tree (t->class_type);
2271       ggc_mark_tree (t->access_specifier);
2272       ggc_mark_tree (t->function_decl);
2273       if (t->lang_base)
2274         ggc_mark_tree_varray (t->lang_base);
2275       ggc_mark_tree (t->lang_name);
2276       ggc_mark_tree (t->x_function_parms);
2277       ggc_mark_tree (t->template_parms);
2278       ggc_mark_tree (t->x_previous_class_type);
2279       ggc_mark_tree (t->x_previous_class_values);
2280       ggc_mark_tree (t->x_saved_tree);
2281
2282       mark_stmt_tree (&t->x_stmt_tree);
2283       mark_binding_level (&t->bindings);
2284       t = t->prev;
2285     }
2286 }
2287
2288 static tree
2289 store_bindings (names, old_bindings)
2290      tree names, old_bindings;
2291 {
2292   tree t;
2293   for (t = names; t; t = TREE_CHAIN (t))
2294     {
2295       tree binding, t1, id;
2296
2297       if (TREE_CODE (t) == TREE_LIST)
2298         id = TREE_PURPOSE (t);
2299       else
2300         id = DECL_NAME (t);
2301
2302       if (!id 
2303           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2304              we have no IDENTIFIER_BINDING if we have left the class
2305              scope, but cached the class-level declarations.  */
2306           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2307         continue;
2308
2309       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2310         if (TREE_VEC_ELT (t1, 0) == id)
2311           goto skip_it;
2312
2313       binding = make_tree_vec (4);
2314
2315       if (id)
2316         {
2317           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2318           TREE_VEC_ELT (binding, 0) = id;
2319           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2320           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2321           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2322           IDENTIFIER_BINDING (id) = NULL_TREE;
2323           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2324         }
2325       TREE_CHAIN (binding) = old_bindings;
2326       old_bindings = binding;
2327     skip_it:
2328       ;
2329     }
2330   return old_bindings;
2331 }
2332
2333 void
2334 maybe_push_to_top_level (pseudo)
2335      int pseudo;
2336 {
2337   struct saved_scope *s;
2338   struct binding_level *b;
2339   tree old_bindings;
2340   int need_pop;
2341
2342   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2343
2344   b = scope_chain ? current_binding_level : 0;
2345
2346   /* If we're in the middle of some function, save our state.  */
2347   if (current_function)
2348     {
2349       need_pop = 1;
2350       push_function_context_to (NULL_TREE);
2351     }
2352   else
2353     need_pop = 0;
2354
2355   old_bindings = NULL_TREE;
2356   if (scope_chain && previous_class_type)
2357     old_bindings = store_bindings (previous_class_values, old_bindings);
2358
2359   /* Have to include global_binding_level, because class-level decls
2360      aren't listed anywhere useful.  */
2361   for (; b; b = b->level_chain)
2362     {
2363       tree t;
2364
2365       /* Template IDs are inserted into the global level. If they were
2366          inserted into namespace level, finish_file wouldn't find them
2367          when doing pending instantiations. Therefore, don't stop at
2368          namespace level, but continue until :: .  */
2369       if (b == global_binding_level || (pseudo && b->pseudo_global))
2370         break;
2371
2372       old_bindings = store_bindings (b->names, old_bindings);
2373       /* We also need to check class_shadowed to save class-level type
2374          bindings, since pushclass doesn't fill in b->names.  */
2375       if (b->parm_flag == 2)
2376         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2377
2378       /* Unwind type-value slots back to top level.  */
2379       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2380         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2381     }
2382   s->prev = scope_chain;
2383   s->old_bindings = old_bindings;
2384   s->bindings = b;
2385   s->need_pop_function_context = need_pop;
2386   s->function_decl = current_function_decl;
2387
2388   scope_chain = s;
2389   current_function_decl = NULL_TREE;
2390   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2391   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2392   current_lang_name = lang_name_cplusplus;
2393   strict_prototype = strict_prototypes_lang_cplusplus;
2394   current_namespace = global_namespace;
2395
2396   push_obstacks (&permanent_obstack, &permanent_obstack);
2397 }
2398
2399 void
2400 push_to_top_level ()
2401 {
2402   maybe_push_to_top_level (0);
2403 }
2404
2405 void
2406 pop_from_top_level ()
2407 {
2408   struct saved_scope *s = scope_chain;
2409   tree t;
2410
2411   /* Clear out class-level bindings cache.  */
2412   if (previous_class_type)
2413     invalidate_class_lookup_cache ();
2414
2415   pop_obstacks ();
2416
2417   VARRAY_FREE (current_lang_base);
2418
2419   scope_chain = s->prev;
2420   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2421     {
2422       tree id = TREE_VEC_ELT (t, 0);
2423       if (id)
2424         {
2425           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2426           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2427           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2428         }
2429     }
2430
2431   if (current_lang_name == lang_name_cplusplus)
2432     strict_prototype = strict_prototypes_lang_cplusplus;
2433   else if (current_lang_name == lang_name_c)
2434     strict_prototype = strict_prototypes_lang_c;
2435
2436   /* If we were in the middle of compiling a function, restore our
2437      state.  */
2438   if (s->need_pop_function_context)
2439     pop_function_context_from (NULL_TREE);
2440   current_function_decl = s->function_decl;
2441
2442   free (s);
2443 }
2444 \f
2445 /* Push a definition of struct, union or enum tag "name".
2446    into binding_level "b".   "type" should be the type node, 
2447    We assume that the tag "name" is not already defined.
2448
2449    Note that the definition may really be just a forward reference.
2450    In that case, the TYPE_SIZE will be a NULL_TREE.
2451
2452    C++ gratuitously puts all these tags in the name space.  */
2453
2454 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2455    record the shadowed value for this binding contour.  TYPE is
2456    the type that ID maps to.  */
2457
2458 static void
2459 set_identifier_type_value_with_scope (id, type, b)
2460      tree id;
2461      tree type;
2462      struct binding_level *b;
2463 {
2464   if (!b->namespace_p)
2465     {
2466       /* Shadow the marker, not the real thing, so that the marker
2467          gets restored later. */
2468       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2469       b->type_shadowed
2470         = tree_cons (id, old_type_value, b->type_shadowed);
2471     }
2472   else
2473     {
2474       tree binding = binding_for_name (id, current_namespace);
2475       BINDING_TYPE (binding) = type;
2476       /* Store marker instead of real type. */
2477       type = global_type_node;
2478     }
2479   SET_IDENTIFIER_TYPE_VALUE (id, type);
2480 }
2481
2482 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2483
2484 void
2485 set_identifier_type_value (id, type)
2486      tree id;
2487      tree type;
2488 {
2489   set_identifier_type_value_with_scope (id, type, current_binding_level);
2490 }
2491
2492 /* Return the type associated with id. */
2493
2494 tree
2495 identifier_type_value (id)
2496      tree id;
2497 {
2498   /* There is no type with that name, anywhere. */
2499   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2500     return NULL_TREE;
2501   /* This is not the type marker, but the real thing. */
2502   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2503     return REAL_IDENTIFIER_TYPE_VALUE (id);
2504   /* Have to search for it. It must be on the global level, now.
2505      Ask lookup_name not to return non-types. */
2506   id = lookup_name_real (id, 2, 1, 0);
2507   if (id)
2508     return TREE_TYPE (id);
2509   return NULL_TREE;
2510 }
2511
2512 /* Pop off extraneous binding levels left over due to syntax errors.
2513
2514    We don't pop past namespaces, as they might be valid.  */
2515
2516 void
2517 pop_everything ()
2518 {
2519 #ifdef DEBUG_CP_BINDING_LEVELS
2520   fprintf (stderr, "XXX entering pop_everything ()\n");
2521 #endif
2522   while (!toplevel_bindings_p ())
2523     {
2524       if (current_binding_level->parm_flag == 2)
2525         pop_nested_class ();
2526       else
2527         poplevel (0, 0, 0);
2528     }
2529 #ifdef DEBUG_CP_BINDING_LEVELS
2530   fprintf (stderr, "XXX leaving pop_everything ()\n");
2531 #endif
2532 }
2533
2534 /* The type TYPE is being declared.  If it is a class template, or a
2535    specialization of a class template, do any processing required and
2536    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2537    being declared a friend.  B is the binding level at which this TYPE
2538    should be bound.
2539
2540    Returns the TYPE_DECL for TYPE, which may have been altered by this
2541    processing.  */
2542
2543 static tree 
2544 maybe_process_template_type_declaration (type, globalize, b)
2545      tree type;
2546      int globalize;
2547      struct binding_level* b;
2548 {
2549   tree decl = TYPE_NAME (type);
2550  
2551   if (processing_template_parmlist)
2552     /* You can't declare a new template type in a template parameter
2553        list.  But, you can declare a non-template type:
2554        
2555          template <class A*> struct S;
2556        
2557        is a forward-declaration of `A'.  */
2558     ;
2559   else 
2560     {
2561       maybe_check_template_type (type);
2562
2563       my_friendly_assert (IS_AGGR_TYPE (type) 
2564                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2565                           
2566                           
2567       if (processing_template_decl)
2568         {
2569           /* This may change after the call to
2570              push_template_decl_real, but we want the original value.  */
2571           tree name = DECL_NAME (decl);
2572
2573           decl = push_template_decl_real (decl, globalize);
2574           /* If the current binding level is the binding level for the
2575              template parameters (see the comment in
2576              begin_template_parm_list) and the enclosing level is a class
2577              scope, and we're not looking at a friend, push the
2578              declaration of the member class into the class scope.  In the
2579              friend case, push_template_decl will already have put the
2580              friend into global scope, if appropriate.  */
2581           if (TREE_CODE (type) != ENUMERAL_TYPE
2582               && !globalize && b->pseudo_global
2583               && b->level_chain->parm_flag == 2)
2584             {
2585               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2586               /* Put this tag on the list of tags for the class, since
2587                  that won't happen below because B is not the class
2588                  binding level, but is instead the pseudo-global level.  */
2589               b->level_chain->tags = 
2590                 tree_cons (name, type, b->level_chain->tags);
2591               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2592                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2593             }
2594         }
2595     }
2596
2597   return decl;
2598 }
2599
2600 /* In C++, you don't have to write `struct S' to refer to `S'; you
2601    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2602    if the user had written `typedef struct S S'.  Create and return
2603    the TYPE_DECL for TYPE.  */
2604
2605 tree
2606 create_implicit_typedef (name, type)
2607      tree name;
2608      tree type;
2609 {
2610   tree decl;
2611
2612   decl = build_decl (TYPE_DECL, name, type);
2613   SET_DECL_ARTIFICIAL (decl);
2614   /* There are other implicit type declarations, like the one *within*
2615      a class that allows you to write `S::S'.  We must distinguish
2616      amongst these.  */
2617   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2618   TYPE_NAME (type) = decl;
2619
2620   return decl;
2621 }
2622
2623 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2624    Normally put it into the inner-most non-tag-transparent scope,
2625    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2626    The latter is needed for implicit declarations.  */
2627
2628 void
2629 pushtag (name, type, globalize)
2630      tree name, type;
2631      int globalize;
2632 {
2633   register struct binding_level *b;
2634
2635   b = current_binding_level;
2636   while (b->tag_transparent
2637          || (globalize && b->parm_flag == 2))
2638     b = b->level_chain;
2639
2640   b->tags = tree_cons (name, type, b->tags);
2641
2642   if (name)
2643     {
2644       /* Do C++ gratuitous typedefing.  */
2645       if (IDENTIFIER_TYPE_VALUE (name) != type)
2646         {
2647           register tree d = NULL_TREE;
2648           int in_class = 0;
2649           tree context = TYPE_CONTEXT (type);
2650
2651           if (! context)
2652             {
2653               tree cs = current_scope ();
2654
2655               if (! globalize)
2656                 context = cs;
2657               else if (cs != NULL_TREE 
2658                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2659                 /* When declaring a friend class of a local class, we want
2660                    to inject the newly named class into the scope
2661                    containing the local class, not the namespace scope.  */
2662                 context = hack_decl_function_context (get_type_decl (cs));
2663             }
2664           if (!context)
2665             context = current_namespace;
2666
2667           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2668               || b->parm_flag == 2)
2669             in_class = 1;
2670
2671           if (current_lang_name == lang_name_java)
2672             TYPE_FOR_JAVA (type) = 1;
2673
2674           d = create_implicit_typedef (name, type);
2675           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2676           if (! in_class)
2677             set_identifier_type_value_with_scope (name, type, b);
2678
2679           d = maybe_process_template_type_declaration (type,
2680                                                        globalize, b);
2681
2682           if (b->parm_flag == 2)
2683             {
2684               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2685                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2686                    class.  But if it's a member template class, we
2687                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2688                    is done later.  */
2689                 finish_member_declaration (d);
2690               else
2691                 pushdecl_class_level (d);
2692             }
2693           else
2694             d = pushdecl_with_scope (d, b);
2695
2696           if (ANON_AGGRNAME_P (name))
2697             DECL_IGNORED_P (d) = 1;
2698
2699           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2700           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2701           if (!uses_template_parms (type))
2702             DECL_ASSEMBLER_NAME (d)
2703               = get_identifier (build_overload_name (type, 1, 1));
2704         }
2705       if (b->parm_flag == 2)
2706         {
2707           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2708             CLASSTYPE_TAGS (current_class_type) = b->tags;
2709         }
2710     }
2711
2712   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2713     /* Use the canonical TYPE_DECL for this node.  */
2714     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2715   else
2716     {
2717       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2718          will be the tagged type we just added to the current
2719          binding level.  This fake NULL-named TYPE_DECL node helps
2720          dwarfout.c to know when it needs to output a
2721          representation of a tagged type, and it also gives us a
2722          convenient place to record the "scope start" address for
2723          the tagged type.  */
2724
2725       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2726       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2727     }
2728 }
2729
2730 /* Counter used to create anonymous type names.  */
2731
2732 static int anon_cnt = 0;
2733
2734 /* Return an IDENTIFIER which can be used as a name for
2735    anonymous structs and unions.  */
2736
2737 tree
2738 make_anon_name ()
2739 {
2740   char buf[32];
2741
2742   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2743   return get_identifier (buf);
2744 }
2745
2746 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2747    This keeps dbxout from getting confused.  */
2748
2749 void
2750 clear_anon_tags ()
2751 {
2752   register struct binding_level *b;
2753   register tree tags;
2754   static int last_cnt = 0;
2755
2756   /* Fast out if no new anon names were declared.  */
2757   if (last_cnt == anon_cnt)
2758     return;
2759
2760   b = current_binding_level;
2761   while (b->tag_transparent)
2762     b = b->level_chain;
2763   tags = b->tags;
2764   while (tags)
2765     {
2766       /* A NULL purpose means we have already processed all tags
2767          from here to the end of the list.  */
2768       if (TREE_PURPOSE (tags) == NULL_TREE)
2769         break;
2770       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2771         TREE_PURPOSE (tags) = NULL_TREE;
2772       tags = TREE_CHAIN (tags);
2773     }
2774   last_cnt = anon_cnt;
2775 }
2776 \f
2777 /* Subroutine of duplicate_decls: return truthvalue of whether
2778    or not types of these decls match.
2779
2780    For C++, we must compare the parameter list so that `int' can match
2781    `int&' in a parameter position, but `int&' is not confused with
2782    `const int&'.  */
2783
2784 int
2785 decls_match (newdecl, olddecl)
2786      tree newdecl, olddecl;
2787 {
2788   int types_match;
2789
2790   if (newdecl == olddecl)
2791     return 1;
2792
2793   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2794     /* If the two DECLs are not even the same kind of thing, we're not
2795        interested in their types.  */
2796     return 0;
2797
2798   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2799     {
2800       tree f1 = TREE_TYPE (newdecl);
2801       tree f2 = TREE_TYPE (olddecl);
2802       tree p1 = TYPE_ARG_TYPES (f1);
2803       tree p2 = TYPE_ARG_TYPES (f2);
2804
2805       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2806           && ! (DECL_LANGUAGE (newdecl) == lang_c
2807                 && DECL_LANGUAGE (olddecl) == lang_c))
2808         return 0;
2809
2810       /* When we parse a static member function definition,
2811          we put together a FUNCTION_DECL which thinks its type
2812          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2813          proceed.  */
2814       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2815         revert_static_member_fn (&newdecl, &f1, &p1);
2816       else if (TREE_CODE (f2) == METHOD_TYPE
2817                && DECL_STATIC_FUNCTION_P (newdecl))
2818         revert_static_member_fn (&olddecl, &f2, &p2);
2819
2820       /* Here we must take care of the case where new default
2821          parameters are specified.  Also, warn if an old
2822          declaration becomes ambiguous because default
2823          parameters may cause the two to be ambiguous.  */
2824       if (TREE_CODE (f1) != TREE_CODE (f2))
2825         {
2826           if (TREE_CODE (f1) == OFFSET_TYPE)
2827             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2828           else
2829             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2830           return 0;
2831         }
2832
2833       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2834         {
2835           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2836               && p2 == NULL_TREE)
2837             {
2838               types_match = self_promoting_args_p (p1);
2839               if (p1 == void_list_node)
2840                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2841             }
2842           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2843                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2844             {
2845               types_match = self_promoting_args_p (p2);
2846               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2847             }
2848           else
2849             types_match = compparms (p1, p2);
2850         }
2851       else
2852         types_match = 0;
2853     }
2854   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2855     {
2856       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2857                                 DECL_TEMPLATE_PARMS (olddecl)))
2858         return 0;
2859       
2860       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2861         types_match = 1;
2862       else
2863         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2864                                    DECL_TEMPLATE_RESULT (newdecl));
2865     }
2866   else
2867     {
2868       if (TREE_TYPE (newdecl) == error_mark_node)
2869         types_match = TREE_TYPE (olddecl) == error_mark_node;
2870       else if (TREE_TYPE (olddecl) == NULL_TREE)
2871         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2872       else if (TREE_TYPE (newdecl) == NULL_TREE)
2873         types_match = 0;
2874       else
2875         types_match = comptypes (TREE_TYPE (newdecl),
2876                                  TREE_TYPE (olddecl),
2877                                  COMPARE_REDECLARATION);
2878     }
2879
2880   return types_match;
2881 }
2882
2883 /* If NEWDECL is `static' and an `extern' was seen previously,
2884    warn about it.  OLDDECL is the previous declaration.
2885
2886    Note that this does not apply to the C++ case of declaring
2887    a variable `extern const' and then later `const'.
2888
2889    Don't complain about built-in functions, since they are beyond
2890    the user's control.  */
2891
2892 static void
2893 warn_extern_redeclared_static (newdecl, olddecl)
2894      tree newdecl, olddecl;
2895 {
2896   static const char *explicit_extern_static_warning
2897     = "`%D' was declared `extern' and later `static'";
2898   static const char *implicit_extern_static_warning
2899     = "`%D' was declared implicitly `extern' and later `static'";
2900
2901   tree name;
2902
2903   if (TREE_CODE (newdecl) == TYPE_DECL 
2904       || TREE_CODE (newdecl) == TEMPLATE_DECL)
2905     return;
2906   
2907   /* Don't get confused by static member functions; that's a different
2908      use of `static'.  */
2909   if (TREE_CODE (newdecl) == FUNCTION_DECL
2910       && DECL_STATIC_FUNCTION_P (newdecl))
2911     return;
2912
2913   /* If the old declaration was `static', or the new one isn't, then
2914      then everything is OK.  */
2915   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2916     return;
2917
2918   /* It's OK to declare a builtin function as `static'.  */
2919   if (TREE_CODE (olddecl) == FUNCTION_DECL
2920       && DECL_ARTIFICIAL (olddecl))
2921     return;
2922
2923   name = DECL_ASSEMBLER_NAME (newdecl);
2924   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2925               ? implicit_extern_static_warning
2926               : explicit_extern_static_warning, newdecl);
2927   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2928 }
2929
2930 /* Handle when a new declaration NEWDECL has the same name as an old
2931    one OLDDECL in the same binding contour.  Prints an error message
2932    if appropriate.
2933
2934    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2935    Otherwise, return 0.  */
2936
2937 int
2938 duplicate_decls (newdecl, olddecl)
2939      tree newdecl, olddecl;
2940 {
2941   unsigned olddecl_uid = DECL_UID (olddecl);
2942   int olddecl_friend = 0, types_match = 0;
2943   int new_defines_function = 0;
2944
2945   if (newdecl == olddecl)
2946     return 1;
2947
2948   types_match = decls_match (newdecl, olddecl);
2949
2950   /* If either the type of the new decl or the type of the old decl is an
2951      error_mark_node, then that implies that we have already issued an
2952      error (earlier) for some bogus type specification, and in that case,
2953      it is rather pointless to harass the user with yet more error message
2954      about the same declaration, so just pretend the types match here.  */
2955   if (TREE_TYPE (newdecl) == error_mark_node
2956       || TREE_TYPE (olddecl) == error_mark_node)
2957     types_match = 1;
2958  
2959   /* Check for redeclaration and other discrepancies. */
2960   if (TREE_CODE (olddecl) == FUNCTION_DECL
2961       && DECL_ARTIFICIAL (olddecl))
2962     {
2963       if (TREE_CODE (newdecl) != FUNCTION_DECL)
2964         {
2965           /* If you declare a built-in or predefined function name as static,
2966              the old definition is overridden, but optionally warn this was a
2967              bad choice of name.  */
2968           if (! TREE_PUBLIC (newdecl))
2969             {
2970               if (warn_shadow)
2971                 cp_warning ("shadowing %s function `%#D'",
2972                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2973                             olddecl);
2974               /* Discard the old built-in function.  */
2975               return 0;
2976             }
2977           /* If the built-in is not ansi, then programs can override
2978              it even globally without an error.  */
2979           else if (! DECL_BUILT_IN (olddecl))
2980             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2981                         olddecl, newdecl);
2982           else
2983             {
2984               cp_error ("declaration of `%#D'", newdecl);
2985               cp_error ("conflicts with built-in declaration `%#D'",
2986                         olddecl);
2987             }
2988           return 0;
2989         }
2990       else if (!types_match)
2991         {
2992           if ((DECL_LANGUAGE (newdecl) == lang_c
2993                && DECL_LANGUAGE (olddecl) == lang_c)
2994               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2995                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2996             {
2997               /* A near match; override the builtin.  */
2998
2999               if (TREE_PUBLIC (newdecl))
3000                 {
3001                   cp_warning ("new declaration `%#D'", newdecl);
3002                   cp_warning ("ambiguates built-in declaration `%#D'",
3003                               olddecl);
3004                 }
3005               else if (warn_shadow)
3006                 cp_warning ("shadowing %s function `%#D'",
3007                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3008                             olddecl);
3009             }
3010           else
3011             /* Discard the old built-in function.  */
3012             return 0;
3013         }
3014       
3015       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3016         {
3017           /* If a builtin function is redeclared as `static', merge
3018              the declarations, but make the original one static.  */
3019           DECL_THIS_STATIC (olddecl) = 1;
3020           TREE_PUBLIC (olddecl) = 0;
3021
3022           /* Make the olddeclaration consistent with the new one so that
3023              all remnants of the builtin-ness of this function will be
3024              banished.  */
3025           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3026           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3027           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3028           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3029                                        newdecl);
3030         }
3031     }
3032   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3033     {
3034       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3035            && TREE_CODE (newdecl) != TYPE_DECL
3036            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3037                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3038           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3039               && TREE_CODE (olddecl) != TYPE_DECL
3040               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3041                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3042                         == TYPE_DECL))))
3043         {
3044           /* We do nothing special here, because C++ does such nasty
3045              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3046              get shadowed, and know that if we need to find a TYPE_DECL
3047              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3048              slot of the identifier.  */
3049           return 0;
3050         }
3051
3052       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3053            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3054           || (TREE_CODE (olddecl) == FUNCTION_DECL
3055               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3056         return 0;
3057
3058       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3059       if (TREE_CODE (olddecl) == TREE_LIST)
3060         olddecl = TREE_VALUE (olddecl);
3061       cp_error_at ("previous declaration of `%#D'", olddecl);
3062
3063       /* New decl is completely inconsistent with the old one =>
3064          tell caller to replace the old one.  */
3065
3066       return 0;
3067     }
3068   else if (!types_match)
3069     {
3070       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3071         /* These are certainly not duplicate declarations; they're
3072            from different scopes.  */
3073         return 0;
3074
3075       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3076         {
3077           /* The name of a class template may not be declared to refer to
3078              any other template, class, function, object, namespace, value,
3079              or type in the same scope.  */
3080           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3081               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3082             {
3083               cp_error ("declaration of template `%#D'", newdecl);
3084               cp_error_at ("conflicts with previous declaration `%#D'",
3085                            olddecl);
3086             }
3087           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3088                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3089                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3090                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3091                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3092                                            DECL_TEMPLATE_PARMS (olddecl)))
3093             {
3094               cp_error ("new declaration `%#D'", newdecl);
3095               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3096             }
3097           return 0;
3098         }
3099       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3100         {
3101           if (DECL_LANGUAGE (newdecl) == lang_c
3102               && DECL_LANGUAGE (olddecl) == lang_c)
3103             {
3104               cp_error ("declaration of C function `%#D' conflicts with",
3105                         newdecl);
3106               cp_error_at ("previous declaration `%#D' here", olddecl);
3107             }
3108           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3109                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3110             {
3111               cp_error ("new declaration `%#D'", newdecl);
3112               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3113             }
3114           else
3115             return 0;
3116         }
3117
3118       /* Already complained about this, so don't do so again.  */
3119       else if (current_class_type == NULL_TREE
3120           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3121         {
3122           cp_error ("conflicting types for `%#D'", newdecl);
3123           cp_error_at ("previous declaration as `%#D'", olddecl);
3124         }
3125     }
3126   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3127             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3128                  && (!DECL_TEMPLATE_INFO (newdecl)
3129                      || (DECL_TI_TEMPLATE (newdecl) 
3130                          != DECL_TI_TEMPLATE (olddecl))))
3131                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3132                     && (!DECL_TEMPLATE_INFO (olddecl)
3133                         || (DECL_TI_TEMPLATE (olddecl) 
3134                             != DECL_TI_TEMPLATE (newdecl))))))
3135     /* It's OK to have a template specialization and a non-template
3136        with the same type, or to have specializations of two
3137        different templates with the same type.  Note that if one is a
3138        specialization, and the other is an instantiation of the same
3139        template, that we do not exit at this point.  That situation
3140        can occur if we instantiate a template class, and then
3141        specialize one of its methods.  This situation is legal, but
3142        the declarations must be merged in the usual way.  */
3143     return 0;
3144   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3145            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3146                 && !DECL_USE_TEMPLATE (newdecl))
3147                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3148                    && !DECL_USE_TEMPLATE (olddecl))))
3149     /* One of the declarations is a template instantiation, and the
3150        other is not a template at all.  That's OK.  */
3151     return 0;
3152   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3153            && DECL_NAMESPACE_ALIAS (newdecl)
3154            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3155     /* Redeclaration of namespace alias, ignore it. */
3156     return 1;
3157   else
3158     {
3159       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3160       if (errmsg)
3161         {
3162           cp_error (errmsg, newdecl);
3163           if (DECL_NAME (olddecl) != NULL_TREE)
3164             cp_error_at ((DECL_INITIAL (olddecl)
3165                           && namespace_bindings_p ())
3166                          ? "`%#D' previously defined here"
3167                          : "`%#D' previously declared here", olddecl);
3168         }
3169       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3170                && DECL_INITIAL (olddecl) != NULL_TREE
3171                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3172                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3173         {
3174           /* Prototype decl follows defn w/o prototype.  */
3175           cp_warning_at ("prototype for `%#D'", newdecl);
3176           cp_warning_at ("follows non-prototype definition here", olddecl);
3177         }
3178       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3179                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3180         {
3181           /* extern "C" int foo ();
3182              int foo () { bar (); }
3183              is OK.  */
3184           if (current_lang_stack
3185               == &VARRAY_TREE (current_lang_base, 0))
3186             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3187           else
3188             {
3189               cp_error_at ("previous declaration of `%#D' with %L linkage",
3190                            olddecl, DECL_LANGUAGE (olddecl));
3191               cp_error ("conflicts with new declaration with %L linkage",
3192                         DECL_LANGUAGE (newdecl));
3193             }
3194         }
3195
3196       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3197         ;
3198       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3199         {
3200           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3201           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3202           int i = 1;
3203
3204           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3205             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3206         
3207           for (; t1 && t1 != void_list_node;
3208                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3209             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3210               {
3211                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3212                                            TREE_PURPOSE (t2)))
3213                   {
3214                     if (pedantic)
3215                       {
3216                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3217                                     i, newdecl);
3218                         cp_pedwarn_at ("after previous specification in `%#D'",
3219                                        olddecl);
3220                       }
3221                   }
3222                 else
3223                   {
3224                     cp_error ("default argument given for parameter %d of `%#D'",
3225                               i, newdecl);
3226                     cp_error_at ("after previous specification in `%#D'",
3227                                  olddecl);
3228                   }
3229               }
3230
3231           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3232               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3233             {
3234               cp_warning ("`%#D' was used before it was declared inline",
3235                           newdecl);
3236               cp_warning_at ("previous non-inline declaration here",
3237                              olddecl);
3238             }
3239         }
3240     }
3241
3242   /* If new decl is `static' and an `extern' was seen previously,
3243      warn about it.  */
3244   warn_extern_redeclared_static (newdecl, olddecl);
3245
3246   /* We have committed to returning 1 at this point.  */
3247   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3248     {
3249       /* Now that functions must hold information normally held
3250          by field decls, there is extra work to do so that
3251          declaration information does not get destroyed during
3252          definition.  */
3253       if (DECL_VINDEX (olddecl))
3254         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3255       if (DECL_CONTEXT (olddecl))
3256         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3257       if (DECL_CLASS_CONTEXT (olddecl))
3258         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3259       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3260         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3261       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3262       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3263       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3264       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3265       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3266       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3267       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3268       
3269       /* Optionally warn about more than one declaration for the same
3270          name, but don't warn about a function declaration followed by a
3271          definition.  */
3272       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3273           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3274           /* Don't warn about extern decl followed by definition. */
3275           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3276           /* Don't warn about friends, let add_friend take care of it. */
3277           && ! DECL_FRIEND_P (newdecl))
3278         {
3279           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3280           cp_warning_at ("previous declaration of `%D'", olddecl);
3281         }
3282     }
3283
3284   /* Deal with C++: must preserve virtual function table size.  */
3285   if (TREE_CODE (olddecl) == TYPE_DECL)
3286     {
3287       register tree newtype = TREE_TYPE (newdecl);
3288       register tree oldtype = TREE_TYPE (olddecl);
3289
3290       if (newtype != error_mark_node && oldtype != error_mark_node
3291           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3292         {
3293           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3294           CLASSTYPE_FRIEND_CLASSES (newtype)
3295             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3296         }
3297     }
3298
3299   /* Copy all the DECL_... slots specified in the new decl
3300      except for any that we copy here from the old type.  */
3301   DECL_MACHINE_ATTRIBUTES (newdecl) 
3302     = merge_machine_decl_attributes (olddecl, newdecl);
3303
3304   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3305     {
3306       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3307                              DECL_TEMPLATE_RESULT (olddecl)))
3308         cp_error ("invalid redeclaration of %D", newdecl);
3309       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3310       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3311         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3312                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3313  
3314       return 1;
3315     }
3316     
3317   if (types_match)
3318     {
3319       /* Automatically handles default parameters.  */
3320       tree oldtype = TREE_TYPE (olddecl);
3321       tree newtype;
3322
3323       /* Make sure we put the new type in the same obstack as the old one.  */
3324       if (oldtype)
3325         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3326       else
3327         push_permanent_obstack ();
3328
3329       /* Merge the data types specified in the two decls.  */
3330       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3331
3332       if (TREE_CODE (newdecl) == VAR_DECL)
3333         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3334       /* Do this after calling `common_type' so that default
3335          parameters don't confuse us.  */
3336       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3337           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3338               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3339         {
3340           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3341                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3342           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3343                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3344
3345           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3346               && DECL_SOURCE_LINE (olddecl) != 0
3347               && flag_exceptions
3348               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3349                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3350             {
3351               cp_error ("declaration of `%F' throws different exceptions",
3352                         newdecl);
3353               cp_error_at ("to previous declaration `%F'", olddecl);
3354             }
3355         }
3356       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3357
3358       /* Lay the type out, unless already done.  */
3359       if (! same_type_p (newtype, oldtype)
3360           && TREE_TYPE (newdecl) != error_mark_node
3361           && !(processing_template_decl && uses_template_parms (newdecl)))
3362         layout_type (TREE_TYPE (newdecl));
3363
3364       if ((TREE_CODE (newdecl) == VAR_DECL
3365            || TREE_CODE (newdecl) == PARM_DECL
3366            || TREE_CODE (newdecl) == RESULT_DECL
3367            || TREE_CODE (newdecl) == FIELD_DECL
3368            || TREE_CODE (newdecl) == TYPE_DECL)
3369           && !(processing_template_decl && uses_template_parms (newdecl)))
3370         layout_decl (newdecl, 0);
3371
3372       /* Merge the type qualifiers.  */
3373       if (TREE_READONLY (newdecl))
3374         TREE_READONLY (olddecl) = 1;
3375       if (TREE_THIS_VOLATILE (newdecl))
3376         TREE_THIS_VOLATILE (olddecl) = 1;
3377
3378       /* Merge the initialization information.  */
3379       if (DECL_INITIAL (newdecl) == NULL_TREE
3380           && DECL_INITIAL (olddecl) != NULL_TREE)
3381         {
3382           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3383           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3384           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3385           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3386               && DECL_LANG_SPECIFIC (newdecl)
3387               && DECL_LANG_SPECIFIC (olddecl))
3388             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3389         }
3390
3391       /* Merge the section attribute.
3392          We want to issue an error if the sections conflict but that must be
3393          done later in decl_attributes since we are called before attributes
3394          are assigned.  */
3395       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3396         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3397
3398       /* Keep the old rtl since we can safely use it.  */
3399       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3400
3401       pop_obstacks ();
3402     }
3403   /* If cannot merge, then use the new type and qualifiers,
3404      and don't preserve the old rtl.  */
3405   else
3406     {
3407       /* Clean out any memory we had of the old declaration.  */
3408       tree oldstatic = value_member (olddecl, static_aggregates);
3409       if (oldstatic)
3410         TREE_VALUE (oldstatic) = error_mark_node;
3411
3412       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3413       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3414       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3415       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3416     }
3417
3418   /* Merge the storage class information.  */
3419   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3420   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3421   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3422   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3423   if (! DECL_EXTERNAL (olddecl))
3424     DECL_EXTERNAL (newdecl) = 0;
3425   
3426   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3427     {
3428       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3429       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3430       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3431       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3432         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3433       /* Don't really know how much of the language-specific
3434          values we should copy from old to new.  */
3435       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3436       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3437       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3438       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3439       olddecl_friend = DECL_FRIEND_P (olddecl);
3440
3441       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3442       if (TREE_CODE (newdecl) == FUNCTION_DECL
3443           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3444         DECL_BEFRIENDING_CLASSES (newdecl)
3445           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3446                      DECL_BEFRIENDING_CLASSES (olddecl));
3447     }
3448
3449   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3450     {
3451       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3452           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3453         {
3454           /* If newdecl is not a specialization, then it is not a
3455              template-related function at all.  And that means that we
3456              shoud have exited above, returning 0.  */
3457           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3458                               0);
3459
3460           if (TREE_USED (olddecl)) 
3461             /* From [temp.expl.spec]:
3462                
3463                If a template, a member template or the member of a class
3464                template is explicitly specialized then that
3465                specialization shall be declared before the first use of
3466                that specialization that would cause an implicit
3467                instantiation to take place, in every translation unit in
3468                which such a use occurs.  */
3469             cp_error ("explicit specialization of %D after first use", 
3470                       olddecl);
3471
3472           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3473         }
3474       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3475
3476       /* If either decl says `inline', this fn is inline, unless its
3477          definition was passed already.  */
3478       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3479         DECL_INLINE (olddecl) = 1;
3480       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3481
3482       if (! types_match)
3483         {
3484           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3485           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3486           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3487         }
3488       if (! types_match || new_defines_function)
3489         {
3490           /* These need to be copied so that the names are available.
3491              Note that if the types do match, we'll preserve inline
3492              info and other bits, but if not, we won't.  */
3493           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3494           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3495         }
3496       if (new_defines_function)
3497         /* If defining a function declared with other language
3498            linkage, use the previously declared language linkage.  */
3499         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3500       else if (types_match)
3501         {
3502           /* If redeclaring a builtin function, and not a definition,
3503              it stays built in.  */
3504           if (DECL_BUILT_IN (olddecl))
3505             {
3506               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3507               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3508               /* If we're keeping the built-in definition, keep the rtl,
3509                  regardless of declaration matches.  */
3510               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3511             }
3512           else
3513             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3514
3515           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3516           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3517             /* Previously saved insns go together with
3518                the function's previous definition.  */
3519             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3520           /* Don't clear out the arguments if we're redefining a function.  */
3521           if (DECL_ARGUMENTS (olddecl))
3522             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3523         }
3524       if (DECL_LANG_SPECIFIC (olddecl))
3525         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3526     }
3527
3528   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3529     {
3530       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3531     }
3532
3533   /* Now preserve various other info from the definition.  */
3534   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3535   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3536   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3537   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3538
3539   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3540     {
3541       int function_size;
3542
3543       function_size = sizeof (struct tree_decl);
3544
3545       bcopy ((char *) newdecl + sizeof (struct tree_common),
3546              (char *) olddecl + sizeof (struct tree_common),
3547              function_size - sizeof (struct tree_common));
3548
3549       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3550         {
3551           /* If newdecl is a template instantiation, it is possible that
3552              the following sequence of events has occurred:
3553
3554              o A friend function was declared in a class template.  The
3555              class template was instantiated.  
3556
3557              o The instantiation of the friend declaration was 
3558              recorded on the instantiation list, and is newdecl.  
3559
3560              o Later, however, instantiate_class_template called pushdecl
3561              on the newdecl to perform name injection.  But, pushdecl in
3562              turn called duplicate_decls when it discovered that another
3563              declaration of a global function with the same name already
3564              existed. 
3565
3566              o Here, in duplicate_decls, we decided to clobber newdecl.
3567
3568              If we're going to do that, we'd better make sure that
3569              olddecl, and not newdecl, is on the list of
3570              instantiations so that if we try to do the instantiation
3571              again we won't get the clobbered declaration.  */
3572
3573           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3574           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3575
3576           for (; decls; decls = TREE_CHAIN (decls))
3577             if (TREE_VALUE (decls) == newdecl)
3578               TREE_VALUE (decls) = olddecl;
3579         }
3580     }
3581   else
3582     {
3583       bcopy ((char *) newdecl + sizeof (struct tree_common),
3584              (char *) olddecl + sizeof (struct tree_common),
3585              sizeof (struct tree_decl) - sizeof (struct tree_common)
3586              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3587     }
3588
3589   DECL_UID (olddecl) = olddecl_uid;
3590   if (olddecl_friend)
3591     DECL_FRIEND_P (olddecl) = 1;
3592
3593   /* NEWDECL contains the merged attribute lists.
3594      Update OLDDECL to be the same.  */
3595   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3596
3597   return 1;
3598 }
3599
3600 /* Record a decl-node X as belonging to the current lexical scope.
3601    Check for errors (such as an incompatible declaration for the same
3602    name already seen in the same scope).
3603
3604    Returns either X or an old decl for the same name.
3605    If an old decl is returned, it may have been smashed
3606    to agree with what X says.  */
3607
3608 tree
3609 pushdecl (x)
3610      tree x;
3611 {
3612   register tree t;
3613   register tree name;
3614   int need_new_binding;
3615
3616   /* We shouldn't be calling pushdecl when we're generating RTL for a
3617      function that we already did semantic analysis on previously.  */
3618   my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3619                       19990913);
3620
3621   name = DECL_ASSEMBLER_NAME (x);
3622   need_new_binding = 1;
3623
3624   if (DECL_TEMPLATE_PARM_P (x))
3625     /* Template parameters have no context; they are not X::T even
3626        when declared within a class or namespace.  */
3627     ;
3628   else
3629     {
3630       if (current_function_decl && x != current_function_decl
3631           /* A local declaration for a function doesn't constitute
3632              nesting.  */
3633           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3634           /* A local declaration for an `extern' variable is in the
3635              scoped of the current namespace, not the current
3636              function.  */
3637           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3638           /* Don't change DECL_CONTEXT of virtual methods.  */
3639           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3640           && !DECL_CONTEXT (x))
3641         DECL_CONTEXT (x) = current_function_decl;
3642       if (!DECL_CONTEXT (x))
3643         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3644     }
3645
3646   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3647      compiler wants to use.  */
3648   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3649       || TREE_CODE (x) == NAMESPACE_DECL)
3650     name = DECL_NAME (x);
3651
3652   if (name)
3653     {
3654 #if 0
3655       /* Not needed...see below.  */
3656       char *file;
3657       int line;
3658 #endif
3659       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3660         name = TREE_OPERAND (name, 0);
3661       
3662       /* Namespace-scoped variables are not found in the current level. */
3663       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3664         t = namespace_binding (name, DECL_CONTEXT (x));
3665       else
3666         t = lookup_name_current_level (name);
3667       if (t == error_mark_node)
3668         {
3669           /* error_mark_node is 0 for a while during initialization!  */
3670           t = NULL_TREE;
3671           cp_error_at ("`%#D' used prior to declaration", x);
3672         }
3673
3674       else if (t != NULL_TREE)
3675         {
3676 #if 0
3677           /* This is turned off until I have time to do it right (bpk).  */
3678           /* With the code below that uses it...  */
3679           file = DECL_SOURCE_FILE (t);
3680           line = DECL_SOURCE_LINE (t);
3681 #endif
3682           if (TREE_CODE (t) == PARM_DECL)
3683             {
3684               if (DECL_CONTEXT (t) == NULL_TREE)
3685                 fatal ("parse errors have confused me too much");
3686
3687               /* Check for duplicate params.  */
3688               if (duplicate_decls (x, t))
3689                 return t;
3690             }
3691           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3692                     || DECL_FUNCTION_TEMPLATE_P (x))
3693                    && is_overloaded_fn (t))
3694             /* Don't do anything just yet. */;
3695           else if (t == wchar_decl_node)
3696             {
3697               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3698                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3699
3700               /* Throw away the redeclaration.  */
3701               return t;
3702             }
3703           else if (TREE_CODE (t) != TREE_CODE (x))
3704             {
3705               if (duplicate_decls (x, t))
3706                 return t;
3707             }
3708           else if (duplicate_decls (x, t))
3709             {
3710 #if 0
3711               /* This is turned off until I have time to do it right (bpk).  */
3712
3713               /* Also warn if they did a prototype with `static' on it, but
3714                  then later left the `static' off.  */
3715               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3716                 {
3717                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3718                     return t;
3719
3720                   if (extra_warnings)
3721                     {
3722                       cp_warning ("`static' missing from declaration of `%D'",
3723                                   t);
3724                       warning_with_file_and_line (file, line,
3725                                                   "previous declaration of `%s'",
3726                                                   decl_as_string (t, 0));
3727                     }
3728
3729                   /* Now fix things so it'll do what they expect.  */
3730                   if (current_function_decl)
3731                     TREE_PUBLIC (current_function_decl) = 0;
3732                 }
3733               /* Due to interference in memory reclamation (X may be
3734                  obstack-deallocated at this point), we must guard against
3735                  one really special case.  [jason: This should be handled
3736                  by start_function]  */
3737               if (current_function_decl == x)
3738                 current_function_decl = t;
3739 #endif
3740               if (TREE_CODE (t) == TYPE_DECL)
3741                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3742               else if (TREE_CODE (t) == FUNCTION_DECL)
3743                 check_default_args (t);
3744
3745               return t;
3746             }
3747           else if (DECL_MAIN_P (x))
3748             {
3749               /* A redeclaration of main, but not a duplicate of the
3750                  previous one. 
3751
3752                  [basic.start.main]
3753
3754                  This function shall not be overloaded.  */
3755               cp_error_at ("invalid redeclaration of `%D'", t);
3756               cp_error ("as `%D'", x);
3757               /* We don't try to push this declaration since that
3758                  causes a crash.  */
3759               return x;
3760             }
3761         }
3762
3763       check_template_shadow (x);
3764
3765       /* If this is a function conjured up by the backend, massage it
3766          so it looks friendly.  */
3767       if (TREE_CODE (x) == FUNCTION_DECL
3768           && ! DECL_LANG_SPECIFIC (x))
3769         {
3770           retrofit_lang_decl (x);
3771           DECL_LANGUAGE (x) = lang_c;
3772         }
3773
3774       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3775         {
3776           t = push_overloaded_decl (x, PUSH_LOCAL);
3777           if (t != x)
3778             return t;
3779           if (!namespace_bindings_p ())
3780             /* We do not need to create a binding for this name;
3781                push_overloaded_decl will have already done so if
3782                necessary.  */
3783             need_new_binding = 0;
3784         }
3785       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3786         {
3787           t = push_overloaded_decl (x, PUSH_GLOBAL);
3788           if (t == x)
3789             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3790           return t;
3791         }
3792
3793       /* If declaring a type as a typedef, copy the type (unless we're
3794          at line 0), and install this TYPE_DECL as the new type's typedef
3795          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3796       if (TREE_CODE (x) == TYPE_DECL)
3797         {
3798           tree type = TREE_TYPE (x);
3799           if (DECL_SOURCE_LINE (x) == 0)
3800             {
3801               if (TYPE_NAME (type) == 0)
3802                 TYPE_NAME (type) = x;
3803             }
3804           else if (type != error_mark_node && TYPE_NAME (type) != x
3805                    /* We don't want to copy the type when all we're
3806                       doing is making a TYPE_DECL for the purposes of
3807                       inlining.  */
3808                    && (!TYPE_NAME (type) 
3809                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3810             {
3811               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3812
3813               DECL_ORIGINAL_TYPE (x) = type;
3814               type = build_type_copy (type);
3815               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3816               TYPE_NAME (type) = x;
3817               TREE_TYPE (x) = type;
3818
3819               pop_obstacks ();
3820             }
3821
3822           if (type != error_mark_node
3823               && TYPE_NAME (type)
3824               && TYPE_IDENTIFIER (type))
3825             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3826                                                   current_binding_level);
3827
3828         }
3829
3830       /* Multiple external decls of the same identifier ought to match.
3831
3832          We get warnings about inline functions where they are defined.
3833          We get warnings about other functions from push_overloaded_decl.
3834          
3835          Avoid duplicate warnings where they are used.  */
3836       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3837         {
3838           tree decl;
3839
3840           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3841               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3842                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3843             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3844           else
3845             decl = NULL_TREE;
3846
3847           if (decl
3848               /* If different sort of thing, we already gave an error.  */
3849               && TREE_CODE (decl) == TREE_CODE (x)
3850               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3851             {
3852               cp_pedwarn ("type mismatch with previous external decl", x);
3853               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3854             }
3855         }
3856
3857       /* This name is new in its binding level.
3858          Install the new declaration and return it.  */
3859       if (namespace_bindings_p ())
3860         {
3861           /* Install a global value.  */
3862
3863           /* If the first global decl has external linkage,
3864              warn if we later see static one.  */
3865           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3866             TREE_PUBLIC (name) = 1;
3867
3868           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3869                 && t != NULL_TREE)
3870               /* For an ordinary function, we create a binding from
3871                  the mangled name (i.e., NAME) to the DECL.  But, for
3872                  an `extern "C"' function, the mangled name and the
3873                  ordinary name are the same so we need not do this.  */
3874               && !(TREE_CODE (x) == FUNCTION_DECL && 
3875                    DECL_LANGUAGE (x) == lang_c))
3876             {
3877               if (TREE_CODE (x) == FUNCTION_DECL)
3878                 my_friendly_assert 
3879                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3880                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3881               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3882             }
3883
3884           /* Don't forget if the function was used via an implicit decl.  */
3885           if (IDENTIFIER_IMPLICIT_DECL (name)
3886               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3887             TREE_USED (x) = 1;
3888
3889           /* Don't forget if its address was taken in that way.  */
3890           if (IDENTIFIER_IMPLICIT_DECL (name)
3891               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3892             TREE_ADDRESSABLE (x) = 1;
3893
3894           /* Warn about mismatches against previous implicit decl.  */
3895           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3896               /* If this real decl matches the implicit, don't complain.  */
3897               && ! (TREE_CODE (x) == FUNCTION_DECL
3898                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3899             cp_warning
3900               ("`%D' was previously implicitly declared to return `int'", x);
3901
3902           /* If new decl is `static' and an `extern' was seen previously,
3903              warn about it.  */
3904           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3905             warn_extern_redeclared_static (x, t);
3906         }
3907       else
3908         {
3909           /* Here to install a non-global value.  */
3910           tree oldlocal = IDENTIFIER_VALUE (name);
3911           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3912
3913           if (need_new_binding)
3914             {
3915               push_local_binding (name, x, 0);
3916               /* Because push_local_binding will hook X on to the
3917                  current_binding_level's name list, we don't want to
3918                  do that again below.  */
3919               need_new_binding = 0;
3920             }
3921
3922           /* If this is a TYPE_DECL, push it into the type value slot.  */
3923           if (TREE_CODE (x) == TYPE_DECL)
3924             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3925                                                   current_binding_level);
3926
3927           /* Clear out any TYPE_DECL shadowed by a namespace so that
3928              we won't think this is a type.  The C struct hack doesn't
3929              go through namespaces.  */
3930           if (TREE_CODE (x) == NAMESPACE_DECL)
3931             set_identifier_type_value_with_scope (name, NULL_TREE, 
3932                                                   current_binding_level);
3933
3934           /* If this is an extern function declaration, see if we
3935              have a global definition or declaration for the function.  */
3936           if (oldlocal == NULL_TREE
3937               && DECL_EXTERNAL (x)
3938               && oldglobal != NULL_TREE
3939               && TREE_CODE (x) == FUNCTION_DECL
3940               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3941             {
3942               /* We have one.  Their types must agree.  */
3943               if (decls_match (x, oldglobal))
3944                 /* OK */;
3945               else
3946                 {
3947                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3948                   cp_warning_at ("global declaration `%#D'", oldglobal);
3949                 }
3950             }
3951           /* If we have a local external declaration,
3952              and no file-scope declaration has yet been seen,
3953              then if we later have a file-scope decl it must not be static.  */
3954           if (oldlocal == NULL_TREE
3955               && oldglobal == NULL_TREE
3956               && DECL_EXTERNAL (x)
3957               && TREE_PUBLIC (x))
3958             TREE_PUBLIC (name) = 1;
3959
3960           if (DECL_FROM_INLINE (x))
3961             /* Inline decls shadow nothing.  */;
3962
3963           /* Warn if shadowing an argument at the top level of the body.  */
3964           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3965                    && TREE_CODE (oldlocal) == PARM_DECL
3966                    /* Don't complain if it's from an enclosing function.  */
3967                    && DECL_CONTEXT (oldlocal) == current_function_decl
3968                    && TREE_CODE (x) != PARM_DECL)
3969             {
3970               /* Go to where the parms should be and see if we
3971                  find them there.  */
3972               struct binding_level *b = current_binding_level->level_chain;
3973
3974               if (cleanup_label)
3975                 b = b->level_chain;
3976
3977               /* ARM $8.3 */
3978               if (b->parm_flag == 1)
3979                 cp_error ("declaration of `%#D' shadows a parameter", name);
3980             }
3981           else if (warn_shadow && oldlocal != NULL_TREE
3982                    && current_binding_level->is_for_scope
3983                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3984             {
3985               warning ("variable `%s' shadows local",
3986                        IDENTIFIER_POINTER (name));
3987               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3988             }              
3989           /* Maybe warn if shadowing something else.  */
3990           else if (warn_shadow && !DECL_EXTERNAL (x)
3991                    /* No shadow warnings for internally generated vars.  */
3992                    && ! DECL_ARTIFICIAL (x)
3993                    /* No shadow warnings for vars made for inlining.  */
3994                    && ! DECL_FROM_INLINE (x))
3995             {
3996               const char *warnstring = NULL;
3997
3998               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3999                 warnstring = "declaration of `%s' shadows a parameter";
4000               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4001                        && current_class_ptr
4002                        && !TREE_STATIC (name))
4003                 warnstring = "declaration of `%s' shadows a member of `this'";
4004               else if (oldlocal != NULL_TREE)
4005                 warnstring = "declaration of `%s' shadows previous local";
4006               else if (oldglobal != NULL_TREE)
4007                 /* XXX shadow warnings in outer-more namespaces */
4008                 warnstring = "declaration of `%s' shadows global declaration";
4009
4010               if (warnstring)
4011                 warning (warnstring, IDENTIFIER_POINTER (name));
4012             }
4013         }
4014
4015       if (TREE_CODE (x) == FUNCTION_DECL)
4016         check_default_args (x);
4017
4018       /* Keep count of variables in this level with incomplete type.  */
4019       if (TREE_CODE (x) == VAR_DECL
4020           && TREE_TYPE (x) != error_mark_node
4021           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4022                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4023               /* RTTI TD entries are created while defining the type_info.  */
4024               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4025                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4026         current_binding_level->incomplete 
4027           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4028     }
4029
4030   if (need_new_binding)
4031     add_decl_to_level (x, 
4032                        DECL_NAMESPACE_SCOPE_P (x)
4033                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4034                        : current_binding_level);
4035
4036   return x;
4037 }
4038
4039 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4040    caller to set DECL_CONTEXT properly.  */
4041
4042 static tree
4043 pushdecl_with_scope (x, level)
4044      tree x;
4045      struct binding_level *level;
4046 {
4047   register struct binding_level *b;
4048   tree function_decl = current_function_decl;
4049
4050   current_function_decl = NULL_TREE;
4051   if (level->parm_flag == 2)
4052     {
4053       b = class_binding_level;
4054       class_binding_level = level;
4055       pushdecl_class_level (x);
4056       class_binding_level = b;
4057     }
4058   else
4059     {
4060       b = current_binding_level;
4061       current_binding_level = level;
4062       x = pushdecl (x);
4063       current_binding_level = b;
4064     }
4065   current_function_decl = function_decl;
4066   return x;
4067 }
4068
4069 /* Like pushdecl, only it places X in the current namespace,
4070    if appropriate.  */
4071
4072 tree
4073 pushdecl_namespace_level (x)
4074      tree x;
4075 {
4076   register struct binding_level *b = current_binding_level;
4077   register tree t;
4078
4079   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4080
4081   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4082      what we want.  */
4083   if (TREE_CODE (x) == TYPE_DECL)
4084     {
4085       tree name = DECL_NAME (x);
4086       tree newval;
4087       tree *ptr = (tree *)0;
4088       for (; b != global_binding_level; b = b->level_chain)
4089         {
4090           tree shadowed = b->type_shadowed;
4091           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4092             if (TREE_PURPOSE (shadowed) == name)
4093               {
4094                 ptr = &TREE_VALUE (shadowed);
4095                 /* Can't break out of the loop here because sometimes
4096                    a binding level will have duplicate bindings for
4097                    PT names.  It's gross, but I haven't time to fix it.  */
4098               }
4099         }
4100       newval = TREE_TYPE (x);
4101       if (ptr == (tree *)0)
4102         {
4103           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4104              up here if this is changed to an assertion.  --KR  */
4105           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4106         }
4107       else
4108         {
4109           *ptr = newval;
4110         }
4111     }
4112   return t;
4113 }
4114
4115 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4116    if appropriate.  */
4117
4118 tree
4119 pushdecl_top_level (x)
4120      tree x;
4121 {
4122   push_to_top_level ();
4123   x = pushdecl_namespace_level (x);
4124   pop_from_top_level ();
4125   return x;
4126 }
4127
4128 /* Make the declaration of X appear in CLASS scope.  */
4129
4130 void
4131 pushdecl_class_level (x)
4132      tree x;
4133 {
4134   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4135      scope looks for the pre-mangled name.  */
4136   register tree name;
4137
4138   if (TREE_CODE (x) == OVERLOAD)
4139     x = OVL_CURRENT (x);
4140   name = DECL_NAME (x);
4141
4142   if (name)
4143     {
4144       push_class_level_binding (name, x);
4145       if (TREE_CODE (x) == TYPE_DECL)
4146         set_identifier_type_value (name, TREE_TYPE (x));
4147     }
4148   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4149     {
4150       tree f;
4151
4152       for (f = TYPE_FIELDS (TREE_TYPE (x));
4153            f;
4154            f = TREE_CHAIN (f))
4155         pushdecl_class_level (f);
4156     }
4157 }
4158
4159 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4160    DECL, or a modified version thereof.  */
4161
4162 tree
4163 maybe_push_decl (decl)
4164      tree decl;
4165 {
4166   tree type = TREE_TYPE (decl);
4167
4168   /* Add this decl to the current binding level, but not if it comes
4169      from another scope, e.g. a static member variable.  TEM may equal
4170      DECL or it may be a previous decl of the same name.  */
4171   if ((TREE_CODE (decl) != PARM_DECL 
4172        && DECL_CONTEXT (decl) != NULL_TREE 
4173        /* Definitions of namespace members outside their namespace are
4174           possible. */
4175        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4176       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4177       || TREE_CODE (type) == UNKNOWN_TYPE
4178       /* The declaration of a template specialization does not affect
4179          the functions available for overload resolution, so we do not
4180          call pushdecl.  */
4181       || (TREE_CODE (decl) == FUNCTION_DECL
4182           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4183     return decl;
4184   else
4185     return pushdecl (decl);
4186 }
4187
4188 #if 0
4189 /* This function is used to push the mangled decls for nested types into
4190    the appropriate scope.  Previously pushdecl_top_level was used, but that
4191    is incorrect for members of local classes.  */
4192
4193 void
4194 pushdecl_nonclass_level (x)
4195      tree x;
4196 {
4197   struct binding_level *b = current_binding_level;
4198
4199   my_friendly_assert (b->parm_flag != 2, 180);
4200
4201 #if 0
4202   /* Get out of template binding levels */
4203   while (b->pseudo_global)
4204     b = b->level_chain;
4205 #endif
4206
4207   pushdecl_with_scope (x, b);
4208 }
4209 #endif
4210
4211 /* Make the declaration(s) of X appear in CLASS scope
4212    under the name NAME.  */
4213
4214 void
4215 push_class_level_binding (name, x)
4216      tree name;
4217      tree x;
4218 {
4219   tree binding;
4220   /* The class_binding_level will be NULL if x is a template 
4221      parameter name in a member template.  */
4222   if (!class_binding_level)
4223     return;
4224
4225   /* Make sure that this new member does not have the same name
4226      as a template parameter.  */
4227   if (TYPE_BEING_DEFINED (current_class_type))
4228     check_template_shadow (x);
4229
4230   /* If this declaration shadows a declaration from an enclosing
4231      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4232      we leave this class.  Record the shadowed declaration here.  */
4233   binding = IDENTIFIER_BINDING (name);
4234   if (binding 
4235       && ((TREE_CODE (x) == OVERLOAD
4236            && BINDING_VALUE (binding)
4237            && is_overloaded_fn (BINDING_VALUE (binding)))
4238           || INHERITED_VALUE_BINDING_P (binding)))
4239     {
4240       tree shadow;
4241       tree old_decl;
4242
4243       /* If the old binding was from a base class, and was for a tag
4244          name, slide it over to make room for the new binding.  The
4245          old binding is still visible if explicitly qualified with a
4246          class-key.  */
4247       if (INHERITED_VALUE_BINDING_P (binding)
4248           && BINDING_VALUE (binding)
4249           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4250           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4251           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4252         {
4253           old_decl = BINDING_TYPE (binding);
4254           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4255           BINDING_VALUE (binding) = NULL_TREE;
4256           INHERITED_VALUE_BINDING_P (binding) = 0;
4257         }
4258       else
4259         old_decl = BINDING_VALUE (binding);
4260
4261       /* There was already a binding for X containing fewer
4262          functions than are named in X.  Find the previous
4263          declaration of X on the class-shadowed list, and update it.  */
4264       for (shadow = class_binding_level->class_shadowed;
4265            shadow;
4266            shadow = TREE_CHAIN (shadow))
4267         if (TREE_PURPOSE (shadow) == name
4268             && TREE_TYPE (shadow) == old_decl)
4269           {
4270             BINDING_VALUE (binding) = x;
4271             INHERITED_VALUE_BINDING_P (binding) = 0;
4272             TREE_TYPE (shadow) = x;
4273             return;
4274           }
4275     }
4276
4277   /* If we didn't replace an existing binding, put the binding on the
4278      stack of bindings for the identifier, and update
4279      IDENTIFIER_CLASS_VALUE.  */
4280   if (push_class_binding (name, x))
4281     {
4282       class_binding_level->class_shadowed
4283         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4284                      class_binding_level->class_shadowed);
4285       /* Record the value we are binding NAME to so that we can know
4286          what to pop later.  */
4287       TREE_TYPE (class_binding_level->class_shadowed) = x;
4288     }
4289 }
4290
4291 /* Insert another USING_DECL into the current binding level,
4292    returning this declaration. If this is a redeclaration,
4293    do nothing and return NULL_TREE.  */
4294
4295 tree
4296 push_using_decl (scope, name)
4297      tree scope;
4298      tree name;
4299 {
4300   tree decl;
4301   
4302   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4303   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4304   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4305     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4306       break;
4307   if (decl)
4308     return NULL_TREE;
4309   decl = build_lang_decl (USING_DECL, name, void_type_node);
4310   DECL_INITIAL (decl) = scope;
4311   TREE_CHAIN (decl) = current_binding_level->usings;
4312   current_binding_level->usings = decl;
4313   return decl;
4314 }
4315
4316 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4317    changed (i.e. there was already a directive), or the fresh
4318    TREE_LIST otherwise.  */
4319
4320 tree
4321 push_using_directive (used)
4322      tree used;
4323 {
4324   tree ud = current_binding_level->using_directives;
4325   tree iter, ancestor;
4326   
4327   /* Check if we already have this. */
4328   if (purpose_member (used, ud) != NULL_TREE)
4329     return NULL_TREE;
4330
4331   /* Recursively add all namespaces used. */
4332   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4333     push_using_directive (TREE_PURPOSE (iter));
4334
4335   ancestor = namespace_ancestor (current_decl_namespace (), used);
4336   ud = current_binding_level->using_directives;
4337   ud = tree_cons (used, ancestor, ud);
4338   current_binding_level->using_directives = ud;
4339   return ud;
4340 }
4341
4342 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4343    other definitions already in place.  We get around this by making
4344    the value of the identifier point to a list of all the things that
4345    want to be referenced by that name.  It is then up to the users of
4346    that name to decide what to do with that list.
4347
4348    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4349    slot.  It is dealt with the same way.
4350
4351    FLAGS is a bitwise-or of the following values:
4352      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4353                  namespace scope.
4354      PUSH_USING: DECL is being pushed as the result of a using
4355                  declaration. 
4356
4357    The value returned may be a previous declaration if we guessed wrong
4358    about what language DECL should belong to (C or C++).  Otherwise,
4359    it's always DECL (and never something that's not a _DECL).  */
4360
4361 tree
4362 push_overloaded_decl (decl, flags)
4363      tree decl;
4364      int flags;
4365 {
4366   tree name = DECL_NAME (decl);
4367   tree old;
4368   tree new_binding;
4369   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4370
4371   if (doing_global)
4372     old = namespace_binding (name, DECL_CONTEXT (decl));
4373   else
4374     old = lookup_name_current_level (name);
4375
4376   if (old)
4377     {
4378       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4379         {
4380           tree t = TREE_TYPE (old);
4381           if (IS_AGGR_TYPE (t) && warn_shadow
4382               && (! DECL_IN_SYSTEM_HEADER (decl)
4383                   || ! DECL_IN_SYSTEM_HEADER (old)))
4384             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4385           old = NULL_TREE;
4386         }
4387       else if (is_overloaded_fn (old))
4388         {
4389           tree tmp;
4390           
4391           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4392             {
4393               tree fn = OVL_CURRENT (tmp);
4394
4395               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4396                   && !(flags & PUSH_USING)
4397                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4398                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4399                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4400                           decl, fn);
4401               
4402               if (duplicate_decls (decl, fn))
4403                 return fn;
4404             }
4405         }
4406       else
4407         {
4408           cp_error_at ("previous non-function declaration `%#D'", old);
4409           cp_error ("conflicts with function declaration `%#D'", decl);
4410           return decl;
4411         }
4412     }
4413
4414   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4415     {
4416       if (old && TREE_CODE (old) != OVERLOAD)
4417         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4418       else
4419         new_binding = ovl_cons (decl, old);
4420       if (flags & PUSH_USING)
4421         OVL_USED (new_binding) = 1;
4422     }
4423   else
4424     /* NAME is not ambiguous.  */
4425     new_binding = decl;
4426
4427   if (doing_global)
4428     set_namespace_binding (name, current_namespace, new_binding);
4429   else
4430     {
4431       /* We only create an OVERLOAD if there was a previous binding at
4432          this level, or if decl is a template. In the former case, we
4433          need to remove the old binding and replace it with the new
4434          binding.  We must also run through the NAMES on the binding
4435          level where the name was bound to update the chain.  */
4436
4437       if (TREE_CODE (new_binding) == OVERLOAD && old)
4438         {
4439           tree *d;
4440           
4441           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4442                *d;
4443                d = &TREE_CHAIN (*d))
4444             if (*d == old
4445                 || (TREE_CODE (*d) == TREE_LIST
4446                     && TREE_VALUE (*d) == old))
4447               {
4448                 if (TREE_CODE (*d) == TREE_LIST)
4449                   /* Just replace the old binding with the new.  */
4450                   TREE_VALUE (*d) = new_binding;
4451                 else
4452                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4453                   *d = tree_cons (NULL_TREE, new_binding, 
4454                                   TREE_CHAIN (*d));
4455
4456                 /* And update the CPLUS_BINDING node.  */
4457                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4458                   = new_binding;
4459                 return decl;
4460               }
4461
4462           /* We should always find a previous binding in this case.  */
4463           my_friendly_abort (0);
4464         }
4465
4466       /* Install the new binding.  */
4467       push_local_binding (name, new_binding, flags);
4468     }
4469
4470   return decl;
4471 }
4472 \f
4473 /* Generate an implicit declaration for identifier FUNCTIONID
4474    as a function of type int ().  Print a warning if appropriate.  */
4475
4476 tree
4477 implicitly_declare (functionid)
4478      tree functionid;
4479 {
4480   register tree decl;
4481   int temp = allocation_temporary_p ();
4482
4483   push_obstacks_nochange ();
4484
4485   /* Save the decl permanently so we can warn if definition follows.
4486      In ANSI C, warn_implicit is usually false, so the saves little space.
4487      But in C++, it's usually true, hence the extra code.  */
4488   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4489     end_temporary_allocation ();
4490
4491   /* We used to reuse an old implicit decl here,
4492      but this loses with inline functions because it can clobber
4493      the saved decl chains.  */
4494   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4495
4496   DECL_EXTERNAL (decl) = 1;
4497   TREE_PUBLIC (decl) = 1;
4498
4499   /* ANSI standard says implicit declarations are in the innermost block.
4500      So we record the decl in the standard fashion.  */
4501   pushdecl (decl);
4502   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4503
4504   if (warn_implicit
4505       /* Only one warning per identifier.  */
4506       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4507     {
4508       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4509     }
4510
4511   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4512
4513   pop_obstacks ();
4514
4515   return decl;
4516 }
4517
4518 /* Return zero if the declaration NEWDECL is valid
4519    when the declaration OLDDECL (assumed to be for the same name)
4520    has already been seen.
4521    Otherwise return an error message format string with a %s
4522    where the identifier should go.  */
4523
4524 static const char *
4525 redeclaration_error_message (newdecl, olddecl)
4526      tree newdecl, olddecl;
4527 {
4528   if (TREE_CODE (newdecl) == TYPE_DECL)
4529     {
4530       /* Because C++ can put things into name space for free,
4531          constructs like "typedef struct foo { ... } foo"
4532          would look like an erroneous redeclaration.  */
4533       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4534         return 0;
4535       else
4536         return "redefinition of `%#D'";
4537     }
4538   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4539     {
4540       /* If this is a pure function, its olddecl will actually be
4541          the original initialization to `0' (which we force to call
4542          abort()).  Don't complain about redefinition in this case.  */
4543       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4544         return 0;
4545
4546       /* If both functions come from different namespaces, this is not
4547          a redeclaration - this is a conflict with a used function. */
4548       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4549           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4550         return "`%D' conflicts with used function";
4551
4552       /* We'll complain about linkage mismatches in
4553          warn_extern_redeclared_static.  */
4554
4555       /* Defining the same name twice is no good.  */
4556       if (DECL_INITIAL (olddecl) != NULL_TREE
4557           && DECL_INITIAL (newdecl) != NULL_TREE)
4558         {
4559           if (DECL_NAME (olddecl) == NULL_TREE)
4560             return "`%#D' not declared in class";
4561           else
4562             return "redefinition of `%#D'";
4563         }
4564       return 0;
4565     }
4566   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4567     {
4568       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4569            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4570            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4571           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4572               && TYPE_SIZE (TREE_TYPE (newdecl))
4573               && TYPE_SIZE (TREE_TYPE (olddecl))))
4574         return "redefinition of `%#D'";
4575       return 0;
4576     }
4577   else if (toplevel_bindings_p ())
4578     {
4579       /* Objects declared at top level:  */
4580       /* If at least one is a reference, it's ok.  */
4581       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4582         return 0;
4583       /* Reject two definitions.  */
4584       return "redefinition of `%#D'";
4585     }
4586   else
4587     {
4588       /* Objects declared with block scope:  */
4589       /* Reject two definitions, and reject a definition
4590          together with an external reference.  */
4591       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4592         return "redeclaration of `%#D'";
4593       return 0;
4594     }
4595 }
4596 \f
4597 /* Create a new label, named ID.  */
4598
4599 static tree
4600 make_label_decl (id, local_p)
4601      tree id;
4602      int local_p;
4603 {
4604   tree decl;
4605
4606   decl = build_decl (LABEL_DECL, id, void_type_node);
4607   if (expanding_p)
4608     /* Make sure every label has an rtx.  */
4609     label_rtx (decl);
4610
4611   DECL_CONTEXT (decl) = current_function_decl;
4612   DECL_MODE (decl) = VOIDmode;
4613   C_DECLARED_LABEL_FLAG (decl) = local_p;
4614
4615   /* Say where one reference is to the label, for the sake of the
4616      error if it is not defined.  */
4617   DECL_SOURCE_LINE (decl) = lineno;
4618   DECL_SOURCE_FILE (decl) = input_filename;
4619
4620   /* Record the fact that this identifier is bound to this label.  */
4621   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4622
4623   /* Record this label on the list of used labels so that we can check
4624      at the end of the function to see whether or not the label was
4625      actually defined.  */
4626   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4627       && (named_label_uses == NULL
4628           || named_label_uses->names_in_scope != current_binding_level->names
4629           || named_label_uses->label_decl != decl))
4630     {
4631       struct named_label_list *new_ent;
4632       new_ent
4633         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4634       new_ent->label_decl = decl;
4635       new_ent->names_in_scope = current_binding_level->names;
4636       new_ent->binding_level = current_binding_level;
4637       new_ent->lineno_o_goto = lineno;
4638       new_ent->filename_o_goto = input_filename;
4639       new_ent->next = named_label_uses;
4640       named_label_uses = new_ent;
4641     }
4642
4643   return decl;
4644 }
4645
4646 /* Look for a label named ID in the current function.  If one cannot
4647    be found, create one.  (We keep track of used, but undefined,
4648    labels, and complain about them at the end of a function.)  */
4649
4650 tree 
4651 lookup_label (id)
4652      tree id;
4653 {
4654   tree decl;
4655
4656   /* You can't use labels at global scope.  */
4657   if (current_function_decl == NULL_TREE)
4658     {
4659       error ("label `%s' referenced outside of any function",
4660              IDENTIFIER_POINTER (id));
4661       return NULL_TREE;
4662     }
4663   
4664   /* See if we've already got this label.  */
4665   decl = IDENTIFIER_LABEL_VALUE (id);
4666   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4667     return decl;
4668
4669   /* Record this label on the list of labels used in this function.
4670      We do this before calling make_label_decl so that we get the
4671      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4672   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4673                             named_labels);
4674   /* We need a new label.  */
4675   decl = make_label_decl (id, /*local_p=*/0);
4676   /* Now fill in the information we didn't have before.  */
4677   TREE_VALUE (named_labels) = decl;
4678
4679   return decl;
4680 }
4681
4682 /* Declare a local label named ID.  */
4683
4684 tree
4685 declare_local_label (id)
4686      tree id;
4687 {
4688   tree decl;
4689
4690   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4691      this scope we can restore the old value of
4692      IDENTIFIER_TYPE_VALUE.  */
4693   current_binding_level->shadowed_labels 
4694     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4695                  current_binding_level->shadowed_labels);
4696   /* Look for the label.  */
4697   decl = make_label_decl (id, /*local_p=*/1);
4698   /* Now fill in the information we didn't have before.  */
4699   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4700   
4701   return decl;
4702 }
4703
4704 /* Define a label, specifying the location in the source file.
4705    Return the LABEL_DECL node for the label, if the definition is valid.
4706    Otherwise return 0.  */
4707
4708 tree
4709 define_label (filename, line, name)
4710      char *filename;
4711      int line;
4712      tree name;
4713 {
4714   tree decl = lookup_label (name);
4715
4716   /* After labels, make any new cleanups go into their
4717      own new (temporary) binding contour.  */
4718   current_binding_level->more_cleanups_ok = 0;
4719
4720   if (name == get_identifier ("wchar_t"))
4721     cp_pedwarn ("label named wchar_t");
4722
4723   if (DECL_INITIAL (decl) != NULL_TREE)
4724     {
4725       cp_error ("duplicate label `%D'", decl);
4726       return 0;
4727     }
4728   else
4729     {
4730       struct named_label_list *uses, *prev;
4731       int identified = 0;
4732       int saw_eh = 0;
4733
4734       /* Mark label as having been defined.  */
4735       DECL_INITIAL (decl) = error_mark_node;
4736       /* Say where in the source.  */
4737       DECL_SOURCE_FILE (decl) = filename;
4738       DECL_SOURCE_LINE (decl) = line;
4739
4740       prev = NULL;
4741       uses = named_label_uses;
4742       while (uses != NULL)
4743         if (uses->label_decl == decl)
4744           {
4745             struct binding_level *b = current_binding_level;
4746             while (b)
4747               {
4748                 tree new_decls = b->names;
4749                 tree old_decls = (b == uses->binding_level)
4750                                   ? uses->names_in_scope : NULL_TREE;
4751                 while (new_decls != old_decls)
4752                   {
4753                     if (TREE_CODE (new_decls) == VAR_DECL
4754                         /* Don't complain about crossing initialization
4755                            of internal entities.  They can't be accessed,
4756                            and they should be cleaned up
4757                            by the time we get to the label.  */
4758                         && ! DECL_ARTIFICIAL (new_decls)
4759                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4760                              && pod_type_p (TREE_TYPE (new_decls))))
4761                       {
4762                         /* This is really only important if we're crossing
4763                            an initialization.  The POD stuff is just
4764                            pedantry; why should it matter if the class
4765                            contains a field of pointer to member type?  */
4766                         int problem = (DECL_INITIAL (new_decls)
4767                                        || (TYPE_NEEDS_CONSTRUCTING
4768                                            (TREE_TYPE (new_decls))));
4769
4770                         if (! identified)
4771                           {
4772                             if (problem)
4773                               {
4774                                 cp_error ("jump to label `%D'", decl);
4775                                 error_with_file_and_line
4776                                   (uses->filename_o_goto,
4777                                    uses->lineno_o_goto, "  from here");
4778                               }
4779                             else
4780                               {
4781                                 cp_pedwarn ("jump to label `%D'", decl);
4782                                 pedwarn_with_file_and_line
4783                                   (uses->filename_o_goto,
4784                                    uses->lineno_o_goto, "  from here");
4785                               }
4786                             identified = 1;
4787                           }
4788
4789                         if (problem)
4790                           cp_error_at ("  crosses initialization of `%#D'",
4791                                        new_decls);
4792                         else
4793                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4794                                          new_decls);
4795                       }
4796                     new_decls = TREE_CHAIN (new_decls);
4797                   }
4798                 if (b == uses->binding_level)
4799                   break;
4800                 if (b->eh_region && ! saw_eh)
4801                   {
4802                     if (! identified)
4803                       {
4804                         cp_error ("jump to label `%D'", decl);
4805                         error_with_file_and_line
4806                           (uses->filename_o_goto,
4807                            uses->lineno_o_goto, "  from here");
4808                         identified = 1;
4809                       }
4810                     error ("  enters exception handling block");
4811                     saw_eh = 1;
4812                   }
4813                 b = b->level_chain;
4814               }
4815
4816             if (prev != NULL)
4817               prev->next = uses->next;
4818             else
4819               named_label_uses = uses->next;
4820
4821             uses = uses->next;
4822           }
4823         else
4824           {
4825             prev = uses;
4826             uses = uses->next;
4827           }
4828       current_function_return_value = NULL_TREE;
4829       return decl;
4830     }
4831 }
4832
4833 struct cp_switch
4834 {
4835   struct binding_level *level;
4836   struct cp_switch *next;
4837 };
4838
4839 static struct cp_switch *switch_stack;
4840
4841 void
4842 push_switch ()
4843 {
4844   struct cp_switch *p
4845     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4846   p->level = current_binding_level;
4847   p->next = switch_stack;
4848   switch_stack = p;
4849 }
4850
4851 void
4852 pop_switch ()
4853 {
4854   switch_stack = switch_stack->next;
4855 }
4856
4857 /* Note that we've seen a definition of a case label, and complain if this
4858    is a bad place for one.  */
4859
4860 void
4861 define_case_label ()
4862 {
4863   tree cleanup = last_cleanup_this_contour ();
4864   struct binding_level *b = current_binding_level;
4865   int identified = 0;
4866
4867   if (! switch_stack)
4868     /* Don't crash; we'll complain in do_case.  */
4869     return;
4870   
4871   if (cleanup)
4872     {
4873       static int explained = 0;
4874       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4875       warning ("where case label appears here");
4876       if (!explained)
4877         {
4878           warning ("(enclose actions of previous case statements requiring");
4879           warning ("destructors in their own binding contours.)");
4880           explained = 1;
4881         }
4882     }
4883
4884   for (; b && b != switch_stack->level; b = b->level_chain)
4885     {
4886       tree new_decls = b->names;
4887       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4888         {
4889           if (TREE_CODE (new_decls) == VAR_DECL
4890               /* Don't complain about crossing initialization
4891                  of internal entities.  They can't be accessed,
4892                  and they should be cleaned up
4893                  by the time we get to the label.  */
4894               && ! DECL_ARTIFICIAL (new_decls)
4895               && ((DECL_INITIAL (new_decls) != NULL_TREE
4896                    && DECL_INITIAL (new_decls) != error_mark_node)
4897                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4898             {
4899               if (! identified)
4900                 error ("jump to case label");
4901               identified = 1;
4902               cp_error_at ("  crosses initialization of `%#D'",
4903                            new_decls);
4904             }
4905         }
4906     }
4907
4908   /* After labels, make any new cleanups go into their
4909      own new (temporary) binding contour.  */
4910
4911   current_binding_level->more_cleanups_ok = 0;
4912   current_function_return_value = NULL_TREE;
4913 }
4914 \f
4915 /* Return the list of declarations of the current level.
4916    Note that this list is in reverse order unless/until
4917    you nreverse it; and when you do nreverse it, you must
4918    store the result back using `storedecls' or you will lose.  */
4919
4920 tree
4921 getdecls ()
4922 {
4923   return current_binding_level->names;
4924 }
4925
4926 /* Return the list of type-tags (for structs, etc) of the current level.  */
4927
4928 tree
4929 gettags ()
4930 {
4931   return current_binding_level->tags;
4932 }
4933
4934 /* Store the list of declarations of the current level.
4935    This is done for the parameter declarations of a function being defined,
4936    after they are modified in the light of any missing parameters.  */
4937
4938 static void
4939 storedecls (decls)
4940      tree decls;
4941 {
4942   current_binding_level->names = decls;
4943 }
4944
4945 /* Similarly, store the list of tags of the current level.  */
4946
4947 void
4948 storetags (tags)
4949      tree tags;
4950 {
4951   current_binding_level->tags = tags;
4952 }
4953 \f
4954 /* Given NAME, an IDENTIFIER_NODE,
4955    return the structure (or union or enum) definition for that name.
4956    Searches binding levels from BINDING_LEVEL up to the global level.
4957    If THISLEVEL_ONLY is nonzero, searches only the specified context
4958    (but skips any tag-transparent contexts to find one that is
4959    meaningful for tags).
4960    FORM says which kind of type the caller wants;
4961    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4962    If the wrong kind of type is found, and it's not a template, an error is
4963    reported.  */
4964
4965 static tree
4966 lookup_tag (form, name, binding_level, thislevel_only)
4967      enum tree_code form;
4968      tree name;
4969      struct binding_level *binding_level;
4970      int thislevel_only;
4971 {
4972   register struct binding_level *level;
4973   /* Non-zero if, we should look past a pseudo-global level, even if
4974      THISLEVEL_ONLY.  */
4975   int allow_pseudo_global = 1;
4976
4977   for (level = binding_level; level; level = level->level_chain)
4978     {
4979       register tree tail;
4980       if (ANON_AGGRNAME_P (name))
4981         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4982           {
4983             /* There's no need for error checking here, because
4984                anon names are unique throughout the compilation.  */
4985             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4986               return TREE_VALUE (tail);
4987           }
4988       else if (level->namespace_p)
4989         /* Do namespace lookup. */
4990         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4991           {
4992             tree old = binding_for_name (name, tail);
4993
4994             /* If we just skipped past a pseudo global level, even
4995                though THISLEVEL_ONLY, and we find a template class
4996                declaration, then we use the _TYPE node for the
4997                template.  See the example below.  */
4998             if (thislevel_only && !allow_pseudo_global
4999                 && old && BINDING_VALUE (old) 
5000                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5001               old = TREE_TYPE (BINDING_VALUE (old));
5002             else 
5003               old = BINDING_TYPE (old);
5004
5005             /* If it has an original type, it is a typedef, and we
5006                should not return it.  */
5007             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5008               old = NULL_TREE;
5009             if (old && TREE_CODE (old) != form
5010                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5011               {
5012                 cp_error ("`%#D' redeclared as %C", old, form);
5013                 return NULL_TREE;
5014               }
5015             if (old)
5016               return old;
5017             if (thislevel_only || tail == global_namespace)
5018               return NULL_TREE;
5019           }
5020       else
5021         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5022           {
5023             if (TREE_PURPOSE (tail) == name)
5024               {
5025                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5026                 /* Should tighten this up; it'll probably permit
5027                    UNION_TYPE and a struct template, for example.  */
5028                 if (code != form
5029                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5030                   {
5031                     /* Definition isn't the kind we were looking for.  */
5032                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5033                               form);
5034                     return NULL_TREE;
5035                   }
5036                 return TREE_VALUE (tail);
5037               }
5038           }
5039       if (thislevel_only && ! level->tag_transparent)
5040         {
5041           if (level->pseudo_global && allow_pseudo_global)
5042             {
5043               /* We must deal with cases like this:
5044                  
5045                    template <class T> struct S;
5046                    template <class T> struct S {};
5047                    
5048                  When looking up `S', for the second declaration, we
5049                  would like to find the first declaration.  But, we
5050                  are in the pseudo-global level created for the
5051                  template parameters, rather than the (surrounding)
5052                  namespace level.  Thus, we keep going one more level,
5053                  even though THISLEVEL_ONLY is non-zero.  */
5054               allow_pseudo_global = 0;
5055               continue;
5056             }
5057           else
5058             return NULL_TREE;
5059         }
5060     }
5061   return NULL_TREE;
5062 }
5063
5064 #if 0
5065 void
5066 set_current_level_tags_transparency (tags_transparent)
5067      int tags_transparent;
5068 {
5069   current_binding_level->tag_transparent = tags_transparent;
5070 }
5071 #endif
5072
5073 /* Given a type, find the tag that was defined for it and return the tag name.
5074    Otherwise return 0.  However, the value can never be 0
5075    in the cases in which this is used.
5076
5077    C++: If NAME is non-zero, this is the new name to install.  This is
5078    done when replacing anonymous tags with real tag names.  */
5079
5080 static tree
5081 lookup_tag_reverse (type, name)
5082      tree type;
5083      tree name;
5084 {
5085   register struct binding_level *level;
5086
5087   for (level = current_binding_level; level; level = level->level_chain)
5088     {
5089       register tree tail;
5090       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5091         {
5092           if (TREE_VALUE (tail) == type)
5093             {
5094               if (name)
5095                 TREE_PURPOSE (tail) = name;
5096               return TREE_PURPOSE (tail);
5097             }
5098         }
5099     }
5100   return NULL_TREE;
5101 }
5102 \f
5103 /* Look up NAME in the NAMESPACE.  */
5104
5105 tree
5106 lookup_namespace_name (namespace, name)
5107      tree namespace, name;
5108 {
5109   tree val;
5110   tree template_id = NULL_TREE;
5111
5112   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5113
5114   if (TREE_CODE (name) == NAMESPACE_DECL)
5115     /* This happens for A::B<int> when B is a namespace. */
5116     return name;
5117   else if (TREE_CODE (name) == TEMPLATE_DECL)
5118     {
5119       /* This happens for A::B where B is a template, and there are no
5120          template arguments.  */
5121       cp_error ("invalid use of `%D'", name);
5122       return error_mark_node;
5123     }
5124
5125   namespace = ORIGINAL_NAMESPACE (namespace);
5126
5127   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5128     {
5129       template_id = name;
5130       name = TREE_OPERAND (name, 0);
5131       if (TREE_CODE (name) == OVERLOAD)
5132         name = DECL_NAME (OVL_CURRENT (name));
5133       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5134         name = DECL_NAME (name);
5135     }
5136
5137   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5138   
5139   val = make_node (CPLUS_BINDING);
5140   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5141     return error_mark_node;
5142
5143   if (BINDING_VALUE (val))
5144     {
5145       val = BINDING_VALUE (val);
5146
5147       if (template_id)
5148         {
5149           if (DECL_CLASS_TEMPLATE_P (val))
5150             val = lookup_template_class (val, 
5151                                          TREE_OPERAND (template_id, 1),
5152                                          /*in_decl=*/NULL_TREE,
5153                                          /*context=*/NULL_TREE,
5154                                          /*entering_scope=*/0);
5155           else if (DECL_FUNCTION_TEMPLATE_P (val)
5156                    || TREE_CODE (val) == OVERLOAD)
5157             val = lookup_template_function (val, 
5158                                             TREE_OPERAND (template_id, 1));
5159           else
5160             {
5161               cp_error ("`%D::%D' is not a template",
5162                         namespace, name);
5163               return error_mark_node;
5164             }
5165         }
5166
5167       /* If we have a single function from a using decl, pull it out.  */
5168       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5169         val = OVL_FUNCTION (val);
5170       return val;
5171     }
5172
5173   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5174   return error_mark_node;
5175 }
5176
5177 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5178
5179 static unsigned long
5180 typename_hash (k)
5181      hash_table_key k;
5182 {
5183   unsigned long hash;
5184   tree t;
5185
5186   t = (tree) k;
5187   hash = (((unsigned long) TYPE_CONTEXT (t))
5188           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5189
5190   return hash;
5191 }
5192
5193 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5194
5195 static boolean
5196 typename_compare (k1, k2)
5197      hash_table_key k1;
5198      hash_table_key k2;
5199 {
5200   tree t1;
5201   tree t2;
5202   tree d1;
5203   tree d2;
5204
5205   t1 = (tree) k1;
5206   t2 = (tree) k2;
5207   d1 = TYPE_NAME (t1);
5208   d2 = TYPE_NAME (t2);
5209   
5210   return (DECL_NAME (d1) == DECL_NAME (d2)
5211           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5212           && ((TREE_TYPE (t1) != NULL_TREE) 
5213               == (TREE_TYPE (t2) != NULL_TREE))
5214           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5215           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5216 }
5217
5218 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5219    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5220    is non-NULL, this type is being created by the implicit typename
5221    extension, and BASE_TYPE is a type named `t' in some base class of
5222    `T' which depends on template parameters.  
5223
5224    Returns the new TYPENAME_TYPE.  */
5225
5226 tree
5227 build_typename_type (context, name, fullname, base_type)
5228      tree context;
5229      tree name;
5230      tree fullname;
5231      tree base_type;
5232 {
5233   tree t;
5234   tree d;
5235   struct hash_entry* e;
5236
5237   static struct hash_table ht;
5238
5239   push_obstacks (&permanent_obstack, &permanent_obstack);
5240
5241   if (!ht.table)
5242     {
5243       static struct hash_table *h = &ht;
5244       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5245                             &typename_compare))
5246         fatal ("virtual memory exhausted");
5247       ggc_add_tree_hash_table_root (&h, 1);
5248     }
5249
5250   /* Build the TYPENAME_TYPE.  */
5251   t = make_lang_type (TYPENAME_TYPE);
5252   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5253   TYPENAME_TYPE_FULLNAME (t) = fullname;
5254   TREE_TYPE (t) = base_type;
5255
5256   /* Build the corresponding TYPE_DECL.  */
5257   d = build_decl (TYPE_DECL, name, t);
5258   TYPE_NAME (TREE_TYPE (d)) = d;
5259   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5260   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5261   DECL_ARTIFICIAL (d) = 1;
5262
5263   /* See if we already have this type.  */
5264   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5265   if (e)
5266     t = (tree) e->key;
5267   else
5268     /* Insert the type into the table.  */
5269     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5270
5271   pop_obstacks ();
5272
5273   return t;
5274 }
5275
5276 /* Resolve `typename CONTEXT::NAME'.  Returns an appropriate type,
5277    unless an error occurs, in which case error_mark_node is returned.
5278    If COMPLAIN zero, don't complain about any errors that occur.  */
5279
5280 tree
5281 make_typename_type (context, name, complain)
5282      tree context, name;
5283      int complain;
5284 {
5285   tree fullname;
5286
5287   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5288     {
5289       if (!(TYPE_LANG_SPECIFIC (name) 
5290             && (CLASSTYPE_IS_TEMPLATE (name) 
5291                 || CLASSTYPE_USE_TEMPLATE (name))))
5292         name = TYPE_IDENTIFIER (name);
5293       else
5294         /* Create a TEMPLATE_ID_EXPR for the type.  */
5295         name = build_nt (TEMPLATE_ID_EXPR,
5296                          CLASSTYPE_TI_TEMPLATE (name),
5297                          CLASSTYPE_TI_ARGS (name));
5298     }
5299   else if (TREE_CODE (name) == TYPE_DECL)
5300     name = DECL_NAME (name);
5301
5302   fullname = name;
5303
5304   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5305     {
5306       name = TREE_OPERAND (name, 0);
5307       if (TREE_CODE (name) == TEMPLATE_DECL)
5308         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5309     }
5310   if (TREE_CODE (name) != IDENTIFIER_NODE)
5311     my_friendly_abort (2000);
5312
5313   if (TREE_CODE (context) == NAMESPACE_DECL)
5314     {
5315       /* We can get here from typename_sub0 in the explicit_template_type
5316          expansion.  Just fail.  */
5317       if (complain)
5318         cp_error ("no class template named `%#T' in `%#T'",
5319                   name, context);
5320       return error_mark_node;
5321     }
5322
5323   if (! uses_template_parms (context)
5324       || currently_open_class (context))
5325     {
5326       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5327         {
5328           tree tmpl = NULL_TREE;
5329           if (IS_AGGR_TYPE (context))
5330             tmpl = lookup_field (context, name, 0, 0);
5331           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5332             {
5333               if (complain)
5334                 cp_error ("no class template named `%#T' in `%#T'",
5335                           name, context);
5336               return error_mark_node;
5337             }
5338
5339           return lookup_template_class (tmpl, 
5340                                         TREE_OPERAND (fullname, 1),
5341                                         NULL_TREE, context, 
5342                                         /*entering_scope=*/0);
5343         }
5344       else
5345         {
5346           tree t;
5347           
5348           if (!IS_AGGR_TYPE (context))
5349             {
5350               if (complain)
5351                 cp_error ("no type named `%#T' in `%#T'", name, context);
5352               return error_mark_node;
5353             }
5354
5355           t = lookup_field (context, name, 0, 1);
5356           if (t)
5357             return TREE_TYPE (t);
5358         }
5359     }
5360
5361   /* If the CONTEXT is not a template type, then either the field is
5362      there now or its never going to be.  */
5363   if (!uses_template_parms (context))
5364     {
5365       if (complain)
5366         cp_error ("no type named `%#T' in `%#T'", name, context);
5367       return error_mark_node;
5368     }
5369     
5370   
5371   return build_typename_type (context, name, fullname,  NULL_TREE);
5372 }
5373
5374 /* Select the right _DECL from multiple choices. */
5375
5376 static tree
5377 select_decl (binding, flags)
5378      tree binding;
5379      int flags;
5380 {
5381   tree val;
5382   val = BINDING_VALUE (binding);
5383   if (LOOKUP_NAMESPACES_ONLY (flags))
5384     {
5385       /* We are not interested in types. */
5386       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5387         return val;
5388       return NULL_TREE;
5389     }
5390   
5391   /* If we could have a type and
5392      we have nothing or we need a type and have none.  */
5393   if (BINDING_TYPE (binding)
5394       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5395                    && TREE_CODE (val) != TYPE_DECL)))
5396     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5397   /* Don't return non-types if we really prefer types. */
5398   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5399            && (TREE_CODE (val) != TEMPLATE_DECL
5400                || !DECL_CLASS_TEMPLATE_P (val)))
5401     val = NULL_TREE;
5402
5403   return val;
5404 }
5405
5406 /* Unscoped lookup of a global: iterate over current namespaces,
5407    considering using-directives.  If SPACESP is non-NULL, store a list
5408    of the namespaces we've considered in it.  */
5409
5410 tree
5411 unqualified_namespace_lookup (name, flags, spacesp)
5412      tree name;
5413      int flags;
5414      tree *spacesp;
5415 {
5416   tree b = make_node (CPLUS_BINDING);
5417   tree initial = current_decl_namespace();
5418   tree scope = initial;
5419   tree siter;
5420   struct binding_level *level;
5421   tree val = NULL_TREE;
5422
5423   if (spacesp)
5424     *spacesp = NULL_TREE;
5425
5426   for (; !val; scope = CP_DECL_CONTEXT (scope))
5427     {
5428       if (spacesp)
5429         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5430       val = binding_for_name (name, scope);
5431
5432       /* Initialize binding for this context. */
5433       BINDING_VALUE (b) = BINDING_VALUE (val);
5434       BINDING_TYPE (b) = BINDING_TYPE (val);
5435
5436       /* Add all _DECLs seen through local using-directives. */
5437       for (level = current_binding_level; 
5438            !level->namespace_p;
5439            level = level->level_chain)
5440         if (!lookup_using_namespace (name, b, level->using_directives,
5441                                      scope, flags, spacesp))
5442           /* Give up because of error. */
5443           return error_mark_node;
5444
5445       /* Add all _DECLs seen through global using-directives. */
5446       /* XXX local and global using lists should work equally. */
5447       siter = initial;
5448       while (1)
5449         {
5450           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5451                                        scope, flags, spacesp))
5452             /* Give up because of error. */
5453             return error_mark_node;
5454           if (siter == scope) break;
5455           siter = CP_DECL_CONTEXT (siter);
5456         }
5457
5458       val = select_decl (b, flags);
5459       if (scope == global_namespace)
5460         break;
5461     }
5462   return val;
5463 }
5464
5465 /* Combine prefer_type and namespaces_only into flags.  */
5466
5467 static int
5468 lookup_flags (prefer_type, namespaces_only)
5469   int prefer_type, namespaces_only;
5470 {
5471   if (namespaces_only)
5472     return LOOKUP_PREFER_NAMESPACES;
5473   if (prefer_type > 1)
5474     return LOOKUP_PREFER_TYPES;
5475   if (prefer_type > 0)
5476     return LOOKUP_PREFER_BOTH;
5477   return 0;
5478 }
5479
5480 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5481    ignore it or not.  Subroutine of lookup_name_real.  */
5482
5483 static tree
5484 qualify_lookup (val, flags)
5485      tree val;
5486      int flags;
5487 {
5488   if (val == NULL_TREE)
5489     return val;
5490   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5491     return val;
5492   if ((flags & LOOKUP_PREFER_TYPES)
5493       && (TREE_CODE (val) == TYPE_DECL
5494           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5495               && DECL_CLASS_TEMPLATE_P (val))))
5496     return val;
5497   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5498     return NULL_TREE;
5499   return val;
5500 }
5501
5502 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5503    that.  */
5504
5505 static void
5506 warn_about_implicit_typename_lookup (typename, binding)
5507      tree typename;
5508      tree binding;
5509 {
5510   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5511   tree name = DECL_NAME (typename);
5512
5513   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5514          && CLASSTYPE_TEMPLATE_INFO (subtype)
5515          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5516       && ! (TREE_CODE (binding) == TYPE_DECL
5517             && same_type_p (TREE_TYPE (binding), subtype)))
5518     {
5519       cp_warning ("lookup of `%D' finds `%#D'", 
5520                   name, binding);
5521       cp_warning ("  instead of `%D' from dependent base class",
5522                   typename);
5523       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5524                   constructor_name (current_class_type), name);
5525     }
5526 }
5527
5528 /* Look up NAME in the current binding level and its superiors in the
5529    namespace of variables, functions and typedefs.  Return a ..._DECL
5530    node of some kind representing its definition if there is only one
5531    such declaration, or return a TREE_LIST with all the overloaded
5532    definitions if there are many, or return 0 if it is undefined.
5533
5534    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5535    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5536    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5537    Otherwise we prefer non-TYPE_DECLs.  
5538
5539    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5540    using IDENTIFIER_CLASS_VALUE.  */
5541
5542 static tree
5543 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5544      tree name;
5545      int prefer_type, nonclass, namespaces_only;
5546 {
5547   tree t;
5548   tree val = NULL_TREE;
5549   int yylex = 0;
5550   tree from_obj = NULL_TREE;
5551   int flags;
5552   int val_is_implicit_typename = 0;
5553
5554   /* Hack: copy flag set by parser, if set. */
5555   if (only_namespace_names)
5556     namespaces_only = 1;
5557
5558   if (prefer_type == -2)
5559     {
5560       extern int looking_for_typename;
5561       tree type = NULL_TREE;
5562
5563       yylex = 1;
5564       prefer_type = looking_for_typename;
5565
5566       flags = lookup_flags (prefer_type, namespaces_only);
5567       /* If the next thing is '<', class templates are types. */
5568       if (looking_for_template)
5569         flags |= LOOKUP_TEMPLATES_EXPECTED;
5570
5571       /* std:: becomes :: for now.  */
5572       if (got_scope == std_node)
5573         got_scope = void_type_node;
5574
5575       if (got_scope)
5576         type = got_scope;
5577       else if (got_object != error_mark_node)
5578         type = got_object;
5579       
5580       if (type)
5581         {
5582           if (type == error_mark_node)
5583             return error_mark_node;
5584           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5585             type = TREE_TYPE (type);
5586
5587           if (TYPE_P (type))
5588             type = complete_type (type);
5589
5590           if (TREE_CODE (type) == VOID_TYPE)
5591             type = global_namespace;
5592           if (TREE_CODE (type) == NAMESPACE_DECL)
5593             {
5594               val = make_node (CPLUS_BINDING);
5595               flags |= LOOKUP_COMPLAIN;
5596               if (!qualified_lookup_using_namespace (name, type, val, flags))
5597                 return NULL_TREE;
5598               val = select_decl (val, flags);
5599             }
5600           else if (! IS_AGGR_TYPE (type)
5601                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5602                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5603                    || TREE_CODE (type) == TYPENAME_TYPE)
5604             /* Someone else will give an error about this if needed.  */
5605             val = NULL_TREE;
5606           else if (type == current_class_type)
5607             val = IDENTIFIER_CLASS_VALUE (name);
5608           else
5609             val = lookup_member (type, name, 0, prefer_type);
5610         }
5611       else
5612         val = NULL_TREE;
5613
5614       if (got_scope)
5615         goto done;
5616       else if (got_object && val)
5617         from_obj = val;
5618     }
5619   else
5620     {
5621       flags = lookup_flags (prefer_type, namespaces_only);
5622       /* If we're not parsing, we need to complain. */
5623       flags |= LOOKUP_COMPLAIN;
5624     }
5625
5626   /* First, look in non-namespace scopes.  */
5627
5628   if (current_class_type == NULL_TREE)
5629     nonclass = 1;
5630
5631   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5632     {
5633       tree binding;
5634
5635       if (!LOCAL_BINDING_P (t) && nonclass)
5636         /* We're not looking for class-scoped bindings, so keep going.  */
5637         continue;
5638       
5639       /* If this is the kind of thing we're looking for, we're done.  */
5640       if (qualify_lookup (BINDING_VALUE (t), flags))
5641         binding = BINDING_VALUE (t);
5642       else if ((flags & LOOKUP_PREFER_TYPES) 
5643                && qualify_lookup (BINDING_TYPE (t), flags))
5644         binding = BINDING_TYPE (t);
5645       else
5646         binding = NULL_TREE;
5647
5648       if (binding
5649           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5650         {
5651           if (val_is_implicit_typename && !yylex)
5652             warn_about_implicit_typename_lookup (val, binding);
5653           val = binding;
5654           val_is_implicit_typename 
5655             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5656           if (!val_is_implicit_typename)
5657             break;
5658         }
5659     }
5660
5661   /* Now lookup in namespace scopes.  */
5662   if (!val || val_is_implicit_typename)
5663     {
5664       t = unqualified_namespace_lookup (name, flags, 0);
5665       if (t)
5666         {
5667           if (val_is_implicit_typename && !yylex)
5668             warn_about_implicit_typename_lookup (val, t);
5669           val = t;
5670         }
5671     }
5672
5673  done:
5674   if (val)
5675     {
5676       /* This should only warn about types used in qualified-ids.  */
5677       if (from_obj && from_obj != val)
5678         {
5679           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5680               && TREE_CODE (val) == TYPE_DECL
5681               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5682             {
5683               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5684                           name, got_object, TREE_TYPE (from_obj));
5685               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5686                           TREE_TYPE (val));
5687             }
5688
5689           /* We don't change val to from_obj if got_object depends on
5690              template parms because that breaks implicit typename for
5691              destructor calls.  */
5692           if (! uses_template_parms (got_object))
5693             val = from_obj;
5694         }
5695
5696       /* If we have a single function from a using decl, pull it out.  */
5697       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5698         val = OVL_FUNCTION (val);
5699     }
5700   else if (from_obj)
5701     val = from_obj;
5702
5703   return val;
5704 }
5705
5706 tree
5707 lookup_name_nonclass (name)
5708      tree name;
5709 {
5710   return lookup_name_real (name, 0, 1, 0);
5711 }
5712
5713 tree
5714 lookup_function_nonclass (name, args)
5715      tree name;
5716      tree args;
5717 {
5718   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5719 }
5720
5721 tree
5722 lookup_name_namespace_only (name)
5723      tree name;
5724 {
5725   /* type-or-namespace, nonclass, namespace_only */
5726   return lookup_name_real (name, 1, 1, 1);
5727 }
5728
5729 tree
5730 lookup_name (name, prefer_type)
5731      tree name;
5732      int prefer_type;
5733 {
5734   return lookup_name_real (name, prefer_type, 0, 0);
5735 }
5736
5737 /* Similar to `lookup_name' but look only in the innermost non-class
5738    binding level.  */
5739
5740 tree
5741 lookup_name_current_level (name)
5742      tree name;
5743 {
5744   struct binding_level *b;
5745   tree t = NULL_TREE;
5746
5747   b = current_binding_level;
5748   while (b->parm_flag == 2)
5749     b = b->level_chain;
5750
5751   if (b->namespace_p)
5752     {
5753       t = IDENTIFIER_NAMESPACE_VALUE (name);
5754
5755       /* extern "C" function() */
5756       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5757         t = TREE_VALUE (t);
5758     }
5759   else if (IDENTIFIER_BINDING (name) 
5760            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5761     {
5762       while (1)
5763         {
5764           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5765             return IDENTIFIER_VALUE (name);
5766           
5767           if (b->keep == 2)
5768             b = b->level_chain;
5769           else
5770             break;
5771         }
5772     }
5773
5774   return t;
5775 }
5776
5777 /* Like lookup_name_current_level, but for types.  */
5778
5779 tree
5780 lookup_type_current_level (name)
5781      tree name;
5782 {
5783   register tree t = NULL_TREE;
5784
5785   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5786
5787   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5788       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5789     {
5790       struct binding_level *b = current_binding_level;
5791       while (1)
5792         {
5793           if (purpose_member (name, b->type_shadowed))
5794             return REAL_IDENTIFIER_TYPE_VALUE (name);
5795           if (b->keep == 2)
5796             b = b->level_chain;
5797           else
5798             break;
5799         }
5800     }
5801
5802   return t;
5803 }
5804
5805 void
5806 begin_only_namespace_names ()
5807 {
5808   only_namespace_names = 1;
5809 }
5810
5811 void
5812 end_only_namespace_names ()
5813 {
5814   only_namespace_names = 0;
5815 }
5816 \f
5817 /* Arrange for the user to get a source line number, even when the
5818    compiler is going down in flames, so that she at least has a
5819    chance of working around problems in the compiler.  We used to
5820    call error(), but that let the segmentation fault continue
5821    through; now, it's much more passive by asking them to send the
5822    maintainers mail about the problem.  */
5823
5824 static void
5825 signal_catch (sig)
5826      int sig ATTRIBUTE_UNUSED;
5827 {
5828   signal (SIGSEGV, SIG_DFL);
5829 #ifdef SIGIOT
5830   signal (SIGIOT, SIG_DFL);
5831 #endif
5832 #ifdef SIGILL
5833   signal (SIGILL, SIG_DFL);
5834 #endif
5835 #ifdef SIGABRT
5836   signal (SIGABRT, SIG_DFL);
5837 #endif
5838 #ifdef SIGBUS
5839   signal (SIGBUS, SIG_DFL);
5840 #endif
5841   my_friendly_abort (0);
5842 }
5843
5844 /* Push the declarations of builtin types into the namespace.
5845    RID_INDEX, if < RID_MAX is the index of the builtin type
5846    in the array RID_POINTERS.  NAME is the name used when looking
5847    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5848
5849 static void
5850 record_builtin_type (rid_index, name, type)
5851      enum rid rid_index;
5852      const char *name;
5853      tree type;
5854 {
5855   tree rname = NULL_TREE, tname = NULL_TREE;
5856   tree tdecl = NULL_TREE;
5857
5858   if ((int) rid_index < (int) RID_MAX)
5859     rname = ridpointers[(int) rid_index];
5860   if (name)
5861     tname = get_identifier (name);
5862
5863   TYPE_BUILT_IN (type) = 1;
5864   
5865   if (tname)
5866     {
5867       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5868       set_identifier_type_value (tname, NULL_TREE);
5869       if ((int) rid_index < (int) RID_MAX)
5870         /* Built-in types live in the global namespace. */
5871         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5872     }
5873   if (rname != NULL_TREE)
5874     {
5875       if (tname != NULL_TREE)
5876         {
5877           set_identifier_type_value (rname, NULL_TREE);
5878           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5879         }
5880       else
5881         {
5882           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5883           set_identifier_type_value (rname, NULL_TREE);
5884         }
5885     }
5886 }
5887
5888 /* Record one of the standard Java types.
5889  * Declare it as having the given NAME.
5890  * If SIZE > 0, it is the size of one of the integral types;
5891  * otherwise it is the negative of the size of one of the other types.  */
5892
5893 static tree
5894 record_builtin_java_type (name, size)
5895      const char *name;
5896      int size;
5897 {
5898   tree type, decl;
5899   if (size > 0)
5900     type = make_signed_type (size);
5901   else if (size > -32)
5902     { /* "__java_char" or ""__java_boolean". */
5903       type = make_unsigned_type (-size);
5904       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5905     }
5906   else
5907     { /* "__java_float" or ""__java_double". */
5908       type = make_node (REAL_TYPE);
5909       TYPE_PRECISION (type) = - size;
5910       layout_type (type);
5911     }
5912   record_builtin_type (RID_MAX, name, type);
5913   decl = TYPE_NAME (type);
5914
5915   /* Suppress generate debug symbol entries for these types,
5916      since for normal C++ they are just clutter.
5917      However, push_lang_context undoes this if extern "Java" is seen. */
5918   DECL_IGNORED_P (decl) = 1;
5919
5920   TYPE_FOR_JAVA (type) = 1;
5921   return type;
5922 }
5923
5924 /* Push a type into the namespace so that the back-ends ignore it. */
5925
5926 static void
5927 record_unknown_type (type, name)
5928      tree type;
5929      const char *name;
5930 {
5931   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5932   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5933   DECL_IGNORED_P (decl) = 1;
5934   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5935   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5936   TYPE_ALIGN (type) = 1;
5937   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5938
5939
5940 /* Push overloaded decl, in global scope, with one argument so it
5941    can be used as a callback from define_function.  */
5942
5943 static void
5944 push_overloaded_decl_1 (x)
5945      tree x;
5946 {
5947   pushdecl (x);
5948 }
5949
5950 inline tree
5951 auto_function (name, type)
5952      tree name, type;
5953 {
5954   return define_function
5955     (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5956      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5957                                               0)));
5958 }
5959
5960 /* Create the predefined scalar types of C,
5961    and some nodes representing standard constants (0, 1, (void *)0).
5962    Initialize the global binding level.
5963    Make definitions for built-in primitive functions.  */
5964
5965 void
5966 init_decl_processing ()
5967 {
5968   tree fields[20];
5969   int wchar_type_size;
5970   tree array_domain_type;
5971
5972   /* Have to make these distinct before we try using them.  */
5973   lang_name_cplusplus = get_identifier ("C++");
5974   lang_name_c = get_identifier ("C");
5975   lang_name_java = get_identifier ("Java");
5976
5977   /* Let the back-end now how to save and restore language-specific
5978      per-function globals.  */
5979   init_lang_status = &push_cp_function_context;
5980   free_lang_status = &pop_cp_function_context;
5981   mark_lang_status = &mark_cp_function_context;
5982
5983   cp_parse_init ();
5984   init_decl2 ();
5985   init_pt ();
5986
5987   /* Create the global variables.  */
5988   push_to_top_level ();
5989
5990   /* Enter the global namespace. */
5991   my_friendly_assert (global_namespace == NULL_TREE, 375);
5992   push_namespace (get_identifier ("::"));
5993   global_namespace = current_namespace;
5994   current_lang_name = NULL_TREE;
5995
5996   if (flag_strict_prototype == 2)
5997     flag_strict_prototype = pedantic;
5998   if (! flag_permissive && ! pedantic)
5999     flag_pedantic_errors = 1;
6000
6001   strict_prototypes_lang_c = flag_strict_prototype;
6002
6003   /* Initially, C.  */
6004   current_lang_name = lang_name_c;
6005
6006   current_function_decl = NULL_TREE;
6007   current_binding_level = NULL_BINDING_LEVEL;
6008   free_binding_level = NULL_BINDING_LEVEL;
6009
6010   /* Because most segmentation signals can be traced back into user
6011      code, catch them and at least give the user a chance of working
6012      around compiler bugs.  */
6013   signal (SIGSEGV, signal_catch);
6014
6015   /* We will also catch aborts in the back-end through signal_catch and
6016      give the user a chance to see where the error might be, and to defeat
6017      aborts in the back-end when there have been errors previously in their
6018      code.  */
6019 #ifdef SIGIOT
6020   signal (SIGIOT, signal_catch);
6021 #endif
6022 #ifdef SIGILL
6023   signal (SIGILL, signal_catch);
6024 #endif
6025 #ifdef SIGABRT
6026   signal (SIGABRT, signal_catch);
6027 #endif
6028 #ifdef SIGBUS
6029   signal (SIGBUS, signal_catch);
6030 #endif
6031
6032   build_common_tree_nodes (flag_signed_char);
6033
6034   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6035   TREE_TYPE (error_mark_list) = error_mark_node;
6036
6037   /* Make the binding_level structure for global names.  */
6038   pushlevel (0);
6039   global_binding_level = current_binding_level;
6040   /* The global level is the namespace level of ::.  */
6041   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6042   declare_namespace_level ();
6043
6044   this_identifier = get_identifier (THIS_NAME);
6045   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6046   ctor_identifier = get_identifier (CTOR_NAME);
6047   dtor_identifier = get_identifier (DTOR_NAME);
6048   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6049   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6050   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6051   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6052   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6053
6054   /* Define `int' and `char' first so that dbx will output them first.  */
6055   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6056   record_builtin_type (RID_CHAR, "char", char_type_node);
6057
6058   /* `signed' is the same as `int' */
6059   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6060   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6061   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6062   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6063   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6064   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6065   record_builtin_type (RID_MAX, "long long unsigned int",
6066                        long_long_unsigned_type_node);
6067   record_builtin_type (RID_MAX, "long long unsigned",
6068                        long_long_unsigned_type_node);
6069   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6070   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6071   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6072
6073   ptrdiff_type_node
6074     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6075
6076   /* Define both `signed char' and `unsigned char'.  */
6077   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6078   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6079
6080   /* `unsigned long' is the standard type for sizeof.
6081      Note that stddef.h uses `unsigned long',
6082      and this must agree, even if long and int are the same size.  */
6083   set_sizetype
6084     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6085
6086   /* Create the widest literal types. */
6087   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6088   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6089                         widest_integer_literal_type_node));
6090
6091   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6092   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6093                         widest_unsigned_literal_type_node));
6094
6095   /* These are types that type_for_size and type_for_mode use.  */
6096   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6097   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6098   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6099   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6100 #if HOST_BITS_PER_WIDE_INT >= 64
6101   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6102 #endif
6103   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6104   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6105   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6106   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6107 #if HOST_BITS_PER_WIDE_INT >= 64
6108   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6109 #endif
6110
6111   build_common_tree_nodes_2 (flag_short_double);
6112
6113   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6114   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6115   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6116   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6117   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6118   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6119   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6120   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6121
6122   integer_two_node = build_int_2 (2, 0);
6123   TREE_TYPE (integer_two_node) = integer_type_node;
6124   integer_three_node = build_int_2 (3, 0);
6125   TREE_TYPE (integer_three_node) = integer_type_node;
6126
6127   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6128   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6129   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6130   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6131   TYPE_PRECISION (boolean_type_node) = 1;
6132   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6133   boolean_false_node = build_int_2 (0, 0);
6134   TREE_TYPE (boolean_false_node) = boolean_type_node;
6135   boolean_true_node = build_int_2 (1, 0);
6136   TREE_TYPE (boolean_true_node) = boolean_type_node;
6137
6138   signed_size_zero_node = build_int_2 (0, 0);  record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6139   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6140   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6141
6142   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6143                         complex_integer_type_node));
6144   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6145                         complex_float_type_node));
6146   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6147                         complex_double_type_node));
6148   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6149                         complex_long_double_type_node));
6150
6151   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6152
6153   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6154   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6155   TREE_PARMLIST (void_list_node) = 1;
6156
6157   /* Used for expressions that do nothing, but are not errors.  */
6158   void_zero_node = build_int_2 (0, 0);
6159   TREE_TYPE (void_zero_node) = void_type_node;
6160
6161   string_type_node = build_pointer_type (char_type_node);
6162   const_string_type_node
6163     = build_pointer_type (build_qualified_type (char_type_node, 
6164                                                 TYPE_QUAL_CONST));
6165   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6166 #if 0
6167   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6168 #endif
6169
6170   /* Make a type to be the domain of a few array types
6171      whose domains don't really matter.
6172      200 is small enough that it always fits in size_t
6173      and large enough that it can hold most function names for the
6174      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6175   array_domain_type = build_index_type (build_int_2 (200, 0));
6176
6177   /* Make a type for arrays of characters.
6178      With luck nothing will ever really depend on the length of this
6179      array type.  */
6180   char_array_type_node
6181     = build_array_type (char_type_node, array_domain_type);
6182   /* Likewise for arrays of ints.  */
6183   int_array_type_node
6184     = build_array_type (integer_type_node, array_domain_type);
6185
6186   /* This is just some anonymous class type.  Nobody should ever
6187      need to look inside this envelope.  */
6188   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6189
6190   if (flag_huge_objects)
6191     delta_type_node = long_integer_type_node;
6192   else
6193     delta_type_node = short_integer_type_node;
6194
6195   default_function_type
6196     = build_function_type (integer_type_node, NULL_TREE);
6197
6198   ptr_type_node = build_pointer_type (void_type_node);
6199   const_ptr_type_node
6200     = build_pointer_type (build_qualified_type (void_type_node,
6201                                                 TYPE_QUAL_CONST));
6202   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6203   lang_type_promotes_to = convert_type_from_ellipsis;
6204
6205   void_ftype_ptr
6206     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6207
6208   /* C++ extensions */
6209
6210   unknown_type_node = make_node (UNKNOWN_TYPE);
6211   record_unknown_type (unknown_type_node, "unknown type");
6212
6213   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6214   TREE_TYPE (unknown_type_node) = unknown_type_node;
6215
6216   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6217
6218   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6219      result.  */
6220   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6221   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6222
6223   /* This is special for C++ so functions can be overloaded.  */
6224   wchar_type_node = get_identifier (flag_short_wchar
6225                                     ? "short unsigned int"
6226                                     : WCHAR_TYPE);
6227   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6228   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6229   signed_wchar_type_node = make_signed_type (wchar_type_size);
6230   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6231   wchar_type_node
6232     = TREE_UNSIGNED (wchar_type_node)
6233       ? unsigned_wchar_type_node
6234       : signed_wchar_type_node;
6235   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6236
6237   /* Artificial declaration of wchar_t -- can be bashed */
6238   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6239                                 wchar_type_node);
6240   pushdecl (wchar_decl_node);
6241
6242   /* This is for wide string constants.  */
6243   wchar_array_type_node
6244     = build_array_type (wchar_type_node, array_domain_type);
6245
6246   if (flag_vtable_thunks)
6247     {
6248       /* Make sure we get a unique function type, so we can give
6249          its pointer type a name.  (This wins for gdb.) */
6250       tree vfunc_type = make_node (FUNCTION_TYPE);
6251       TREE_TYPE (vfunc_type) = integer_type_node;
6252       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6253       layout_type (vfunc_type);
6254
6255       vtable_entry_type = build_pointer_type (vfunc_type);
6256     }
6257   else
6258     {
6259       vtable_entry_type = make_lang_type (RECORD_TYPE);
6260       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6261                                    delta_type_node);
6262       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6263                                    delta_type_node);
6264       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6265                                    ptr_type_node);
6266       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6267                            double_type_node);
6268
6269       /* Make this part of an invisible union.  */
6270       fields[3] = copy_node (fields[2]);
6271       TREE_TYPE (fields[3]) = delta_type_node;
6272       DECL_NAME (fields[3]) = delta2_identifier;
6273       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6274       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6275       TREE_UNSIGNED (fields[3]) = 0;
6276       TREE_CHAIN (fields[2]) = fields[3];
6277       vtable_entry_type = build_qualified_type (vtable_entry_type,
6278                                                 TYPE_QUAL_CONST);
6279     }
6280   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6281
6282   vtbl_type_node
6283     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6284   layout_type (vtbl_type_node);
6285   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6286   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6287   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6288   layout_type (vtbl_ptr_type_node);
6289   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6290
6291   std_node = build_decl (NAMESPACE_DECL, 
6292                          get_identifier (flag_honor_std ? "fake std":"std"),
6293                          void_type_node);
6294   pushdecl (std_node);
6295
6296   global_type_node = make_node (LANG_TYPE);
6297   record_unknown_type (global_type_node, "global type");
6298
6299   /* Now, C++.  */
6300   current_lang_name = lang_name_cplusplus;
6301
6302   {
6303     tree bad_alloc_type_node, newtype, deltype;
6304     if (flag_honor_std)
6305       push_namespace (get_identifier ("std"));
6306     bad_alloc_type_node = xref_tag
6307       (class_type_node, get_identifier ("bad_alloc"), 1);
6308     if (flag_honor_std)
6309       pop_namespace ();
6310     newtype = build_exception_variant
6311       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6312     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6313     auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6314     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6315     global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6316                                           deltype);
6317     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6318   }
6319
6320   abort_fndecl
6321     = define_function ("__pure_virtual", void_ftype, 0, 0);
6322
6323   /* Perform other language dependent initializations.  */
6324   init_class_processing ();
6325   init_init_processing ();
6326   init_search_processing ();
6327   init_rtti_processing ();
6328
6329   if (flag_exceptions)
6330     init_exception_processing ();
6331   if (flag_no_inline)
6332     {
6333       flag_inline_functions = 0;
6334     }
6335
6336   if (! supports_one_only ())
6337     flag_weak = 0;
6338
6339   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6340   declare_function_name ();
6341
6342   /* Prepare to check format strings against argument lists.  */
6343   init_function_format_info ();
6344
6345   /* Show we use EH for cleanups.  */
6346   using_eh_for_cleanups ();
6347
6348   print_error_function = lang_print_error_function;
6349   lang_get_alias_set = &c_get_alias_set;
6350   valid_lang_attribute = cp_valid_lang_attribute;
6351
6352   /* Maintain consistency.  Perhaps we should just complain if they
6353      say -fwritable-strings?  */
6354   if (flag_writable_strings)
6355     flag_const_strings = 0;
6356
6357   /* Add GC roots for all of our global variables.  */
6358   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6359   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6360   ggc_add_tree_root (&integer_three_node, 1);
6361   ggc_add_tree_root (&integer_two_node, 1);
6362   ggc_add_tree_root (&signed_size_zero_node, 1);
6363   ggc_add_tree_root (&size_one_node, 1);
6364   ggc_add_tree_root (&size_zero_node, 1);
6365   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6366                 mark_binding_level);
6367   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6368   ggc_add_tree_root (&static_ctors, 1);
6369   ggc_add_tree_root (&static_dtors, 1);
6370   ggc_add_tree_root (&lastiddecl, 1);
6371
6372   ggc_add_tree_root (&enum_next_value, 1);
6373   ggc_add_tree_root (&last_function_parm_tags, 1);
6374   ggc_add_tree_root (&current_function_return_value, 1);
6375   ggc_add_tree_root (&current_function_parms, 1);
6376   ggc_add_tree_root (&current_function_parm_tags, 1);
6377   ggc_add_tree_root (&last_function_parms, 1);
6378   ggc_add_tree_root (&error_mark_list, 1);
6379
6380   ggc_add_tree_root (&global_namespace, 1);
6381   ggc_add_tree_root (&global_type_node, 1);
6382   ggc_add_tree_root (&anonymous_namespace_name, 1);
6383
6384   ggc_add_tree_root (&got_object, 1);
6385   ggc_add_tree_root (&got_scope, 1);
6386
6387   ggc_add_tree_root (&current_lang_name, 1);
6388   ggc_add_tree_root (&static_aggregates, 1);
6389 }
6390
6391 /* Function to print any language-specific context for an error message.  */
6392
6393 static void
6394 lang_print_error_function (file)
6395      const char *file;
6396 {
6397   default_print_error_function (file);
6398   maybe_print_template_context ();
6399 }
6400
6401 /* Make a definition for a builtin function named NAME and whose data type
6402    is TYPE.  TYPE should be a function type with argument types.
6403
6404    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6405    the name to be called if we can't opencode the function.  */
6406
6407 tree
6408 define_function (name, type, pfn, library_name)
6409      const char *name;
6410      tree type;
6411      void (*pfn) PROTO((tree));
6412      const char *library_name;
6413 {
6414   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6415   DECL_EXTERNAL (decl) = 1;
6416   TREE_PUBLIC (decl) = 1;
6417   DECL_ARTIFICIAL (decl) = 1;
6418
6419   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6420   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6421
6422   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6423      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6424      function in the namespace.  */
6425   if (pfn) (*pfn) (decl);
6426   if (library_name)
6427     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6428   make_function_rtl (decl);
6429   return decl;
6430 }
6431
6432
6433 /* Wrapper around define_function, for the benefit of 
6434    c_common_nodes_and_builtins.
6435    FUNCTION_CODE tells later passes how to compile calls to this function.
6436    See tree.h for its possible values.  */
6437
6438 tree
6439 builtin_function (name, type, code, class, libname)
6440      const char *name;
6441      tree type;
6442      int code;
6443      enum built_in_class class;
6444      const char *libname;
6445 {
6446   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6447                                libname);
6448   DECL_BUILT_IN_CLASS (decl) = class;
6449   DECL_FUNCTION_CODE (decl) = code;
6450   return decl;
6451 }
6452 \f
6453 /* When we call finish_struct for an anonymous union, we create
6454    default copy constructors and such.  But, an anonymous union
6455    shouldn't have such things; this function undoes the damage to the
6456    anonymous union type T.
6457
6458    (The reason that we create the synthesized methods is that we don't
6459    distinguish `union { int i; }' from `typedef union { int i; } U'.
6460    The first is an anonymous union; the second is just an ordinary
6461    union type.)  */
6462
6463 void
6464 fixup_anonymous_aggr (t)
6465      tree t;
6466 {
6467   tree *q;
6468
6469   /* Wipe out memory of synthesized methods */
6470   TYPE_HAS_CONSTRUCTOR (t) = 0;
6471   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6472   TYPE_HAS_INIT_REF (t) = 0;
6473   TYPE_HAS_CONST_INIT_REF (t) = 0;
6474   TYPE_HAS_ASSIGN_REF (t) = 0;
6475   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6476
6477   /* Splice the implicitly generated functions out of the TYPE_METHODS
6478      list.  */
6479   q = &TYPE_METHODS (t);
6480   while (*q)
6481     {
6482       if (DECL_ARTIFICIAL (*q))
6483         *q = TREE_CHAIN (*q);
6484       else
6485         q = &TREE_CHAIN (*q);
6486     }
6487
6488   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6489      function members.  */
6490   if (TYPE_METHODS (t))
6491     error ("an anonymous union cannot have function members");
6492 }
6493
6494 /* Make sure that a declaration with no declarator is well-formed, i.e.
6495    just defines a tagged type or anonymous union.
6496
6497    Returns the type defined, if any.  */
6498
6499 tree
6500 check_tag_decl (declspecs)
6501      tree declspecs;
6502 {
6503   int found_type = 0;
6504   tree ob_modifier = NULL_TREE;
6505   register tree link;
6506   register tree t = NULL_TREE;
6507
6508   for (link = declspecs; link; link = TREE_CHAIN (link))
6509     {
6510       register tree value = TREE_VALUE (link);
6511
6512       if (TYPE_P (value))
6513         {
6514           ++found_type;
6515
6516           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6517             {
6518               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6519               t = value;
6520             }
6521         }
6522       else if (value == ridpointers[(int) RID_FRIEND])
6523         {
6524           if (current_class_type == NULL_TREE
6525               || current_scope () != current_class_type)
6526             ob_modifier = value;
6527         }
6528       else if (value == ridpointers[(int) RID_STATIC]
6529                || value == ridpointers[(int) RID_EXTERN]
6530                || value == ridpointers[(int) RID_AUTO]
6531                || value == ridpointers[(int) RID_REGISTER]
6532                || value == ridpointers[(int) RID_INLINE]
6533                || value == ridpointers[(int) RID_VIRTUAL]
6534                || value == ridpointers[(int) RID_CONST]
6535                || value == ridpointers[(int) RID_VOLATILE]
6536                || value == ridpointers[(int) RID_EXPLICIT])
6537         ob_modifier = value;
6538     }
6539
6540   if (found_type > 1)
6541     error ("multiple types in one declaration");
6542
6543   /* Inside a class, we might be in a friend or access declaration.
6544      Until we have a good way of detecting the latter, don't warn.  */
6545   if (t == NULL_TREE && ! current_class_type)
6546     pedwarn ("declaration does not declare anything");
6547
6548   /* Check for an anonymous union.  We're careful
6549      accessing TYPE_IDENTIFIER because some built-in types, like
6550      pointer-to-member types, do not have TYPE_NAME.  */
6551   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6552            && TYPE_NAME (t)
6553            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6554     {
6555       /* Anonymous unions are objects, so they can have specifiers.  */;
6556       SET_ANON_AGGR_TYPE_P (t);
6557
6558       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6559         pedwarn ("ISO C++ prohibits anonymous structs");
6560     }
6561
6562   else if (ob_modifier)
6563     {
6564       if (ob_modifier == ridpointers[(int) RID_INLINE]
6565           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6566         cp_error ("`%D' can only be specified for functions", ob_modifier);
6567       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6568         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6569       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6570         cp_error ("`%D' can only be specified for constructors",
6571                   ob_modifier);
6572       else
6573         cp_error ("`%D' can only be specified for objects and functions",
6574                   ob_modifier);
6575     }
6576
6577   return t;
6578 }
6579
6580 /* Called when a declaration is seen that contains no names to declare.
6581    If its type is a reference to a structure, union or enum inherited
6582    from a containing scope, shadow that tag name for the current scope
6583    with a forward reference.
6584    If its type defines a new named structure or union
6585    or defines an enum, it is valid but we need not do anything here.
6586    Otherwise, it is an error.
6587
6588    C++: may have to grok the declspecs to learn about static,
6589    complain for anonymous unions.  */
6590
6591 void
6592 shadow_tag (declspecs)
6593      tree declspecs;
6594 {
6595   tree t = check_tag_decl (declspecs);
6596
6597   if (t)
6598     maybe_process_partial_specialization (t);
6599
6600   /* This is where the variables in an anonymous union are
6601      declared.  An anonymous union declaration looks like:
6602      union { ... } ;
6603      because there is no declarator after the union, the parser
6604      sends that declaration here.  */
6605   if (t && ANON_AGGR_TYPE_P (t))
6606     {
6607       fixup_anonymous_aggr (t);
6608
6609       if (TYPE_FIELDS (t))
6610         {
6611           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6612                                       NULL_TREE);
6613           finish_anon_union (decl);
6614         }
6615     }
6616 }
6617 \f
6618 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6619
6620 tree
6621 groktypename (typename)
6622      tree typename;
6623 {
6624   if (TREE_CODE (typename) != TREE_LIST)
6625     return typename;
6626   return grokdeclarator (TREE_VALUE (typename),
6627                          TREE_PURPOSE (typename),
6628                          TYPENAME, 0, NULL_TREE);
6629 }
6630
6631 /* Decode a declarator in an ordinary declaration or data definition.
6632    This is called as soon as the type information and variable name
6633    have been parsed, before parsing the initializer if any.
6634    Here we create the ..._DECL node, fill in its type,
6635    and put it on the list of decls for the current context.
6636    The ..._DECL node is returned as the value.
6637
6638    Exception: for arrays where the length is not specified,
6639    the type is left null, to be filled in by `cp_finish_decl'.
6640
6641    Function definitions do not come here; they go to start_function
6642    instead.  However, external and forward declarations of functions
6643    do go through here.  Structure field declarations are done by
6644    grokfield and not through here.  */
6645
6646 /* Set this to zero to debug not using the temporary obstack
6647    to parse initializers.  */
6648 int debug_temp_inits = 1;
6649
6650 tree
6651 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6652      tree declarator, declspecs;
6653      int initialized;
6654      tree attributes, prefix_attributes;
6655 {
6656   register tree decl;
6657   register tree type, tem;
6658   tree context;
6659   extern int have_extern_spec;
6660   extern int used_extern_spec;
6661   tree attrlist;
6662
6663 #if 0
6664   /* See code below that used this.  */
6665   int init_written = initialized;
6666 #endif
6667
6668   /* This should only be done once on the top most decl.  */
6669   if (have_extern_spec && !used_extern_spec)
6670     {
6671       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6672                                   declspecs);
6673       used_extern_spec = 1;
6674     }
6675
6676   if (attributes || prefix_attributes)
6677     attrlist = build_scratch_list (attributes, prefix_attributes);
6678   else
6679     attrlist = NULL_TREE;
6680
6681   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6682                          attrlist);
6683                          
6684   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6685     return NULL_TREE;
6686
6687   type = TREE_TYPE (decl);
6688
6689   if (type == error_mark_node)
6690     return NULL_TREE;
6691
6692   context
6693     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6694       ? DECL_CLASS_CONTEXT (decl)
6695       : DECL_CONTEXT (decl);
6696
6697   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6698       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6699     {
6700       /* When parsing the initializer, lookup should use the object's
6701          namespace. */
6702       push_decl_namespace (context);
6703     }
6704
6705   /* We are only interested in class contexts, later. */
6706   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6707     context = NULL_TREE;
6708
6709   if (initialized)
6710     /* Is it valid for this decl to have an initializer at all?
6711        If not, set INITIALIZED to zero, which will indirectly
6712        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6713     switch (TREE_CODE (decl))
6714       {
6715       case TYPE_DECL:
6716         /* typedef foo = bar  means give foo the same type as bar.
6717            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6718            Any other case of an initialization in a TYPE_DECL is an error.  */
6719         if (pedantic || list_length (declspecs) > 1)
6720           {
6721             cp_error ("typedef `%D' is initialized", decl);
6722             initialized = 0;
6723           }
6724         break;
6725
6726       case FUNCTION_DECL:
6727         cp_error ("function `%#D' is initialized like a variable", decl);
6728         initialized = 0;
6729         break;
6730
6731       default:
6732         break;
6733       }
6734
6735   if (initialized)
6736     {
6737       if (! toplevel_bindings_p ()
6738           && DECL_EXTERNAL (decl))
6739         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6740                     decl);
6741       DECL_EXTERNAL (decl) = 0;
6742       if (toplevel_bindings_p ())
6743         TREE_STATIC (decl) = 1;
6744
6745       /* Tell `pushdecl' this is an initialized decl
6746          even though we don't yet have the initializer expression.
6747          Also tell `cp_finish_decl' it may store the real initializer.  */
6748       DECL_INITIAL (decl) = error_mark_node;
6749     }
6750
6751 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6752   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6753 #endif
6754   
6755   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6756   cplus_decl_attributes (decl, attributes, prefix_attributes);
6757
6758   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6759     {
6760       push_nested_class (context, 2);
6761
6762       if (TREE_CODE (decl) == VAR_DECL)
6763         {
6764           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6765           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6766             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6767           else
6768             {
6769               if (DECL_CONTEXT (field) != context)
6770                 {
6771                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6772                               DECL_CONTEXT (field), DECL_NAME (decl),
6773                               context, DECL_NAME (decl));
6774                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6775                 }
6776               /* Static data member are tricky; an in-class initialization
6777                  still doesn't provide a definition, so the in-class
6778                  declaration will have DECL_EXTERNAL set, but will have an
6779                  initialization.  Thus, duplicate_decls won't warn
6780                  about this situation, and so we check here.  */
6781               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6782                 cp_error ("duplicate initialization of %D", decl);
6783               if (duplicate_decls (decl, field))
6784                 decl = field;
6785             }
6786         }
6787       else
6788         {
6789           tree field = check_classfn (context, decl);
6790           if (field && duplicate_decls (decl, field))
6791             decl = field;
6792         }
6793
6794       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6795       DECL_IN_AGGR_P (decl) = 0;
6796       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6797           || CLASSTYPE_USE_TEMPLATE (context))
6798         {
6799           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6800           /* [temp.expl.spec] An explicit specialization of a static data
6801              member of a template is a definition if the declaration
6802              includes an initializer; otherwise, it is a declaration.
6803
6804              We check for processing_specialization so this only applies
6805              to the new specialization syntax.  */
6806           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6807             DECL_EXTERNAL (decl) = 1;
6808         }
6809
6810       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6811         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6812                     decl);
6813     }
6814
6815   /* Enter this declaration into the symbol table.  */
6816   tem = maybe_push_decl (decl);
6817
6818   if (processing_template_decl)
6819     {
6820       if (at_function_scope_p ())
6821         push_permanent_obstack ();
6822       tem = push_template_decl (tem);
6823       if (at_function_scope_p ())
6824         pop_obstacks ();
6825     }
6826
6827
6828 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6829   /* Tell the back-end to use or not use .common as appropriate.  If we say
6830      -fconserve-space, we want this to save .data space, at the expense of
6831      wrong semantics.  If we say -fno-conserve-space, we want this to
6832      produce errors about redefs; to do this we force variables into the
6833      data segment.  */
6834   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6835 #endif
6836   
6837   if (! processing_template_decl)
6838     start_decl_1 (tem);
6839
6840   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
6841   push_obstacks_nochange ();
6842
6843   return tem;
6844 }
6845
6846 void
6847 start_decl_1 (decl)
6848      tree decl;
6849 {
6850   tree type = TREE_TYPE (decl);
6851   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6852
6853   if (type == error_mark_node)
6854     return;
6855
6856   /* If this type of object needs a cleanup, but we're not allowed to
6857      add any more objects with cleanups to the current scope, create a
6858      new binding level.  */
6859   if (TYPE_NEEDS_DESTRUCTOR (type)
6860       && current_binding_level->more_cleanups_ok == 0)
6861     {
6862       keep_next_level (2);
6863       pushlevel (1);
6864       clear_last_expr ();
6865       add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
6866     }
6867
6868   if (initialized)
6869     /* Is it valid for this decl to have an initializer at all?
6870        If not, set INITIALIZED to zero, which will indirectly
6871        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6872     {
6873       /* Don't allow initializations for incomplete types except for
6874          arrays which might be completed by the initialization.  */
6875       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6876         ;                       /* A complete type is ok.  */
6877       else if (TREE_CODE (type) != ARRAY_TYPE)
6878         {
6879           cp_error ("variable `%#D' has initializer but incomplete type",
6880                     decl);
6881           initialized = 0;
6882           type = TREE_TYPE (decl) = error_mark_node;
6883         }
6884       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6885         {
6886           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6887             cp_error ("elements of array `%#D' have incomplete type", decl);
6888           /* else we already gave an error in start_decl.  */
6889           initialized = 0;
6890         }
6891     }
6892
6893   if (!initialized
6894       && TREE_CODE (decl) != TYPE_DECL
6895       && TREE_CODE (decl) != TEMPLATE_DECL
6896       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6897     {
6898       if ((! processing_template_decl || ! uses_template_parms (type))
6899           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6900         {
6901           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6902                  decl);
6903           /* Change the type so that assemble_variable will give
6904              DECL an rtl we can live with: (mem (const_int 0)).  */
6905           type = TREE_TYPE (decl) = error_mark_node;
6906         }
6907       else
6908         {
6909           /* If any base type in the hierarchy of TYPE needs a constructor,
6910              then we set initialized to 1.  This way any nodes which are
6911              created for the purposes of initializing this aggregate
6912              will live as long as it does.  This is necessary for global
6913              aggregates which do not have their initializers processed until
6914              the end of the file.  */
6915           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6916         }
6917     }
6918
6919   if (! initialized)
6920     DECL_INITIAL (decl) = NULL_TREE;
6921 }
6922
6923 /* Handle initialization of references.
6924    These three arguments are from `cp_finish_decl', and have the
6925    same meaning here that they do there.
6926
6927    Quotes on semantics can be found in ARM 8.4.3.  */
6928
6929 static void
6930 grok_reference_init (decl, type, init)
6931      tree decl, type, init;
6932 {
6933   tree tmp;
6934
6935   if (init == NULL_TREE)
6936     {
6937       if ((DECL_LANG_SPECIFIC (decl) == 0
6938            || DECL_IN_AGGR_P (decl) == 0)
6939           && ! DECL_THIS_EXTERN (decl))
6940         cp_error ("`%D' declared as reference but not initialized", decl);
6941       return;
6942     }
6943
6944   if (init == error_mark_node)
6945     return;
6946
6947   if (TREE_CODE (init) == CONSTRUCTOR)
6948     {
6949       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6950       return;
6951     }
6952
6953   if (TREE_CODE (init) == TREE_LIST)
6954     init = build_compound_expr (init);
6955
6956   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6957     init = convert_from_reference (init);
6958
6959   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6960       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6961     {
6962       /* Note: default conversion is only called in very special cases.  */
6963       init = default_conversion (init);
6964     }
6965   
6966   /* Convert INIT to the reference type TYPE.  This may involve the
6967      creation of a temporary, whose lifetime must be the same as that
6968      of the reference.  If so, a DECL_STMT for the temporary will be
6969      added just after the DECL_STMT for DECL.  That's why we don't set
6970      DECL_INITIAL for local references (instead assigning to them
6971      explicitly); we need to allow the temporary to be initialized
6972      first.  */
6973   tmp = convert_to_reference
6974     (type, init, CONV_IMPLICIT,
6975      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6976
6977   if (tmp == error_mark_node)
6978     return;
6979   else if (tmp != NULL_TREE)
6980     {
6981       init = tmp;
6982       tmp = save_expr (tmp);
6983       if (building_stmt_tree ())
6984         {
6985           /* Initialize the declaration.  */
6986           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
6987           finish_expr_stmt (tmp);
6988         }
6989       else
6990         DECL_INITIAL (decl) = tmp;
6991     }
6992   else
6993     {
6994       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6995       return;
6996     }
6997
6998   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6999     {
7000       expand_static_init (decl, DECL_INITIAL (decl));
7001       DECL_INITIAL (decl) = NULL_TREE;
7002     }
7003   return;
7004 }
7005
7006 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7007    mucking with forces it does not comprehend (i.e. initialization with a
7008    constructor).  If we are at global scope and won't go into COMMON, fill
7009    it in with a dummy CONSTRUCTOR to force the variable into .data;
7010    otherwise we can use error_mark_node.  */
7011
7012 static tree
7013 obscure_complex_init (decl, init)
7014      tree decl, init;
7015 {
7016   if (! flag_no_inline && TREE_STATIC (decl))
7017     {
7018       if (extract_init (decl, init))
7019         return NULL_TREE;
7020     }
7021
7022 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7023   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7024     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7025                                  NULL_TREE);
7026   else
7027 #endif
7028     DECL_INITIAL (decl) = error_mark_node;
7029
7030   return init;
7031 }
7032
7033 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7034    array until we finish parsing the initializer.  If that's the
7035    situation we're in, update DECL accordingly.  */
7036
7037 static void
7038 maybe_deduce_size_from_array_init (decl, init)
7039      tree decl;
7040      tree init;
7041 {
7042   tree type = TREE_TYPE (decl);
7043
7044   if (TREE_CODE (type) == ARRAY_TYPE
7045       && TYPE_DOMAIN (type) == NULL_TREE
7046       && TREE_CODE (decl) != TYPE_DECL)
7047     {
7048       int do_default
7049         = (TREE_STATIC (decl)
7050            /* Even if pedantic, an external linkage array
7051               may have incomplete type at first.  */
7052            ? pedantic && ! DECL_EXTERNAL (decl)
7053            : !DECL_EXTERNAL (decl));
7054       tree initializer = init ? init : DECL_INITIAL (decl);
7055       int failure = complete_array_type (type, initializer, do_default);
7056
7057       if (failure == 1)
7058         cp_error ("initializer fails to determine size of `%D'", decl);
7059
7060       if (failure == 2)
7061         {
7062           if (do_default)
7063             cp_error ("array size missing in `%D'", decl);
7064           /* If a `static' var's size isn't known, make it extern as
7065              well as static, so it does not get allocated.  If it's not
7066              `static', then don't mark it extern; finish_incomplete_decl
7067              will give it a default size and it will get allocated.  */
7068           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7069             DECL_EXTERNAL (decl) = 1;
7070         }
7071
7072       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7073           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7074                               integer_zero_node))
7075         cp_error ("zero-size array `%D'", decl);
7076
7077       layout_decl (decl, 0);
7078     }
7079 }
7080
7081 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7082    any appropriate error messages regarding the layout.  */
7083
7084 static void
7085 layout_var_decl (decl)
7086      tree decl;
7087 {
7088   tree type = TREE_TYPE (decl);
7089   tree ttype = target_type (type);
7090
7091   /* If we haven't already layed out this declaration, do so now.
7092      Note that we must not call complete type for an external object
7093      because it's type might involve templates that we are not
7094      supposed to isntantiate yet.  (And it's perfectly legal to say 
7095      `extern X x' for some incomplete type `X'.)  */
7096   if (!DECL_EXTERNAL (decl))
7097     complete_type (type);
7098   if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7099     layout_decl (decl, 0);
7100
7101   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7102     {
7103       /* An automatic variable with an incomplete type: that is an error.
7104          Don't talk about array types here, since we took care of that
7105          message in grokdeclarator.  */
7106       cp_error ("storage size of `%D' isn't known", decl);
7107       TREE_TYPE (decl) = error_mark_node;
7108     }
7109   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7110     /* Let debugger know it should output info for this type.  */
7111     note_debug_info_needed (ttype);
7112
7113   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7114     note_debug_info_needed (DECL_CONTEXT (decl));
7115
7116   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7117       && DECL_SIZE (decl) != NULL_TREE
7118       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7119     {
7120       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7121         constant_expression_warning (DECL_SIZE (decl));
7122       else
7123         cp_error ("storage size of `%D' isn't constant", decl);
7124     }
7125 }
7126
7127 /* If a local static variable is declared in an inline function, or if
7128    we have a weak definition, we must endeavor to create only one
7129    instance of the variable at link-time.  */
7130
7131 static void
7132 maybe_commonize_var (decl)
7133      tree decl;
7134 {
7135   /* Static data in a function with comdat linkage also has comdat
7136      linkage.  */
7137   if (TREE_STATIC (decl)
7138       /* Don't mess with __FUNCTION__.  */
7139       && ! TREE_ASM_WRITTEN (decl)
7140       && current_function_decl
7141       && DECL_CONTEXT (decl) == current_function_decl
7142       && (DECL_THIS_INLINE (current_function_decl)
7143           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7144       && TREE_PUBLIC (current_function_decl))
7145     {
7146       /* Rather than try to get this right with inlining, we suppress
7147          inlining of such functions.  */
7148       current_function_cannot_inline
7149         = "function with static variable cannot be inline";
7150
7151       /* If flag_weak, we don't need to mess with this, as we can just
7152          make the function weak, and let it refer to its unique local
7153          copy.  This works because we don't allow the function to be
7154          inlined.  */
7155       if (! flag_weak)
7156         {
7157           if (DECL_INTERFACE_KNOWN (current_function_decl))
7158             {
7159               TREE_PUBLIC (decl) = 1;
7160               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7161             }
7162           else if (DECL_INITIAL (decl) == NULL_TREE
7163                    || DECL_INITIAL (decl) == error_mark_node)
7164             {
7165               TREE_PUBLIC (decl) = 1;
7166               DECL_COMMON (decl) = 1;
7167             }
7168           /* else we lose. We can only do this if we can use common,
7169              which we can't if it has been initialized.  */
7170
7171           if (TREE_PUBLIC (decl))
7172             DECL_ASSEMBLER_NAME (decl)
7173               = build_static_name (current_function_decl, DECL_NAME (decl));
7174           else if (! DECL_ARTIFICIAL (decl))
7175             {
7176               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7177               cp_warning_at ("  you can work around this by removing the initializer", decl);
7178             }
7179         }
7180     }
7181   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7182     /* Set it up again; we might have set DECL_INITIAL since the last
7183        time.  */
7184     comdat_linkage (decl);
7185 }
7186
7187 /* Issue an error message if DECL is an uninitialized const variable.  */
7188
7189 static void
7190 check_for_uninitialized_const_var (decl)
7191      tree decl;
7192 {
7193   tree type = TREE_TYPE (decl);
7194
7195   /* ``Unless explicitly declared extern, a const object does not have
7196      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7197      7.1.6 */
7198   if (TREE_CODE (decl) == VAR_DECL
7199       && TREE_CODE (type) != REFERENCE_TYPE
7200       && CP_TYPE_CONST_P (type)
7201       && !TYPE_NEEDS_CONSTRUCTING (type)
7202       && !DECL_INITIAL (decl))
7203     cp_error ("uninitialized const `%D'", decl);
7204 }
7205
7206 /* Verify INIT (the initializer for DECL), and record the
7207    initialization in DECL_INITIAL, if appropriate.  Returns a new
7208    value for INIT.  */
7209
7210 static tree
7211 check_initializer (decl, init)
7212      tree decl;
7213      tree init;
7214 {
7215   tree type;
7216
7217   if (TREE_CODE (decl) == FIELD_DECL)
7218     return init;
7219
7220   type = TREE_TYPE (decl);
7221
7222   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7223   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7224     init = NULL_TREE;
7225
7226   /* Check the initializer.  */
7227   if (init)
7228     {
7229       /* Things that are going to be initialized need to have complete
7230          type.  */
7231       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7232
7233       if (type == error_mark_node)
7234         /* We will have already complained.  */
7235         init = NULL_TREE;
7236       else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7237         {
7238           cp_error ("variable-sized object `%D' may not be initialized", decl);
7239           init = NULL_TREE;
7240         }
7241       else if (TREE_CODE (type) == ARRAY_TYPE
7242                && !TYPE_SIZE (TREE_TYPE (type)))
7243         {
7244           cp_error ("elements of array `%#D' have incomplete type", decl);
7245           init = NULL_TREE;
7246         }
7247       else if (!TYPE_SIZE (type))
7248         {
7249           cp_error ("`%D' has incomplete type", decl);
7250           TREE_TYPE (decl) = error_mark_node;
7251           init = NULL_TREE;
7252         }
7253     }
7254
7255   if (TREE_CODE (decl) == CONST_DECL)
7256     {
7257       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7258
7259       DECL_INITIAL (decl) = init;
7260
7261       /* This will keep us from needing to worry about our obstacks.  */
7262       my_friendly_assert (init != NULL_TREE, 149);
7263       init = NULL_TREE;
7264     }
7265   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7266     {
7267       if (TREE_STATIC (decl))
7268         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7269       grok_reference_init (decl, type, init);
7270       init = NULL_TREE;
7271     }
7272   else if (init)
7273     {
7274       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7275         {
7276           if (TREE_CODE (type) == ARRAY_TYPE)
7277             init = digest_init (type, init, (tree *) 0);
7278           else if (TREE_CODE (init) == CONSTRUCTOR
7279                    && TREE_HAS_CONSTRUCTOR (init))
7280             {
7281               if (TYPE_NON_AGGREGATE_CLASS (type))
7282                 {
7283                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7284                             decl);
7285                   init = error_mark_node;
7286                 }
7287               else
7288                 goto dont_use_constructor;
7289             }
7290         }
7291       else
7292         {
7293         dont_use_constructor:
7294           if (TREE_CODE (init) != TREE_VEC)
7295             init = store_init_value (decl, init);
7296         }
7297
7298       if (init)
7299         /* We must hide the initializer so that expand_decl
7300            won't try to do something it does not understand.  */
7301         init = obscure_complex_init (decl, init);
7302     }
7303   else if (DECL_EXTERNAL (decl))
7304     ;
7305   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7306            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7307     {
7308       tree core_type = strip_array_types (type);
7309
7310       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7311         {
7312           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7313             cp_error ("structure `%D' with uninitialized const members", decl);
7314           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7315             cp_error ("structure `%D' with uninitialized reference members",
7316                       decl);
7317         }
7318
7319       check_for_uninitialized_const_var (decl);
7320
7321       if (TYPE_SIZE (type) != NULL_TREE
7322           && TYPE_NEEDS_CONSTRUCTING (type))
7323         init = obscure_complex_init (decl, NULL_TREE);
7324
7325     }
7326   else
7327     check_for_uninitialized_const_var (decl);
7328   
7329   return init;
7330 }
7331
7332 /* If DECL is not a local variable, give it RTL.  */
7333
7334 static void
7335 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7336      tree decl;
7337      tree init;
7338      const char *asmspec;
7339 {
7340   int toplev;
7341   tree type;
7342
7343   type = TREE_TYPE (decl);
7344   toplev = toplevel_bindings_p ();
7345
7346   /* Handle non-variables up front.  */
7347   if (TREE_CODE (decl) != VAR_DECL)
7348     {
7349       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7350       return;
7351     }
7352
7353   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7354   if (asmspec)
7355     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7356
7357   if (DECL_VIRTUAL_P (decl))
7358     make_decl_rtl (decl, NULL_PTR, toplev);
7359   else if (TREE_READONLY (decl)
7360            && DECL_INITIAL (decl) != NULL_TREE
7361            && DECL_INITIAL (decl) != error_mark_node
7362            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7363     {
7364       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7365
7366       if (toplev && ! TREE_PUBLIC (decl))
7367         {
7368           /* If this is a static const, change its apparent linkage
7369              if it belongs to a #pragma interface.  */
7370           if (!interface_unknown)
7371             {
7372               TREE_PUBLIC (decl) = 1;
7373               DECL_EXTERNAL (decl) = interface_only;
7374             }
7375           make_decl_rtl (decl, asmspec, toplev);
7376         }
7377       else if (toplev)
7378         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7379     }
7380   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7381     {
7382       my_friendly_assert (TREE_STATIC (decl), 19990828);
7383
7384       if (init == NULL_TREE
7385 #ifdef DEFAULT_STATIC_DEFS
7386           /* If this code is dead, then users must
7387              explicitly declare static member variables
7388              outside the class def'n as well.  */
7389           && TYPE_NEEDS_CONSTRUCTING (type)
7390 #endif
7391           )
7392         {
7393           DECL_EXTERNAL (decl) = 1;
7394           make_decl_rtl (decl, asmspec, 1);
7395         }
7396       else
7397         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7398     }
7399   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7400            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7401     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7402 }
7403
7404 /* Create RTL for the local static variable DECL.  */
7405
7406 void
7407 make_rtl_for_local_static (decl)
7408      tree decl;
7409 {
7410   tree type = TREE_TYPE (decl);
7411   const char *asmspec = NULL;
7412
7413   if (TREE_READONLY (decl)
7414       && DECL_INITIAL (decl) != NULL_TREE
7415       && DECL_INITIAL (decl) != error_mark_node
7416       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7417       && ! TREE_SIDE_EFFECTS (decl)
7418       && ! TREE_PUBLIC (decl)
7419       && ! DECL_EXTERNAL (decl)
7420       && ! TYPE_NEEDS_DESTRUCTOR (type)
7421       && ! TREE_ADDRESSABLE (decl)
7422       && DECL_MODE (decl) != BLKmode)
7423     {
7424       /* As an optimization, we try to put register-sized static
7425          constants in a register, rather than writing them out.  If we
7426          take the address of the constant later, we'll make RTL for it
7427          at that point.  */
7428       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7429       store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7430       TREE_ASM_WRITTEN (decl) = 1;
7431       return;
7432     }
7433
7434   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7435     {
7436       /* The only way this situaton can occur is if the
7437          user specified a name for this DECL using the
7438          `attribute' syntax.  */
7439       asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7440       DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7441     }
7442
7443   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7444 }
7445
7446 /* The old ARM scoping rules injected variables declared in the
7447    initialization statement of a for-statement into the surrounding
7448    scope.  We support this usage, in order to be backward-compatible.
7449    DECL is a just-declared VAR_DECL; if necessary inject its
7450    declaration into the surrounding scope.  */
7451
7452 void
7453 maybe_inject_for_scope_var (decl)
7454      tree decl;
7455 {
7456   if (current_binding_level->is_for_scope)
7457     {
7458       struct binding_level *outer 
7459         = current_binding_level->level_chain;
7460
7461       /* Check to see if the same name is already bound at the outer
7462          level, either because it was directly declared, or because a
7463          dead for-decl got preserved.  In either case, the code would
7464          not have been valid under the ARM scope rules, so clear
7465          is_for_scope for the current_binding_level.
7466
7467          Otherwise, we need to preserve the temp slot for decl to last
7468          into the outer binding level.  */
7469
7470       tree outer_binding 
7471         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7472               
7473       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7474           && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7475               == VAR_DECL)
7476           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7477         {
7478           BINDING_VALUE (outer_binding)
7479             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7480           current_binding_level->is_for_scope = 0;
7481         }
7482       else if (DECL_IN_MEMORY_P (decl))
7483         preserve_temp_slots (DECL_RTL (decl));
7484     }
7485 }
7486
7487 /* Generate code to initialize DECL (a local variable).  */
7488
7489 void
7490 initialize_local_var (decl, init, flags)
7491      tree decl;
7492      tree init;
7493      int flags;
7494 {
7495   tree type = TREE_TYPE (decl);
7496
7497   /* If the type is bogus, don't bother initializing the variable.  */
7498   if (type == error_mark_node)
7499     return;
7500
7501   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7502     {
7503       /* If we used it already as memory, it must stay in memory.  */
7504       DECL_INITIAL (decl) = NULL_TREE;
7505       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7506     }
7507
7508   /* Local statics are handled differently from ordinary automatic
7509      variables.  */
7510   if (TREE_STATIC (decl))
7511     {
7512       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7513           || TYPE_NEEDS_DESTRUCTOR (type))
7514         expand_static_init (decl, init);
7515       return;
7516     }
7517
7518   if (DECL_SIZE (decl) && type != error_mark_node)
7519     {
7520       int already_used;
7521   
7522       /* Compute and store the initial value.  */
7523       already_used = TREE_USED (decl) || TREE_USED (type);
7524
7525       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7526         {
7527           int saved_stmts_are_full_exprs_p;
7528
7529           emit_line_note (DECL_SOURCE_FILE (decl),
7530                           DECL_SOURCE_LINE (decl));
7531           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7532           stmts_are_full_exprs_p = 1;
7533           finish_expr_stmt (build_aggr_init (decl, init, flags));
7534           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7535         }
7536
7537       /* Set this to 0 so we can tell whether an aggregate which was
7538          initialized was ever used.  Don't do this if it has a
7539          destructor, so we don't complain about the 'resource
7540          allocation is initialization' idiom.  Now set
7541          attribute((unused)) on types so decls of that type will be
7542          marked used. (see TREE_USED, above.)  */
7543       if (TYPE_NEEDS_CONSTRUCTING (type)
7544           && ! already_used
7545           && !TYPE_NEEDS_DESTRUCTOR (type) 
7546           && DECL_NAME (decl))
7547         TREE_USED (decl) = 0;
7548       else if (already_used)
7549         TREE_USED (decl) = 1;
7550     }
7551 }
7552
7553 /* Generate code to destroy DECL (a local variable).  */
7554
7555 void 
7556 destroy_local_var (decl)
7557      tree decl;
7558 {
7559   tree type = TREE_TYPE (decl);
7560   tree cleanup;
7561
7562   /* Only variables get cleaned up.  */
7563   if (TREE_CODE (decl) != VAR_DECL)
7564     return;
7565   
7566   /* And only things with destructors need cleaning up.  */
7567   if (!TYPE_NEEDS_DESTRUCTOR (type))
7568     return;
7569
7570   if (TREE_CODE (decl) == VAR_DECL &&
7571       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7572     /* We don't clean up things that aren't defined in this
7573        translation unit, or that need a static cleanup.  The latter
7574        are handled by finish_file.  */
7575     return;
7576   
7577   /* Compute the cleanup.  */
7578   cleanup = maybe_build_cleanup (decl);
7579
7580   /* Record the cleanup required for this declaration.  */
7581   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7582       && cleanup)
7583     finish_decl_cleanup (decl, cleanup);
7584 }
7585
7586 /* Let the back-end know about DECL.  */
7587
7588 void
7589 emit_local_var (decl)
7590      tree decl;
7591 {
7592   /* Create RTL for this variable.  */
7593   if (DECL_RTL (decl))
7594     /* Only a RESULT_DECL should have non-NULL RTL when
7595                      arriving here.  All other local variables are
7596                      assigned RTL in this function.  */
7597     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 
7598                         19990828);
7599   else
7600     {
7601       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7602         /* The user must have specified an assembler name for this
7603            variable.  Set that up now.  */
7604         rest_of_decl_compilation 
7605           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7606            /*top_level=*/0, /*at_end=*/0);
7607       else
7608         expand_decl (decl);
7609     }
7610
7611   /* Actually do the initialization.  */
7612   expand_start_target_temps ();
7613   expand_decl_init (decl);
7614   expand_end_target_temps ();
7615 }
7616
7617 /* Finish processing of a declaration;
7618    install its line number and initial value.
7619    If the length of an array type is not known before,
7620    it must be determined now, from the initial value, or it is an error.
7621
7622    Call `pop_obstacks' iff NEED_POP is nonzero.
7623
7624    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7625    for aggregates that have constructors alive on the permanent obstack,
7626    so that the global initializing functions can be written at the end.
7627
7628    INIT0 holds the value of an initializer that should be allowed to escape
7629    the normal rules.
7630
7631    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7632    if the (init) syntax was used.
7633
7634    For functions that take default parameters, DECL points to its
7635    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7636    subsequently lower and lower forms of instantiation, checking for
7637    ambiguity as it goes.  This can be sped up later.  */
7638
7639 void
7640 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7641      tree decl, init;
7642      tree asmspec_tree;
7643      int need_pop;
7644      int flags;
7645 {
7646   register tree type;
7647   tree ttype = NULL_TREE;
7648   int temporary = allocation_temporary_p ();
7649   const char *asmspec = NULL;
7650   int was_readonly = 0;
7651
7652   /* If this is 0, then we did not change obstacks.  */
7653   if (! decl)
7654     {
7655       if (init)
7656         error ("assignment (not initialization) in declaration");
7657       return;
7658     }
7659
7660   /* If a name was specified, get the string.  */
7661   if (asmspec_tree)
7662       asmspec = TREE_STRING_POINTER (asmspec_tree);
7663
7664   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7665     {
7666       cp_error ("Cannot initialize `%D' to namespace `%D'",
7667                 decl, init);
7668       init = NULL_TREE;
7669     }
7670
7671   if (current_class_type
7672       && DECL_REAL_CONTEXT (decl) == current_class_type
7673       && TYPE_BEING_DEFINED (current_class_type)
7674       && (DECL_INITIAL (decl) || init))
7675     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7676
7677   if (TREE_CODE (decl) == VAR_DECL 
7678       && DECL_CONTEXT (decl)
7679       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7680       && DECL_CONTEXT (decl) != current_namespace
7681       && init)
7682     {
7683       /* Leave the namespace of the object. */
7684       pop_decl_namespace ();
7685     }
7686
7687   type = TREE_TYPE (decl);
7688
7689   if (type == error_mark_node)
7690     {
7691       if (toplevel_bindings_p () && temporary)
7692         end_temporary_allocation ();
7693
7694       return;
7695     }
7696
7697   /* Add this declaration to the statement-tree.  */
7698   if (building_stmt_tree () 
7699       && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7700     add_decl_stmt (decl);
7701
7702   if (TYPE_HAS_MUTABLE_P (type))
7703     TREE_READONLY (decl) = 0;
7704
7705   if (processing_template_decl)
7706     {
7707       if (init && DECL_INITIAL (decl))
7708         DECL_INITIAL (decl) = init;
7709       goto finish_end0;
7710     }
7711
7712   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7713   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7714
7715   /* Take care of TYPE_DECLs up front.  */
7716   if (TREE_CODE (decl) == TYPE_DECL)
7717     {
7718       if (init && DECL_INITIAL (decl))
7719         {
7720           /* typedef foo = bar; store the type of bar as the type of foo.  */
7721           TREE_TYPE (decl) = type = TREE_TYPE (init);
7722           DECL_INITIAL (decl) = init = NULL_TREE;
7723         }
7724       if (type != error_mark_node
7725           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7726         {
7727           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7728             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7729           set_identifier_type_value (DECL_NAME (decl), type);
7730           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7731         }
7732       GNU_xref_decl (current_function_decl, decl);
7733
7734       /* If we have installed this as the canonical typedef for this
7735          type, and that type has not been defined yet, delay emitting
7736          the debug information for it, as we will emit it later.  */
7737       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7738           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7739         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7740
7741       rest_of_decl_compilation (decl, NULL_PTR,
7742                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7743       goto finish_end;
7744     }
7745
7746   if (TREE_CODE (decl) != FUNCTION_DECL)
7747     ttype = target_type (type);
7748
7749   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7750       && TYPE_NEEDS_CONSTRUCTING (type))
7751     {
7752       /* Currently, GNU C++ puts constants in text space, making them
7753          impossible to initialize.  In the future, one would hope for
7754          an operating system which understood the difference between
7755          initialization and the running of a program.  */
7756       was_readonly = 1;
7757       TREE_READONLY (decl) = 0;
7758     }
7759
7760   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7761     {
7762       /* This must override the asm specifier which was placed by
7763          grokclassfn.  Lay this out fresh.  */
7764       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7765       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7766       make_decl_rtl (decl, asmspec, 0);
7767     }
7768
7769   /* Deduce size of array from initialization, if not already known.  */
7770   maybe_deduce_size_from_array_init (decl, init);
7771   init = check_initializer (decl, init);
7772
7773   GNU_xref_decl (current_function_decl, decl);
7774
7775   /* For top-level declaration, the initial value was read in
7776      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7777      must go in the permanent obstack; but don't discard the
7778      temporary data yet.  */
7779
7780   if (toplevel_bindings_p () && temporary)
7781     end_temporary_allocation ();
7782
7783   if (TREE_CODE (decl) == VAR_DECL)
7784     layout_var_decl (decl);
7785
7786   /* Output the assembler code and/or RTL code for variables and functions,
7787      unless the type is an undefined structure or union.
7788      If not, it will get done when the type is completed.  */
7789   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7790       || TREE_CODE (decl) == RESULT_DECL)
7791     {
7792       if (TREE_CODE (decl) == VAR_DECL)
7793         maybe_commonize_var (decl);
7794
7795       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7796
7797       if (TREE_CODE (type) == FUNCTION_TYPE 
7798           || TREE_CODE (type) == METHOD_TYPE)
7799         abstract_virtuals_error (decl, 
7800                                  strip_array_types (TREE_TYPE (type)));
7801       else 
7802         abstract_virtuals_error (decl, strip_array_types (type));
7803
7804       if (TREE_CODE (decl) == FUNCTION_DECL)
7805         ;
7806       else if (DECL_EXTERNAL (decl)
7807                && ! (DECL_LANG_SPECIFIC (decl)
7808                      && DECL_NOT_REALLY_EXTERN (decl)))
7809         {
7810           if (init)
7811             DECL_INITIAL (decl) = init;
7812         }
7813       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7814         {
7815           /* This is a local declaration.  */
7816           if (doing_semantic_analysis_p ())
7817             maybe_inject_for_scope_var (decl);
7818           /* Initialize the local variable.  But, if we're building a
7819              statement-tree, we'll do the initialization when we
7820              expand the tree.  */
7821           if (processing_template_decl)
7822             {
7823               if (init || DECL_INITIAL (decl) == error_mark_node)
7824                 DECL_INITIAL (decl) = init;
7825             }
7826           else
7827             {
7828               /* If we're not building RTL, then we need to do so
7829                  now.  */
7830               if (!building_stmt_tree ())
7831                 emit_local_var (decl);
7832               /* Initialize the variable.  */
7833               initialize_local_var (decl, init, flags);
7834               /* Clean up the variable.  */
7835               destroy_local_var (decl);
7836             }
7837         }
7838       else if (TREE_STATIC (decl) && type != error_mark_node)
7839         {
7840           /* Cleanups for static variables are handled by `finish_file'.  */
7841           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7842               || TYPE_NEEDS_DESTRUCTOR (type))
7843             expand_static_init (decl, init);
7844         }
7845     finish_end0:
7846
7847       /* Undo call to `pushclass' that was done in `start_decl'
7848          due to initialization of qualified member variable.
7849          I.e., Foo::x = 10;  */
7850       {
7851         tree context = DECL_REAL_CONTEXT (decl);
7852         if (context
7853             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7854             && (TREE_CODE (decl) == VAR_DECL
7855                 /* We also have a pushclass done that we need to undo here
7856                    if we're at top level and declare a method.  */
7857                 || TREE_CODE (decl) == FUNCTION_DECL)
7858             /* If size hasn't been set, we're still defining it,
7859                and therefore inside the class body; don't pop
7860                the binding level..  */
7861             && TYPE_SIZE (context) != NULL_TREE
7862             && context == current_class_type)
7863           pop_nested_class ();
7864       }
7865     }
7866
7867  finish_end:
7868
7869   /* If requested, warn about definitions of large data objects.  */
7870
7871   if (warn_larger_than
7872       && ! processing_template_decl
7873       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7874       && !DECL_EXTERNAL (decl))
7875     {
7876       register tree decl_size = DECL_SIZE (decl);
7877
7878       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7879         {
7880           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7881
7882           if (units > larger_than_size)
7883             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7884         }
7885     }
7886
7887   if (need_pop)
7888     /* Resume permanent allocation, if not within a function.  The
7889        corresponding push_obstacks_nochange is in start_decl,
7890        start_method, groktypename, and in grokfield.  */
7891     pop_obstacks ();
7892
7893   if (was_readonly)
7894     TREE_READONLY (decl) = 1;
7895 }
7896
7897 /* This is here for a midend callback from c-common.c */
7898
7899 void
7900 finish_decl (decl, init, asmspec_tree)
7901      tree decl, init;
7902      tree asmspec_tree;
7903 {
7904   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7905 }
7906
7907 /* Generate code to handle the destruction of the function-scoped
7908    static variable DECL.  */
7909
7910 static void
7911 destroy_local_static (decl)
7912      tree decl;
7913 {
7914   tree cleanup, fcall;
7915   tree compound_stmt;
7916   int saved_flag_access_control;
7917
7918   if (atexit_node == 0)
7919     {
7920       tree atexit_fndecl, PFV, pfvlist;
7921       /* Remember this information until end of file.  */
7922       push_obstacks (&permanent_obstack, &permanent_obstack);
7923       PFV = build_pointer_type (build_function_type
7924                                 (void_type_node, void_list_node));
7925
7926       pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7927
7928       push_lang_context (lang_name_c);
7929       /* Note that we do not call pushdecl for this function;
7930          there's no reason that this declaration should be
7931          accessible to anyone.  */
7932       atexit_fndecl
7933         = define_function ("atexit",
7934                            build_function_type (void_type_node,
7935                                                 pfvlist),
7936                            /*pfn=*/0, NULL_PTR);
7937       mark_used (atexit_fndecl);
7938       atexit_node = default_conversion (atexit_fndecl);
7939       pop_lang_context ();
7940       pop_obstacks ();
7941     }
7942               
7943   /* Call build_cleanup before we enter the anonymous function so that
7944      any access checks will be done relative to the current scope,
7945      rather than the scope of the anonymous function.  */
7946   build_cleanup (decl);
7947
7948   /* Now start the function.  */
7949   cleanup = start_anon_func ();
7950
7951   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7952      to the original function, rather than the anonymous one.  That
7953      will make the back-end think that nested functions are in use,
7954      which causes confusion.  */
7955   saved_flag_access_control = flag_access_control;
7956   flag_access_control = 0;
7957   fcall = build_cleanup (decl);
7958   flag_access_control = saved_flag_access_control;
7959
7960   /* Create the body of the anonymous function.  */
7961   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7962   finish_expr_stmt (fcall);
7963   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7964   end_anon_func ();
7965
7966   /* Call atexit with the cleanup function.  */
7967   mark_addressable (cleanup);
7968   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7969   fcall = build_function_call (atexit_node,
7970                                tree_cons (NULL_TREE, 
7971                                           cleanup, 
7972                                           NULL_TREE));
7973   finish_expr_stmt (fcall);
7974 }
7975
7976 void
7977 expand_static_init (decl, init)
7978      tree decl;
7979      tree init;
7980 {
7981   tree oldstatic = value_member (decl, static_aggregates);
7982
7983   if (oldstatic)
7984     {
7985       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7986         cp_error ("multiple initializations given for `%D'", decl);
7987     }
7988   else if (! toplevel_bindings_p ())
7989     {
7990       /* Emit code to perform this initialization but once.  */
7991       tree temp;
7992       tree if_stmt;
7993       tree then_clause;
7994       tree assignment;
7995       tree temp_init;
7996
7997       /* Remember this information until end of file.  */
7998       push_obstacks (&permanent_obstack, &permanent_obstack);
7999
8000       /* Emit code to perform this initialization but once.  This code
8001          looks like:
8002
8003            static int temp = 0;
8004            if (!temp) {
8005              // Do initialization.
8006              temp = 1;
8007              // Register variable for destruction at end of program.
8008            }
8009
8010          Note that the `temp' variable is only set to 1 *after* the
8011          initialization is complete.  This ensures that an exception,
8012          thrown during the construction, will cause the variable to
8013          reinitialized when we pass through this code again, as per:
8014          
8015            [stmt.dcl]
8016
8017            If the initialization exits by throwing an exception, the
8018            initialization is not complete, so it will be tried again
8019            the next time control enters the declaration.
8020
8021          In theory, this process should be thread-safe, too; multiple
8022          threads should not be able to initialize the variable more
8023          than once.  We don't yet attempt to ensure thread-safety.  */
8024       temp = get_temp_name (integer_type_node, 1);
8025       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8026
8027       /* Begin the conditional initialization.  */
8028       if_stmt = begin_if_stmt ();
8029       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8030                                             integer_zero_node), 
8031                            if_stmt);
8032       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8033
8034       /* Do the initialization itself.  */
8035       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8036           || (init && TREE_CODE (init) == TREE_LIST))
8037         assignment = build_aggr_init (decl, init, 0);
8038       else if (init)
8039         /* The initialization we're doing here is just a bitwise
8040            copy.  */
8041         assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8042       else
8043         assignment = NULL_TREE;
8044
8045       /* Once the assignment is complete, set TEMP to 1.  Since the
8046          construction of the static object is complete at this point,
8047          we want to make sure TEMP is set to 1 even if a temporary
8048          constructed during the initialization throws an exception
8049          when it is destroyed.  So, we combine the initialization and
8050          the assignment to TEMP into a single expression, ensuring
8051          that when we call finish_expr_stmt the cleanups will not be
8052          run until after TEMP is set to 1.  */
8053       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8054       if (assignment)
8055         {
8056           assignment = tree_cons (NULL_TREE, assignment,
8057                                   build_tree_list (NULL_TREE, 
8058                                                    temp_init));
8059           assignment = build_compound_expr (assignment);
8060         }
8061       else
8062         assignment = temp_init;
8063       finish_expr_stmt (assignment);
8064
8065       /* Use atexit to register a function for destroying this static
8066          variable.  */
8067       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8068         destroy_local_static (decl);
8069
8070       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8071       finish_then_clause (if_stmt);
8072       finish_if_stmt ();
8073
8074       /* Resume old (possibly temporary) allocation.  */
8075       pop_obstacks ();
8076     }
8077   else
8078     {
8079       /* This code takes into account memory allocation policy of
8080          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8081          hold for this object, then we must make permanent the storage
8082          currently in the temporary obstack.  */
8083       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8084         preserve_initializer ();
8085       static_aggregates = tree_cons (init, decl, static_aggregates);
8086     }
8087 }
8088
8089 /* Finish the declaration of a catch-parameter.  */
8090
8091 tree
8092 start_handler_parms (declspecs, declarator)
8093      tree declspecs;
8094      tree declarator;
8095 {
8096   tree decl;
8097   if (declspecs)
8098     {
8099       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8100                              1, NULL_TREE);
8101       if (decl == NULL_TREE)
8102         error ("invalid catch parameter");
8103     }
8104   else
8105     decl = NULL_TREE;
8106
8107   return decl;
8108 }
8109
8110 \f
8111 /* Make TYPE a complete type based on INITIAL_VALUE.
8112    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8113    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8114
8115 int
8116 complete_array_type (type, initial_value, do_default)
8117      tree type, initial_value;
8118      int do_default;
8119 {
8120   register tree maxindex = NULL_TREE;
8121   int value = 0;
8122   
8123   /* Allocate on the same obstack as TYPE.  */
8124   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8125   
8126   if (initial_value)
8127     {
8128       /* Note MAXINDEX  is really the maximum index,
8129          one less than the size.  */
8130       if (TREE_CODE (initial_value) == STRING_CST)
8131         {
8132           int eltsize
8133             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8134           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8135                                    / eltsize) - 1, 0);
8136         }
8137       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8138         {
8139           tree elts = CONSTRUCTOR_ELTS (initial_value);
8140           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8141           for (; elts; elts = TREE_CHAIN (elts))
8142             {
8143               if (TREE_PURPOSE (elts))
8144                 maxindex = TREE_PURPOSE (elts);
8145               else
8146                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8147             }
8148           maxindex = copy_node (maxindex);
8149         }
8150       else
8151         {
8152           /* Make an error message unless that happened already.  */
8153           if (initial_value != error_mark_node)
8154             value = 1;
8155           else
8156             initial_value = NULL_TREE;
8157
8158           /* Prevent further error messages.  */
8159           maxindex = build_int_2 (0, 0);
8160         }
8161     }
8162
8163   if (!maxindex)
8164     {
8165       if (do_default)
8166         maxindex = build_int_2 (0, 0);
8167       value = 2;
8168     }
8169
8170   if (maxindex)
8171     {
8172       tree itype;
8173       tree domain;
8174
8175       domain = build_index_type (maxindex);
8176       TYPE_DOMAIN (type) = domain;
8177
8178       if (! TREE_TYPE (maxindex))
8179         TREE_TYPE (maxindex) = domain;
8180       if (initial_value)
8181         itype = TREE_TYPE (initial_value);
8182       else
8183         itype = NULL;
8184       if (itype && !TYPE_DOMAIN (itype))
8185         TYPE_DOMAIN (itype) = domain;
8186       /* The type of the main variant should never be used for arrays
8187          of different sizes.  It should only ever be completed with the
8188          size of the array.  */
8189       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8190         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8191     }
8192
8193   pop_obstacks();
8194   
8195   /* Lay out the type now that we can get the real answer.  */
8196
8197   layout_type (type);
8198
8199   return value;
8200 }
8201 \f
8202 /* Return zero if something is declared to be a member of type
8203    CTYPE when in the context of CUR_TYPE.  STRING is the error
8204    message to print in that case.  Otherwise, quietly return 1.  */
8205
8206 static int
8207 member_function_or_else (ctype, cur_type, string)
8208      tree ctype, cur_type;
8209      const char *string;
8210 {
8211   if (ctype && ctype != cur_type)
8212     {
8213       error (string, TYPE_NAME_STRING (ctype));
8214       return 0;
8215     }
8216   return 1;
8217 }
8218 \f
8219 /* Subroutine of `grokdeclarator'.  */
8220
8221 /* Generate errors possibly applicable for a given set of specifiers.
8222    This is for ARM $7.1.2.  */
8223
8224 static void
8225 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8226      tree object;
8227      const char *type;
8228      int virtualp, quals, friendp, raises, inlinep;
8229 {
8230   if (virtualp)
8231     cp_error ("`%D' declared as a `virtual' %s", object, type);
8232   if (inlinep)
8233     cp_error ("`%D' declared as an `inline' %s", object, type);
8234   if (quals)
8235     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8236               object, type);
8237   if (friendp)
8238     cp_error_at ("`%D' declared as a friend", object);
8239   if (raises)
8240     cp_error_at ("`%D' declared with an exception specification", object);
8241 }
8242
8243 /* CTYPE is class type, or null if non-class.
8244    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8245    or METHOD_TYPE.
8246    DECLARATOR is the function's name.
8247    VIRTUALP is truthvalue of whether the function is virtual or not.
8248    FLAGS are to be passed through to `grokclassfn'.
8249    QUALS are qualifiers indicating whether the function is `const'
8250    or `volatile'.
8251    RAISES is a list of exceptions that this function can raise.
8252    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8253    not look, and -1 if we should not call `grokclassfn' at all.  
8254
8255    Returns `NULL_TREE' if something goes wrong, after issuing
8256    applicable error messages.  */
8257
8258 static tree
8259 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8260             raises, check, friendp, publicp, inlinep, funcdef_flag,
8261             template_count, in_namespace)
8262      tree ctype, type;
8263      tree declarator;
8264      tree orig_declarator;
8265      int virtualp;
8266      enum overload_flags flags;
8267      tree quals, raises;
8268      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8269      tree in_namespace;
8270 {
8271   tree cname, decl;
8272   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8273   int has_default_arg = 0;
8274   tree t;
8275
8276   if (ctype)
8277     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8278       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8279   else
8280     cname = NULL_TREE;
8281
8282   if (raises)
8283     {
8284       type = build_exception_variant (type, raises);
8285     }
8286
8287   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8288   /* Propagate volatile out from type to decl. */
8289   if (TYPE_VOLATILE (type))
8290     TREE_THIS_VOLATILE (decl) = 1;
8291
8292   /* If this decl has namespace scope, set that up.  */
8293   if (in_namespace)
8294     set_decl_namespace (decl, in_namespace, friendp);
8295   else if (publicp && ! ctype)
8296     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8297
8298   /* `main' and builtins have implicit 'C' linkage.  */
8299   if ((MAIN_NAME_P (declarator)
8300        || (IDENTIFIER_LENGTH (declarator) > 10
8301            && IDENTIFIER_POINTER (declarator)[0] == '_'
8302            && IDENTIFIER_POINTER (declarator)[1] == '_'
8303            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8304       && current_lang_name == lang_name_cplusplus
8305       && ctype == NULL_TREE
8306       /* NULL_TREE means global namespace.  */
8307       && DECL_CONTEXT (decl) == NULL_TREE)
8308     DECL_LANGUAGE (decl) = lang_c;
8309
8310   /* Should probably propagate const out from type to decl I bet (mrs).  */
8311   if (staticp)
8312     {
8313       DECL_STATIC_FUNCTION_P (decl) = 1;
8314       DECL_CONTEXT (decl) = ctype;
8315     }
8316
8317   if (ctype)
8318     DECL_CLASS_CONTEXT (decl) = ctype;
8319
8320   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8321     {
8322       if (processing_template_decl)
8323         error ("cannot declare `main' to be a template");
8324       if (inlinep)
8325         error ("cannot declare `main' to be inline");
8326       else if (! publicp)
8327         error ("cannot declare `main' to be static");
8328       inlinep = 0;
8329       publicp = 1;
8330     }
8331
8332   /* Members of anonymous types and local classes have no linkage; make
8333      them internal.  */
8334   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8335                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8336     publicp = 0;
8337
8338   if (publicp)
8339     {
8340       /* [basic.link]: A name with no linkage (notably, the name of a class
8341          or enumeration declared in a local scope) shall not be used to
8342          declare an entity with linkage.
8343
8344          Only check this for public decls for now.  */
8345       t = no_linkage_check (TREE_TYPE (decl));
8346       if (t)
8347         {
8348           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8349             {
8350               if (DECL_LANGUAGE (decl) == lang_c)
8351                 /* Allow this; it's pretty common in C.  */;
8352               else
8353                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8354                             decl);
8355             }
8356           else
8357             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8358                         decl, t);
8359         }
8360     }
8361
8362   TREE_PUBLIC (decl) = publicp;
8363   if (! publicp)
8364     {
8365       DECL_INTERFACE_KNOWN (decl) = 1;
8366       DECL_NOT_REALLY_EXTERN (decl) = 1;
8367     }
8368
8369   if (inlinep)
8370     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8371
8372   DECL_EXTERNAL (decl) = 1;
8373   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8374     {
8375       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8376                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8377       quals = NULL_TREE;
8378     }
8379
8380   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8381     grok_op_properties (decl, virtualp, check < 0);
8382
8383   if (ctype && hack_decl_function_context (decl))
8384     DECL_NO_STATIC_CHAIN (decl) = 1;
8385
8386   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8387     if (TREE_PURPOSE (t)
8388         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8389       {
8390         has_default_arg = 1;
8391         break;
8392       }
8393
8394   if (friendp
8395       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8396     {
8397       if (funcdef_flag)
8398         cp_error
8399           ("defining explicit specialization `%D' in friend declaration",
8400            orig_declarator);
8401       else
8402         {
8403           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8404             {
8405               /* Something like `template <class T> friend void f<T>()'.  */
8406               cp_error ("template-id `%D' in declaration of primary template", 
8407                         orig_declarator);
8408               return NULL_TREE;
8409             }
8410
8411
8412           /* A friend declaration of the form friend void f<>().  Record
8413              the information in the TEMPLATE_ID_EXPR.  */
8414           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8415           DECL_TEMPLATE_INFO (decl)
8416             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8417                          TREE_OPERAND (orig_declarator, 1),
8418                          NULL_TREE);
8419
8420           if (has_default_arg)
8421             {
8422               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8423                         decl);
8424               return NULL_TREE;
8425             }
8426
8427           if (inlinep)
8428             {
8429               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8430                         decl);
8431               return NULL_TREE;
8432             }
8433         }
8434     }
8435
8436   if (has_default_arg)
8437     add_defarg_fn (decl);
8438
8439   /* Plain overloading: will not be grok'd by grokclassfn.  */
8440   if (! ctype && ! processing_template_decl
8441       && DECL_LANGUAGE (decl) != lang_c
8442       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8443     set_mangled_name_for_decl (decl);
8444
8445   if (funcdef_flag)
8446     /* Make the init_value nonzero so pushdecl knows this is not
8447        tentative.  error_mark_node is replaced later with the BLOCK.  */
8448     DECL_INITIAL (decl) = error_mark_node;
8449
8450   /* Caller will do the rest of this.  */
8451   if (check < 0)
8452     return decl;
8453
8454   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8455     {
8456       tree tmp;
8457       /* Just handle constructors here.  We could do this
8458          inside the following if stmt, but I think
8459          that the code is more legible by breaking this
8460          case out.  See comments below for what each of
8461          the following calls is supposed to do.  */
8462       DECL_CONSTRUCTOR_P (decl) = 1;
8463
8464       grokclassfn (ctype, decl, flags, quals);
8465
8466       decl = check_explicit_specialization (orig_declarator, decl,
8467                                             template_count, 
8468                                             2 * (funcdef_flag != 0) + 
8469                                             4 * (friendp != 0));
8470       if (decl == error_mark_node)
8471         return NULL_TREE;
8472
8473       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8474           && check)
8475         {
8476           tmp = check_classfn (ctype, decl);
8477
8478           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8479             tmp = DECL_TEMPLATE_RESULT(tmp);
8480
8481           if (tmp && DECL_ARTIFICIAL (tmp))
8482             cp_error ("definition of implicitly-declared `%D'", tmp);
8483           if (tmp && duplicate_decls (decl, tmp))
8484             return tmp;
8485         }
8486       if (! grok_ctor_properties (ctype, decl))
8487         return NULL_TREE;
8488     }
8489   else
8490     {
8491       tree tmp;
8492
8493       /* Function gets the ugly name, field gets the nice one.
8494          This call may change the type of the function (because
8495          of default parameters)!  */
8496       if (ctype != NULL_TREE)
8497         grokclassfn (ctype, decl, flags, quals);
8498
8499       decl = check_explicit_specialization (orig_declarator, decl,
8500                                             template_count, 
8501                                             2 * (funcdef_flag != 0) + 
8502                                             4 * (friendp != 0));
8503       if (decl == error_mark_node)
8504         return NULL_TREE;
8505
8506       if (ctype != NULL_TREE
8507           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8508           && check)
8509         {
8510           tmp = check_classfn (ctype, decl);
8511
8512           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8513             tmp = DECL_TEMPLATE_RESULT (tmp);
8514               
8515           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8516               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8517             {
8518               /* Remove the `this' parm added by grokclassfn.
8519                  XXX Isn't this done in start_function, too?  */
8520               revert_static_member_fn (&decl, NULL, NULL);
8521               last_function_parms = TREE_CHAIN (last_function_parms);
8522             }
8523           if (tmp && DECL_ARTIFICIAL (tmp))
8524             cp_error ("definition of implicitly-declared `%D'", tmp);
8525           if (tmp)
8526             {
8527               /* Attempt to merge the declarations.  This can fail, in
8528                  the case of some illegal specialization declarations.  */
8529               if (!duplicate_decls (decl, tmp))
8530                 cp_error ("no `%#D' member function declared in class `%T'",
8531                           decl, ctype);
8532               return tmp;
8533             }
8534         }
8535
8536       if (ctype == NULL_TREE || check)
8537         return decl;
8538
8539       if (virtualp)
8540         {
8541           DECL_VIRTUAL_P (decl) = 1;
8542           if (DECL_VINDEX (decl) == NULL_TREE)
8543             DECL_VINDEX (decl) = error_mark_node;
8544           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8545         }
8546     }
8547   return decl;
8548 }
8549
8550 static tree
8551 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8552      tree type;
8553      tree declarator;
8554      RID_BIT_TYPE *specbits_in;
8555      int initialized;
8556      int constp;
8557      tree in_namespace;
8558 {
8559   tree decl;
8560   RID_BIT_TYPE specbits;
8561
8562   specbits = *specbits_in;
8563
8564   if (TREE_CODE (type) == OFFSET_TYPE)
8565     {
8566       /* If you declare a static member so that it
8567          can be initialized, the code will reach here.  */
8568       tree basetype = TYPE_OFFSET_BASETYPE (type);
8569       type = TREE_TYPE (type);
8570       decl = build_lang_decl (VAR_DECL, declarator, type);
8571       DECL_CONTEXT (decl) = basetype;
8572       DECL_CLASS_CONTEXT (decl) = basetype;
8573       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8574     }
8575   else
8576     {
8577       tree context;
8578
8579       if (in_namespace)
8580         context = in_namespace;
8581       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8582         context = current_namespace;
8583       else
8584         context = NULL_TREE;
8585
8586       if (processing_template_decl) 
8587         {
8588           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8589              we can call push_template_decl.  */
8590           push_permanent_obstack ();
8591           decl = build_lang_decl (VAR_DECL, declarator, type);
8592           pop_obstacks ();
8593         }
8594       else
8595         decl = build_decl (VAR_DECL, declarator, type);
8596
8597       if (context)
8598         set_decl_namespace (decl, context, 0);
8599
8600       context = DECL_CONTEXT (decl);
8601       if (declarator && context && current_lang_name != lang_name_c)
8602         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8603     }
8604
8605   if (in_namespace)
8606     set_decl_namespace (decl, in_namespace, 0);
8607
8608   if (RIDBIT_SETP (RID_EXTERN, specbits))
8609     {
8610       DECL_THIS_EXTERN (decl) = 1;
8611       DECL_EXTERNAL (decl) = !initialized;
8612     }
8613
8614   /* In class context, static means one per class,
8615      public access, and static storage.  */
8616   if (DECL_CLASS_SCOPE_P (decl))
8617     {
8618       TREE_PUBLIC (decl) = 1;
8619       TREE_STATIC (decl) = 1;
8620       DECL_EXTERNAL (decl) = 0;
8621     }
8622   /* At top level, either `static' or no s.c. makes a definition
8623      (perhaps tentative), and absence of `static' makes it public.  */
8624   else if (toplevel_bindings_p ())
8625     {
8626       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8627                             && (DECL_THIS_EXTERN (decl) || ! constp));
8628       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8629     }
8630   /* Not at top level, only `static' makes a static definition.  */
8631   else
8632     {
8633       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8634       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8635     }
8636
8637   if (TREE_PUBLIC (decl))
8638     {
8639       /* [basic.link]: A name with no linkage (notably, the name of a class
8640          or enumeration declared in a local scope) shall not be used to
8641          declare an entity with linkage.
8642
8643          Only check this for public decls for now.  */
8644       tree t = no_linkage_check (TREE_TYPE (decl));
8645       if (t)
8646         {
8647           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8648             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8649           else
8650             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8651                         decl, t);
8652         }
8653     }
8654
8655   return decl;
8656 }
8657
8658 /* Create and return a canonical pointer to member function type, for
8659    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8660
8661 tree
8662 build_ptrmemfunc_type (type)
8663      tree type;
8664 {
8665   tree fields[4];
8666   tree t;
8667   tree u;
8668   tree unqualified_variant = NULL_TREE;
8669
8670   /* If a canonical type already exists for this type, use it.  We use
8671      this method instead of type_hash_canon, because it only does a
8672      simple equality check on the list of field members.  */
8673
8674   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8675     return t;
8676
8677   /* Make sure that we always have the unqualified pointer-to-member
8678      type first.  */
8679   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8680     unqualified_variant 
8681       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8682
8683   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8684
8685   u = make_lang_type (UNION_TYPE);
8686   SET_IS_AGGR_TYPE (u, 0);
8687   fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8688   fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8689                                delta_type_node);
8690   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8691   TYPE_NAME (u) = NULL_TREE;
8692
8693   t = make_lang_type (RECORD_TYPE);
8694
8695   /* Let the front-end know this is a pointer to member function...  */
8696   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8697   /* ... and not really an aggregate.  */
8698   SET_IS_AGGR_TYPE (t, 0);
8699
8700   fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8701                                delta_type_node);
8702   fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8703                                delta_type_node);
8704   fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8705   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8706
8707   pop_obstacks ();
8708
8709   /* Zap out the name so that the back-end will give us the debugging
8710      information for this anonymous RECORD_TYPE.  */
8711   TYPE_NAME (t) = NULL_TREE;
8712
8713   /* If this is not the unqualified form of this pointer-to-member
8714      type, set the TYPE_MAIN_VARIANT for this type to be the
8715      unqualified type.  Since they are actually RECORD_TYPEs that are
8716      not variants of each other, we must do this manually.  */
8717   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8718     {
8719       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8720       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8721       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8722       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8723     }
8724
8725   /* Cache this pointer-to-member type so that we can find it again
8726      later.  */
8727   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8728
8729   /* Seems to be wanted.  */
8730   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8731
8732   return t;
8733 }
8734
8735 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8736    Check to see that the definition is valid.  Issue appropriate error
8737    messages.  Return 1 if the definition is particularly bad, or 0
8738    otherwise.  */
8739
8740 int
8741 check_static_variable_definition (decl, type)
8742      tree decl;
8743      tree type;
8744 {
8745   /* Motion 10 at San Diego: If a static const integral data member is
8746      initialized with an integral constant expression, the initializer
8747      may appear either in the declaration (within the class), or in
8748      the definition, but not both.  If it appears in the class, the
8749      member is a member constant.  The file-scope definition is always
8750      required.  */
8751   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8752     {
8753       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8754                 type);
8755       /* If we just return the declaration, crashes will sometimes
8756          occur.  We therefore return void_type_node, as if this was a
8757          friend declaration, to cause callers to completely ignore
8758          this declaration.  */
8759       return 1;
8760     }
8761   else if (!CP_TYPE_CONST_P (type))
8762     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8763               decl);
8764   else if (pedantic && !INTEGRAL_TYPE_P (type))
8765     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8766
8767   return 0;
8768 }
8769
8770 /* Given declspecs and a declarator,
8771    determine the name and type of the object declared
8772    and construct a ..._DECL node for it.
8773    (In one case we can return a ..._TYPE node instead.
8774     For invalid input we sometimes return 0.)
8775
8776    DECLSPECS is a chain of tree_list nodes whose value fields
8777     are the storage classes and type specifiers.
8778
8779    DECL_CONTEXT says which syntactic context this declaration is in:
8780      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8781      FUNCDEF for a function definition.  Like NORMAL but a few different
8782       error messages in each case.  Return value may be zero meaning
8783       this definition is too screwy to try to parse.
8784      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8785       handle member functions (which have FIELD context).
8786       Return value may be zero meaning this definition is too screwy to
8787       try to parse.
8788      PARM for a parameter declaration (either within a function prototype
8789       or before a function body).  Make a PARM_DECL, or return void_type_node.
8790      CATCHPARM for a parameter declaration before a catch clause.
8791      TYPENAME if for a typename (in a cast or sizeof).
8792       Don't make a DECL node; just return the ..._TYPE node.
8793      FIELD for a struct or union field; make a FIELD_DECL.
8794      BITFIELD for a field with specified width.
8795    INITIALIZED is 1 if the decl has an initializer.
8796
8797    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8798    normal attributes in TREE_PURPOSE, or NULL_TREE.
8799
8800    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8801    It may also be so in the PARM case, for a prototype where the
8802    argument type is specified but not the name.
8803
8804    This function is where the complicated C meanings of `static'
8805    and `extern' are interpreted.
8806
8807    For C++, if there is any monkey business to do, the function which
8808    calls this one must do it, i.e., prepending instance variables,
8809    renaming overloaded function names, etc.
8810
8811    Note that for this C++, it is an error to define a method within a class
8812    which does not belong to that class.
8813
8814    Except in the case where SCOPE_REFs are implicitly known (such as
8815    methods within a class being redundantly qualified),
8816    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8817    (class_name::decl_name).  The caller must also deal with this.
8818
8819    If a constructor or destructor is seen, and the context is FIELD,
8820    then the type gains the attribute TREE_HAS_x.  If such a declaration
8821    is erroneous, NULL_TREE is returned.
8822
8823    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8824    function, these are the qualifiers to give to the `this' pointer.
8825
8826    May return void_type_node if the declarator turned out to be a friend.
8827    See grokfield for details.  */
8828
8829 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8830
8831 tree
8832 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8833      tree declspecs;
8834      tree declarator;
8835      enum decl_context decl_context;
8836      int initialized;
8837      tree attrlist;
8838 {
8839   RID_BIT_TYPE specbits;
8840   int nclasses = 0;
8841   tree spec;
8842   tree type = NULL_TREE;
8843   int longlong = 0;
8844   int constp;
8845   int restrictp;
8846   int volatilep;
8847   int type_quals;
8848   int virtualp, explicitp, friendp, inlinep, staticp;
8849   int explicit_int = 0;
8850   int explicit_char = 0;
8851   int defaulted_int = 0;
8852   tree typedef_decl = NULL_TREE;
8853   const char *name;
8854   tree typedef_type = NULL_TREE;
8855   int funcdef_flag = 0;
8856   enum tree_code innermost_code = ERROR_MARK;
8857   int bitfield = 0;
8858 #if 0
8859   /* See the code below that used this.  */
8860   tree decl_machine_attr = NULL_TREE;
8861 #endif
8862   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8863      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8864   tree init = NULL_TREE;
8865
8866   /* Keep track of what sort of function is being processed
8867      so that we can warn about default return values, or explicit
8868      return values which do not match prescribed defaults.  */
8869   enum return_types return_type = return_normal;
8870
8871   tree dname = NULL_TREE;
8872   tree ctype = current_class_type;
8873   tree ctor_return_type = NULL_TREE;
8874   enum overload_flags flags = NO_SPECIAL;
8875   tree quals = NULL_TREE;
8876   tree raises = NULL_TREE;
8877   int template_count = 0;
8878   tree in_namespace = NULL_TREE;
8879   tree inner_attrs;
8880   int ignore_attrs;
8881
8882   RIDBIT_RESET_ALL (specbits);
8883   if (decl_context == FUNCDEF)
8884     funcdef_flag = 1, decl_context = NORMAL;
8885   else if (decl_context == MEMFUNCDEF)
8886     funcdef_flag = -1, decl_context = FIELD;
8887   else if (decl_context == BITFIELD)
8888     bitfield = 1, decl_context = FIELD;
8889
8890   /* Look inside a declarator for the name being declared
8891      and get it as a string, for an error message.  */
8892   {
8893     tree *next = &declarator;
8894     register tree decl;
8895     name = NULL;
8896
8897     while (next && *next)
8898       {
8899         decl = *next;
8900         switch (TREE_CODE (decl))
8901           {
8902           case TREE_LIST:
8903             /* For attributes.  */
8904             next = &TREE_VALUE (decl);
8905             break;
8906
8907           case COND_EXPR:
8908             ctype = NULL_TREE;
8909             next = &TREE_OPERAND (decl, 0);
8910             break;
8911
8912           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8913             {
8914               tree name = TREE_OPERAND (decl, 0);
8915               tree rename = NULL_TREE;
8916
8917               my_friendly_assert (flags == NO_SPECIAL, 152);
8918               flags = DTOR_FLAG;
8919               return_type = return_dtor;
8920               if (TREE_CODE (name) == TYPE_DECL)
8921                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8922               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8923               if (ctype == NULL_TREE)
8924                 {
8925                   if (current_class_type == NULL_TREE)
8926                     {
8927                       error ("destructors must be member functions");
8928                       flags = NO_SPECIAL;
8929                     }
8930                   else
8931                     {
8932                       tree t = constructor_name (current_class_name);
8933                       if (t != name)
8934                         rename = t;
8935                     }
8936                 }
8937               else
8938                 {
8939                   tree t = constructor_name (ctype);
8940                   if (t != name)
8941                     rename = t;
8942                 }
8943
8944               if (rename)
8945                 {
8946                   cp_error ("destructor `%T' must match class name `%T'",
8947                             name, rename);
8948                   TREE_OPERAND (decl, 0) = rename;
8949                 }
8950               next = &name;
8951             }
8952             break;
8953
8954           case ADDR_EXPR:       /* C++ reference declaration */
8955             /* Fall through. */
8956           case ARRAY_REF:
8957           case INDIRECT_REF:
8958             ctype = NULL_TREE;
8959             innermost_code = TREE_CODE (decl);
8960             next = &TREE_OPERAND (decl, 0);
8961             break;
8962
8963           case CALL_EXPR:
8964             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8965               {
8966                 /* This is actually a variable declaration using
8967                    constructor syntax.  We need to call start_decl and
8968                    cp_finish_decl so we can get the variable
8969                    initialized...  */
8970
8971                 tree attributes, prefix_attributes;
8972
8973                 *next = TREE_OPERAND (decl, 0);
8974                 init = CALL_DECLARATOR_PARMS (decl);
8975
8976                 if (attrlist)
8977                   {
8978                     attributes = TREE_PURPOSE (attrlist);
8979                     prefix_attributes = TREE_VALUE (attrlist);
8980                   }
8981                 else
8982                   {
8983                     attributes = NULL_TREE;
8984                     prefix_attributes = NULL_TREE;
8985                   }
8986
8987                 decl = start_decl (declarator, declspecs, 1,
8988                                    attributes, prefix_attributes);
8989                 if (decl)
8990                   {
8991                     /* Look for __unused__ attribute */
8992                     if (TREE_USED (TREE_TYPE (decl)))
8993                       TREE_USED (decl) = 1;
8994                     finish_decl (decl, init, NULL_TREE);
8995                   }
8996                 else
8997                   cp_error ("invalid declarator");
8998                 return 0;
8999               }
9000             innermost_code = TREE_CODE (decl);
9001             if (decl_context == FIELD && ctype == NULL_TREE)
9002               ctype = current_class_type;
9003             if (ctype
9004                 && TREE_OPERAND (decl, 0)
9005                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9006                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9007                          == constructor_name_full (ctype))
9008                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9009                             == constructor_name (ctype)))))
9010               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9011             next = &TREE_OPERAND (decl, 0);
9012             decl = *next;
9013             if (ctype != NULL_TREE
9014                 && decl != NULL_TREE && flags != DTOR_FLAG
9015                 && decl == constructor_name (ctype))
9016               {
9017                 return_type = return_ctor;
9018                 ctor_return_type = ctype;
9019               }
9020             ctype = NULL_TREE;
9021             break;
9022             
9023           case TEMPLATE_ID_EXPR:
9024               {
9025                 tree fns = TREE_OPERAND (decl, 0);
9026
9027                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9028                   fns = TREE_OPERAND (fns, 0);
9029
9030                 dname = fns;
9031                 if (TREE_CODE (dname) == COMPONENT_REF)
9032                   dname = TREE_OPERAND (dname, 1);
9033                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9034                   {
9035                     my_friendly_assert (is_overloaded_fn (dname),
9036                                         19990331);
9037                     dname = DECL_NAME (get_first_fn (dname));
9038                   }
9039               }
9040           /* Fall through. */
9041
9042           case IDENTIFIER_NODE:
9043             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9044               dname = decl;
9045
9046             next = 0;
9047
9048             if (is_rid (dname))
9049               {
9050                 cp_error ("declarator-id missing; using reserved word `%D'",
9051                           dname);
9052                 name = IDENTIFIER_POINTER (dname);
9053               }
9054             if (! IDENTIFIER_OPNAME_P (dname)
9055                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9056                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9057               name = IDENTIFIER_POINTER (dname);
9058             else
9059               {
9060                 if (IDENTIFIER_TYPENAME_P (dname))
9061                   {
9062                     my_friendly_assert (flags == NO_SPECIAL, 154);
9063                     flags = TYPENAME_FLAG;
9064                     ctor_return_type = TREE_TYPE (dname);
9065                     return_type = return_conversion;
9066                   }
9067                 name = operator_name_string (dname);
9068               }
9069             break;
9070
9071             /* C++ extension */
9072           case SCOPE_REF:
9073             {
9074               /* Perform error checking, and decide on a ctype.  */
9075               tree cname = TREE_OPERAND (decl, 0);
9076               if (cname == NULL_TREE)
9077                 ctype = NULL_TREE;
9078               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9079                 {
9080                   ctype = NULL_TREE;
9081                   in_namespace = TREE_OPERAND (decl, 0);
9082                   TREE_OPERAND (decl, 0) = NULL_TREE;
9083                 }
9084               else if (! is_aggr_type (cname, 1))
9085                 TREE_OPERAND (decl, 0) = NULL_TREE;
9086               /* Must test TREE_OPERAND (decl, 1), in case user gives
9087                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9088               else if (TREE_OPERAND (decl, 1)
9089                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9090                 ctype = cname;
9091               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9092                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9093                 {
9094                   cp_error ("`%T::%D' is not a valid declarator", cname,
9095                             TREE_OPERAND (decl, 1));
9096                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9097                             cname, TREE_OPERAND (decl, 1));
9098                   return void_type_node;
9099                 }
9100               else if (ctype == NULL_TREE)
9101                 ctype = cname;
9102               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9103                 TREE_OPERAND (decl, 0) = ctype;
9104               else
9105                 {
9106                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9107                     {
9108                       cp_error ("type `%T' is not derived from type `%T'",
9109                                 cname, ctype);
9110                       TREE_OPERAND (decl, 0) = NULL_TREE;
9111                     }
9112                   else
9113                     ctype = cname;
9114                 }
9115
9116               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9117                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9118                        == constructor_name_full (ctype))
9119                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9120                           == constructor_name (ctype))))
9121                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9122               next = &TREE_OPERAND (decl, 1);
9123               decl = *next;
9124               if (ctype)
9125                 {
9126                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9127                       && constructor_name (ctype) == decl)
9128                     {
9129                       return_type = return_ctor;
9130                       ctor_return_type = ctype;
9131                     }
9132                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9133                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9134                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9135                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9136                     {
9137                       return_type = return_dtor;
9138                       ctor_return_type = ctype;
9139                       flags = DTOR_FLAG;
9140                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9141                       next = &TREE_OPERAND (decl, 0);
9142                     }
9143                 }
9144             }
9145             break;
9146
9147           case ERROR_MARK:
9148             next = 0;
9149             break;
9150
9151           case TYPE_DECL:
9152             /* Parse error puts this typespec where
9153                a declarator should go.  */
9154             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9155             if (TREE_TYPE (decl) == current_class_type)
9156               cp_error ("  perhaps you want `%T' for a constructor",
9157                         current_class_name);
9158             dname = DECL_NAME (decl);
9159             name = IDENTIFIER_POINTER (dname);
9160
9161             /* Avoid giving two errors for this.  */
9162             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9163
9164             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9165                                         declspecs);
9166             *next = dname;
9167             next = 0;
9168             break;
9169
9170           default:
9171             cp_compiler_error ("`%D' as declarator", decl);
9172             return 0; /* We used to do a 155 abort here.  */
9173           }
9174       }
9175   }
9176
9177   /* A function definition's declarator must have the form of
9178      a function declarator.  */
9179
9180   if (funcdef_flag && innermost_code != CALL_EXPR)
9181     return 0;
9182
9183   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9184       && innermost_code != CALL_EXPR
9185       && ! (ctype && declspecs == NULL_TREE))
9186     {
9187       cp_error ("declaration of `%D' as non-function", dname);
9188       return void_type_node;
9189     }
9190
9191   /* Anything declared one level down from the top level
9192      must be one of the parameters of a function
9193      (because the body is at least two levels down).  */
9194
9195   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9196      by not allowing C++ class definitions to specify their parameters
9197      with xdecls (must be spec.d in the parmlist).
9198
9199      Since we now wait to push a class scope until we are sure that
9200      we are in a legitimate method context, we must set oldcname
9201      explicitly (since current_class_name is not yet alive).
9202
9203      We also want to avoid calling this a PARM if it is in a namespace.  */
9204
9205   if (decl_context == NORMAL && !toplevel_bindings_p ())
9206     {
9207       struct binding_level *b = current_binding_level;
9208       current_binding_level = b->level_chain;
9209       if (current_binding_level != 0 && toplevel_bindings_p ())
9210         decl_context = PARM;
9211       current_binding_level = b;
9212     }
9213
9214   if (name == NULL)
9215     name = decl_context == PARM ? "parameter" : "type name";
9216   
9217   /* Look through the decl specs and record which ones appear.
9218      Some typespecs are defined as built-in typenames.
9219      Others, the ones that are modifiers of other types,
9220      are represented by bits in SPECBITS: set the bits for
9221      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9222
9223      If there is a typedef name or a type, store the type in TYPE.
9224      This includes builtin typedefs such as `int'.
9225
9226      Set EXPLICIT_INT if the type is `int' or `char' and did not
9227      come from a user typedef.
9228
9229      Set LONGLONG if `long' is mentioned twice.
9230
9231      For C++, constructors and destructors have their own fast treatment.  */
9232
9233   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9234     {
9235       register int i;
9236       register tree id;
9237
9238       /* Certain parse errors slip through.  For example,
9239          `int class;' is not caught by the parser. Try
9240          weakly to recover here.  */
9241       if (TREE_CODE (spec) != TREE_LIST)
9242         return 0;
9243
9244       id = TREE_VALUE (spec);
9245
9246       if (TREE_CODE (id) == IDENTIFIER_NODE)
9247         {
9248           if (id == ridpointers[(int) RID_INT]
9249               || id == ridpointers[(int) RID_CHAR]
9250               || id == ridpointers[(int) RID_BOOL]
9251               || id == ridpointers[(int) RID_WCHAR])
9252             {
9253               if (type)
9254                 {
9255                   if (id == ridpointers[(int) RID_BOOL])
9256                     error ("`bool' is now a keyword");
9257                   else
9258                     cp_error ("extraneous `%T' ignored", id);
9259                 }
9260               else
9261                 {
9262                   if (id == ridpointers[(int) RID_INT])
9263                     explicit_int = 1;
9264                   else if (id == ridpointers[(int) RID_CHAR])
9265                     explicit_char = 1;
9266                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9267                 }
9268               goto found;
9269             }
9270           /* C++ aggregate types.  */
9271           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9272             {
9273               if (type)
9274                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9275               else
9276                 type = IDENTIFIER_TYPE_VALUE (id);
9277               goto found;
9278             }
9279
9280           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9281             {
9282               if (ridpointers[i] == id)
9283                 {
9284                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9285                     {
9286                       if (pedantic && ! in_system_header && warn_long_long)
9287                         pedwarn ("ANSI C++ does not support `long long'");
9288                       if (longlong)
9289                         error ("`long long long' is too long for GCC");
9290                       else
9291                         longlong = 1;
9292                     }
9293                   else if (RIDBIT_SETP (i, specbits))
9294                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9295                   RIDBIT_SET (i, specbits);
9296                   goto found;
9297                 }
9298             }
9299         }
9300       /* C++ aggregate types.  */
9301       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9302         {
9303           if (type)
9304             cp_error ("multiple declarations `%T' and `%T'", type,
9305                       TREE_TYPE (id));
9306           else
9307             {
9308               type = TREE_TYPE (id);
9309               TREE_VALUE (spec) = type;
9310             }
9311           goto found;
9312         }
9313       if (type)
9314         error ("two or more data types in declaration of `%s'", name);
9315       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9316         {
9317           register tree t = lookup_name (id, 1);
9318           if (!t || TREE_CODE (t) != TYPE_DECL)
9319             error ("`%s' fails to be a typedef or built in type",
9320                    IDENTIFIER_POINTER (id));
9321           else
9322             {
9323               type = TREE_TYPE (t);
9324 #if 0
9325               /* See the code below that used this.  */
9326               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9327 #endif
9328               typedef_decl = t;
9329             }
9330         }
9331       else if (id != error_mark_node)
9332         /* Can't change CLASS nodes into RECORD nodes here!  */
9333         type = id;
9334
9335     found: ;
9336     }
9337
9338   typedef_type = type;
9339
9340   /* No type at all: default to `int', and set DEFAULTED_INT
9341      because it was not a user-defined typedef.  */
9342
9343   if (type == NULL_TREE
9344       && (RIDBIT_SETP (RID_SIGNED, specbits)
9345           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9346           || RIDBIT_SETP (RID_LONG, specbits)
9347           || RIDBIT_SETP (RID_SHORT, specbits)))
9348     {
9349       /* These imply 'int'.  */
9350       type = integer_type_node;
9351       defaulted_int = 1;
9352     }
9353
9354   if (type == NULL_TREE)
9355     {
9356       explicit_int = -1;
9357       if (return_type == return_dtor)
9358         type = void_type_node;
9359       else if (return_type == return_ctor)
9360         type = build_pointer_type (ctor_return_type);
9361       else if (return_type == return_conversion)
9362         type = ctor_return_type;
9363       else
9364         {
9365           /* We handle `main' specially here, because 'main () { }' is so
9366              common.  With no options, it is allowed.  With -Wreturn-type,
9367              it is a warning.  It is only an error with -pedantic-errors.  */
9368           int is_main = (funcdef_flag
9369                          && MAIN_NAME_P (dname)
9370                          && ctype == NULL_TREE
9371                          && in_namespace == NULL_TREE
9372                          && current_namespace == global_namespace);
9373
9374           if (in_system_header || flag_ms_extensions)
9375             /* Allow it, sigh.  */;
9376           else if (pedantic || ! is_main)
9377             cp_pedwarn ("ANSI C++ forbids declaration of `%s' with no type",
9378                         name);
9379           else if (warn_return_type)
9380             cp_warning ("ANSI C++ forbids declaration of `%s' with no type",
9381                         name);
9382
9383           type = integer_type_node;
9384         }
9385     }
9386   else if (return_type == return_dtor)
9387     {
9388       error ("return type specification for destructor invalid");
9389       type = void_type_node;
9390     }
9391   else if (return_type == return_ctor)
9392     {
9393       error ("return type specification for constructor invalid");
9394       type = build_pointer_type (ctor_return_type);
9395     }
9396   else if (return_type == return_conversion)
9397     {
9398       if (!same_type_p (type, ctor_return_type))
9399         cp_error ("operator `%T' declared to return `%T'",
9400                   ctor_return_type, type);
9401       else
9402         cp_pedwarn ("return type specified for `operator %T'",
9403                     ctor_return_type);
9404
9405       type = ctor_return_type;
9406     }
9407
9408   ctype = NULL_TREE;
9409
9410   /* Now process the modifiers that were specified
9411      and check for invalid combinations.  */
9412
9413   /* Long double is a special combination.  */
9414
9415   if (RIDBIT_SETP (RID_LONG, specbits)
9416       && TYPE_MAIN_VARIANT (type) == double_type_node)
9417     {
9418       RIDBIT_RESET (RID_LONG, specbits);
9419       type = build_qualified_type (long_double_type_node, 
9420                                    CP_TYPE_QUALS (type));
9421     }
9422
9423   /* Check all other uses of type modifiers.  */
9424
9425   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9426       || RIDBIT_SETP (RID_SIGNED, specbits)
9427       || RIDBIT_SETP (RID_LONG, specbits)
9428       || RIDBIT_SETP (RID_SHORT, specbits))
9429     {
9430       int ok = 0;
9431
9432       if (TREE_CODE (type) == REAL_TYPE)
9433         error ("short, signed or unsigned invalid for `%s'", name);
9434       else if (TREE_CODE (type) != INTEGER_TYPE)
9435         error ("long, short, signed or unsigned invalid for `%s'", name);
9436       else if (RIDBIT_SETP (RID_LONG, specbits)
9437                && RIDBIT_SETP (RID_SHORT, specbits))
9438         error ("long and short specified together for `%s'", name);
9439       else if ((RIDBIT_SETP (RID_LONG, specbits)
9440                 || RIDBIT_SETP (RID_SHORT, specbits))
9441                && explicit_char)
9442         error ("long or short specified with char for `%s'", name);
9443       else if ((RIDBIT_SETP (RID_LONG, specbits)
9444                 || RIDBIT_SETP (RID_SHORT, specbits))
9445                && TREE_CODE (type) == REAL_TYPE)
9446         error ("long or short specified with floating type for `%s'", name);
9447       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9448                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9449         error ("signed and unsigned given together for `%s'", name);
9450       else
9451         {
9452           ok = 1;
9453           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9454             {
9455               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9456                        name);
9457               if (flag_pedantic_errors)
9458                 ok = 0;
9459             }
9460         }
9461
9462       /* Discard the type modifiers if they are invalid.  */
9463       if (! ok)
9464         {
9465           RIDBIT_RESET (RID_UNSIGNED, specbits);
9466           RIDBIT_RESET (RID_SIGNED, specbits);
9467           RIDBIT_RESET (RID_LONG, specbits);
9468           RIDBIT_RESET (RID_SHORT, specbits);
9469           longlong = 0;
9470         }
9471     }
9472
9473   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9474       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9475     {
9476       error ("complex invalid for `%s'", name);
9477       RIDBIT_RESET (RID_COMPLEX, specbits);
9478     }
9479
9480   /* Decide whether an integer type is signed or not.
9481      Optionally treat bitfields as signed by default.  */
9482   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9483       /* [class.bit]
9484
9485          It is implementation-defined whether a plain (neither
9486          explicitly signed or unsigned) char, short, int, or long
9487          bit-field is signed or unsigned.
9488              
9489          Naturally, we extend this to long long as well.  Note that
9490          this does not include wchar_t.  */
9491       || (bitfield && !flag_signed_bitfields
9492           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9493           /* A typedef for plain `int' without `signed' can be
9494              controlled just like plain `int', but a typedef for
9495              `signed int' cannot be so controlled.  */
9496           && !(typedef_decl 
9497                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9498           && (TREE_CODE (type) == INTEGER_TYPE
9499               || TREE_CODE (type) == CHAR_TYPE)
9500           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9501     {
9502       if (longlong)
9503         type = long_long_unsigned_type_node;
9504       else if (RIDBIT_SETP (RID_LONG, specbits))
9505         type = long_unsigned_type_node;
9506       else if (RIDBIT_SETP (RID_SHORT, specbits))
9507         type = short_unsigned_type_node;
9508       else if (type == char_type_node)
9509         type = unsigned_char_type_node;
9510       else if (typedef_decl)
9511         type = unsigned_type (type);
9512       else
9513         type = unsigned_type_node;
9514     }
9515   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9516            && type == char_type_node)
9517     type = signed_char_type_node;
9518   else if (longlong)
9519     type = long_long_integer_type_node;
9520   else if (RIDBIT_SETP (RID_LONG, specbits))
9521     type = long_integer_type_node;
9522   else if (RIDBIT_SETP (RID_SHORT, specbits))
9523     type = short_integer_type_node;
9524
9525   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9526     {
9527       /* If we just have "complex", it is equivalent to
9528          "complex double", but if any modifiers at all are specified it is
9529          the complex form of TYPE.  E.g, "complex short" is
9530          "complex short int".  */
9531
9532       if (defaulted_int && ! longlong
9533           && ! (RIDBIT_SETP (RID_LONG, specbits)
9534                 || RIDBIT_SETP (RID_SHORT, specbits)
9535                 || RIDBIT_SETP (RID_SIGNED, specbits)
9536                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9537         type = complex_double_type_node;
9538       else if (type == integer_type_node)
9539         type = complex_integer_type_node;
9540       else if (type == float_type_node)
9541         type = complex_float_type_node;
9542       else if (type == double_type_node)
9543         type = complex_double_type_node;
9544       else if (type == long_double_type_node)
9545         type = complex_long_double_type_node;
9546       else
9547         type = build_complex_type (type);
9548     }
9549
9550   if (return_type == return_conversion 
9551       && (RIDBIT_SETP (RID_CONST, specbits)
9552           || RIDBIT_SETP (RID_VOLATILE, specbits)
9553           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9554     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9555               ctor_return_type);
9556
9557   /* Set CONSTP if this declaration is `const', whether by
9558      explicit specification or via a typedef.
9559      Likewise for VOLATILEP.  */
9560
9561   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9562   restrictp = 
9563     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9564   volatilep = 
9565     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9566   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9567                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9568                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9569   type = cp_build_qualified_type (type, type_quals);
9570   staticp = 0;
9571   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9572   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9573   RIDBIT_RESET (RID_VIRTUAL, specbits);
9574   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9575   RIDBIT_RESET (RID_EXPLICIT, specbits);
9576
9577   if (RIDBIT_SETP (RID_STATIC, specbits))
9578     staticp = 1 + (decl_context == FIELD);
9579
9580   if (virtualp && staticp == 2)
9581     {
9582       cp_error ("member `%D' cannot be declared both virtual and static",
9583                 dname);
9584       staticp = 0;
9585     }
9586   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9587   RIDBIT_RESET (RID_FRIEND, specbits);
9588
9589   /* Warn if two storage classes are given. Default to `auto'.  */
9590
9591   if (RIDBIT_ANY_SET (specbits))
9592     {
9593       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9594       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9595       if (decl_context == PARM && nclasses > 0)
9596         error ("storage class specifiers invalid in parameter declarations");
9597       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9598         {
9599           if (decl_context == PARM)
9600             error ("typedef declaration invalid in parameter declaration");
9601           nclasses++;
9602         }
9603       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9604       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9605     }
9606
9607   /* Give error if `virtual' is used outside of class declaration.  */
9608   if (virtualp
9609       && (current_class_name == NULL_TREE || decl_context != FIELD))
9610     {
9611       error ("virtual outside class declaration");
9612       virtualp = 0;
9613     }
9614
9615   /* Static anonymous unions are dealt with here.  */
9616   if (staticp && decl_context == TYPENAME
9617       && TREE_CODE (declspecs) == TREE_LIST
9618       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9619     decl_context = FIELD;
9620
9621   /* Warn about storage classes that are invalid for certain
9622      kinds of declarations (parameters, typenames, etc.).  */
9623
9624   if (nclasses > 1)
9625     error ("multiple storage classes in declaration of `%s'", name);
9626   else if (decl_context != NORMAL && nclasses > 0)
9627     {
9628       if ((decl_context == PARM || decl_context == CATCHPARM)
9629           && (RIDBIT_SETP (RID_REGISTER, specbits)
9630               || RIDBIT_SETP (RID_AUTO, specbits)))
9631         ;
9632       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9633         ;
9634       else if (decl_context == FIELD
9635                /* C++ allows static class elements  */
9636                && RIDBIT_SETP (RID_STATIC, specbits))
9637         /* C++ also allows inlines and signed and unsigned elements,
9638            but in those cases we don't come in here.  */
9639         ;
9640       else
9641         {
9642           if (decl_context == FIELD)
9643             {
9644               tree tmp = NULL_TREE;
9645               register int op = 0;
9646
9647               if (declarator)
9648                 {
9649                   /* Avoid trying to get an operand off an identifier node.  */ 
9650                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9651                     tmp = declarator;
9652                   else
9653                     tmp = TREE_OPERAND (declarator, 0);
9654                   op = IDENTIFIER_OPNAME_P (tmp);
9655                 }
9656               error ("storage class specified for %s `%s'",
9657                      op ? "member operator" : "field",
9658                      op ? operator_name_string (tmp) : name);
9659             }
9660           else
9661             error (((decl_context == PARM || decl_context == CATCHPARM)
9662                     ? "storage class specified for parameter `%s'"
9663                     : "storage class specified for typename"), name);
9664           RIDBIT_RESET (RID_REGISTER, specbits);
9665           RIDBIT_RESET (RID_AUTO, specbits);
9666           RIDBIT_RESET (RID_EXTERN, specbits);
9667         }
9668     }
9669   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9670     {
9671       if (toplevel_bindings_p ())
9672         {
9673           /* It's common practice (and completely valid) to have a const
9674              be initialized and declared extern.  */
9675           if (!(type_quals & TYPE_QUAL_CONST))
9676             warning ("`%s' initialized and declared `extern'", name);
9677         }
9678       else
9679         error ("`%s' has both `extern' and initializer", name);
9680     }
9681   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9682            && ! toplevel_bindings_p ())
9683     error ("nested function `%s' declared `extern'", name);
9684   else if (toplevel_bindings_p ())
9685     {
9686       if (RIDBIT_SETP (RID_AUTO, specbits))
9687         error ("top-level declaration of `%s' specifies `auto'", name);
9688     }
9689
9690   if (nclasses > 0 && friendp)
9691     error ("storage class specifiers invalid in friend function declarations");
9692
9693   /* Now figure out the structure of the declarator proper.
9694      Descend through it, creating more complex types, until we reach
9695      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9696
9697   inner_attrs = NULL_TREE;
9698   ignore_attrs = 0;  
9699
9700   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9701          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9702     {
9703       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9704          an INDIRECT_REF (for *...),
9705          a CALL_EXPR (for ...(...)),
9706          an identifier (for the name being declared)
9707          or a null pointer (for the place in an absolute declarator
9708          where the name was omitted).
9709          For the last two cases, we have just exited the loop.
9710
9711          For C++ it could also be
9712          a SCOPE_REF (for class :: ...).  In this case, we have converted
9713          sensible names to types, and those are the values we use to
9714          qualify the member name.
9715          an ADDR_EXPR (for &...),
9716          a BIT_NOT_EXPR (for destructors)
9717
9718          At this point, TYPE is the type of elements of an array,
9719          or for a function to return, or for a pointer to point to.
9720          After this sequence of ifs, TYPE is the type of the
9721          array or function or pointer, and DECLARATOR has had its
9722          outermost layer removed.  */
9723
9724       if (type == error_mark_node)
9725         {
9726           if (TREE_CODE (declarator) == SCOPE_REF)
9727             declarator = TREE_OPERAND (declarator, 1);
9728           else
9729             declarator = TREE_OPERAND (declarator, 0);
9730           continue;
9731         }
9732       if (quals != NULL_TREE
9733           && (declarator == NULL_TREE
9734               || TREE_CODE (declarator) != SCOPE_REF))
9735         {
9736           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9737             ctype = TYPE_METHOD_BASETYPE (type);
9738           if (ctype != NULL_TREE)
9739             {
9740               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9741               ctype = grok_method_quals (ctype, dummy, quals);
9742               type = TREE_TYPE (dummy);
9743               quals = NULL_TREE;
9744             }
9745         }
9746
9747       /* See the comment for the TREE_LIST case, below.  */
9748       if (ignore_attrs)
9749         ignore_attrs = 0;
9750       else if (inner_attrs)
9751         {
9752           decl_attributes (type, inner_attrs, NULL_TREE);
9753           inner_attrs = NULL_TREE;
9754         }
9755
9756       switch (TREE_CODE (declarator))
9757         {
9758         case TREE_LIST:
9759           {
9760             /* We encode a declarator with embedded attributes using
9761                a TREE_LIST.  The attributes apply to the declarator
9762                directly inside them, so we have to skip an iteration
9763                before applying them to the type.  If the declarator just
9764                inside is the declarator-id, we apply the attrs to the
9765                decl itself.  */
9766             inner_attrs = TREE_PURPOSE (declarator);
9767             ignore_attrs = 1;
9768             declarator = TREE_VALUE (declarator);
9769           }
9770           break;
9771
9772         case ARRAY_REF:
9773           {
9774             register tree itype = NULL_TREE;
9775             register tree size = TREE_OPERAND (declarator, 1);
9776             /* The index is a signed object `sizetype' bits wide.  */
9777             tree index_type = signed_type (sizetype);
9778
9779             declarator = TREE_OPERAND (declarator, 0);
9780
9781             /* Check for some types that there cannot be arrays of.  */
9782
9783             if (TREE_CODE (type) == VOID_TYPE)
9784               {
9785                 cp_error ("declaration of `%D' as array of voids", dname);
9786                 type = error_mark_node;
9787               }
9788
9789             if (TREE_CODE (type) == FUNCTION_TYPE)
9790               {
9791                 cp_error ("declaration of `%D' as array of functions", dname);
9792                 type = error_mark_node;
9793               }
9794
9795             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9796                you can't have arrays of references.  If we allowed them,
9797                then we'd be saying x[i] is valid for an array x, but
9798                then you'd have to ask: what does `*(x + i)' mean?  */
9799             if (TREE_CODE (type) == REFERENCE_TYPE)
9800               {
9801                 if (decl_context == TYPENAME)
9802                   cp_error ("cannot make arrays of references");
9803                 else
9804                   cp_error ("declaration of `%D' as array of references",
9805                             dname);
9806                 type = error_mark_node;
9807               }
9808
9809             if (TREE_CODE (type) == OFFSET_TYPE)
9810               {
9811                   cp_error ("declaration of `%D' as array of data members",
9812                             dname);
9813                 type = error_mark_node;
9814               }
9815
9816             if (TREE_CODE (type) == METHOD_TYPE)
9817               {
9818                 cp_error ("declaration of `%D' as array of function members",
9819                           dname);
9820                 type = error_mark_node;
9821               }
9822
9823             if (size == error_mark_node)
9824               type = error_mark_node;
9825             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9826               {
9827                 /* [dcl.array]
9828
9829                    the constant expressions that specify the bounds of
9830                    the arrays can be omitted only for the first member
9831                    of the sequence.  */
9832                 cp_error ("declaration of `%D' as multidimensional array",
9833                           dname);
9834                 cp_error ("must have bounds for all dimensions except the first");
9835                 type = error_mark_node;
9836               }
9837
9838             if (type == error_mark_node)
9839               continue;
9840
9841             /* VC++ spells a zero-sized array with [].  */
9842             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9843                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9844               size = integer_zero_node;
9845
9846             if (size)
9847               {
9848                 /* Might be a cast. */
9849                 if (TREE_CODE (size) == NOP_EXPR
9850                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9851                   size = TREE_OPERAND (size, 0);
9852                 if (TREE_READONLY_DECL_P (size))
9853                   size = decl_constant_value (size);
9854
9855                 /* If this involves a template parameter, it will be a
9856                    constant at instantiation time, but we don't know
9857                    what the value is yet.  Even if no template
9858                    parameters are involved, we may an expression that
9859                    is not a constant; we don't even simplify `1 + 2'
9860                    when processing a template.  */
9861                 if (processing_template_decl)
9862                   {
9863                     /* Resolve a qualified reference to an enumerator or
9864                        static const data member of ours.  */
9865                     if (TREE_CODE (size) == SCOPE_REF
9866                         && TREE_OPERAND (size, 0) == current_class_type)
9867                       {
9868                         tree t = lookup_field (current_class_type,
9869                                                TREE_OPERAND (size, 1), 0, 0);
9870                         if (t)
9871                           size = t;
9872                       }
9873
9874                     itype = build_index_type (build_min
9875                       (MINUS_EXPR, sizetype, size, integer_one_node));
9876                     goto dont_grok_size;
9877                   }
9878
9879                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9880                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9881                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9882                   {
9883                     cp_error ("size of array `%D' has non-integer type",
9884                               dname);
9885                     size = integer_one_node;
9886                   }
9887                 if (pedantic && !in_system_header && integer_zerop (size))
9888                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9889                 if (TREE_CONSTANT (size))
9890                   {
9891                     int old_flag_pedantic_errors = flag_pedantic_errors;
9892                     int old_pedantic = pedantic;
9893                     pedantic = flag_pedantic_errors = 1;
9894                     /* Always give overflow errors on array subscripts.  */
9895                     constant_expression_warning (size);
9896                     pedantic = old_pedantic;
9897                     flag_pedantic_errors = old_flag_pedantic_errors;
9898                     if (INT_CST_LT (size, integer_zero_node))
9899                       {
9900                         cp_error ("size of array `%D' is negative", dname);
9901                         size = integer_one_node;
9902                       }
9903                   }
9904                 else
9905                   {
9906                     if (pedantic)
9907                       {
9908                         if (dname)
9909                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9910                                       dname);
9911                         else
9912                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9913                       }
9914                   }
9915
9916                 itype
9917                   = fold (build_binary_op (MINUS_EXPR,
9918                                            cp_convert (index_type, size),
9919                                            cp_convert (index_type,
9920                                                        integer_one_node)));
9921                 if (! TREE_CONSTANT (itype))
9922                   itype = variable_size (itype);
9923                 else if (TREE_OVERFLOW (itype))
9924                   {
9925                     error ("overflow in array dimension");
9926                     TREE_OVERFLOW (itype) = 0;
9927                   }
9928
9929                 itype = build_index_type (itype);
9930               }
9931
9932           dont_grok_size:
9933             type = build_cplus_array_type (type, itype);
9934             ctype = NULL_TREE;
9935           }
9936           break;
9937
9938         case CALL_EXPR:
9939           {
9940             tree arg_types;
9941             int funcdecl_p;
9942             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9943             tree inner_decl = TREE_OPERAND (declarator, 0);
9944
9945             /* Declaring a function type.
9946                Make sure we have a valid type for the function to return.  */
9947
9948             /* We now know that the TYPE_QUALS don't apply to the
9949                decl, but to its return type.  */
9950             type_quals = TYPE_UNQUALIFIED;
9951
9952             /* Warn about some types functions can't return.  */
9953
9954             if (TREE_CODE (type) == FUNCTION_TYPE)
9955               {
9956                 error ("`%s' declared as function returning a function", name);
9957                 type = integer_type_node;
9958               }
9959             if (TREE_CODE (type) == ARRAY_TYPE)
9960               {
9961                 error ("`%s' declared as function returning an array", name);
9962                 type = integer_type_node;
9963               }
9964
9965             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9966               inner_decl = TREE_OPERAND (inner_decl, 1);
9967
9968             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
9969               inner_decl = dname;
9970
9971             /* Pick up type qualifiers which should be applied to `this'.  */
9972             quals = CALL_DECLARATOR_QUALS (declarator);
9973
9974             /* Pick up the exception specifications.  */
9975             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9976
9977             /* Say it's a definition only for the CALL_EXPR
9978                closest to the identifier.  */
9979             funcdecl_p
9980               = inner_decl 
9981               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9982                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
9983                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9984             
9985             if (ctype == NULL_TREE
9986                 && decl_context == FIELD
9987                 && funcdecl_p
9988                 && (friendp == 0 || dname == current_class_name))
9989               ctype = current_class_type;
9990
9991             if (ctype && return_type == return_conversion)
9992               TYPE_HAS_CONVERSION (ctype) = 1;
9993             if (ctype && constructor_name (ctype) == dname)
9994               {
9995                 /* We are within a class's scope. If our declarator name
9996                    is the same as the class name, and we are defining
9997                    a function, then it is a constructor/destructor, and
9998                    therefore returns a void type.  */
9999
10000                 if (flags == DTOR_FLAG)
10001                   {
10002                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
10003                        not be declared const or volatile.  A destructor
10004                        may not be static.  */
10005                     if (staticp == 2)
10006                       error ("destructor cannot be static member function");
10007                     if (quals)
10008                       {
10009                         cp_error ("destructors may not be `%s'",
10010                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10011                         quals = NULL_TREE;
10012                       }
10013                     if (decl_context == FIELD)
10014                       {
10015                         if (! member_function_or_else (ctype, current_class_type,
10016                                                        "destructor for alien class `%s' cannot be a member"))
10017                           return void_type_node;
10018                       }
10019                   }
10020                 else            /* It's a constructor.  */
10021                   {
10022                     if (explicitp == 1)
10023                       explicitp = 2;
10024                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10025                        not be declared const or volatile.  A constructor may
10026                        not be virtual.  A constructor may not be static.  */
10027                     if (staticp == 2)
10028                       error ("constructor cannot be static member function");
10029                     if (virtualp)
10030                       {
10031                         pedwarn ("constructors cannot be declared virtual");
10032                         virtualp = 0;
10033                       }
10034                     if (quals)
10035                       {
10036                         cp_error ("constructors may not be `%s'",
10037                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10038                         quals = NULL_TREE;
10039                       }
10040                     {
10041                       RID_BIT_TYPE tmp_bits;
10042                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10043                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10044                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10045                       if (RIDBIT_ANY_SET (tmp_bits))
10046                         error ("return value type specifier for constructor ignored");
10047                     }
10048                     type = build_pointer_type (ctype);
10049                     if (decl_context == FIELD)
10050                       {
10051                         if (! member_function_or_else (ctype, current_class_type,
10052                                                        "constructor for alien class `%s' cannot be member"))
10053                           return void_type_node;
10054                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10055                         if (return_type != return_ctor)
10056                           return NULL_TREE;
10057                       }
10058                   }
10059                 if (decl_context == FIELD)
10060                   staticp = 0;
10061               }
10062             else if (friendp)
10063               {
10064                 if (initialized)
10065                   error ("can't initialize friend function `%s'", name);
10066                 if (virtualp)
10067                   {
10068                     /* Cannot be both friend and virtual.  */
10069                     error ("virtual functions cannot be friends");
10070                     RIDBIT_RESET (RID_FRIEND, specbits);
10071                     friendp = 0;
10072                   }
10073                 if (decl_context == NORMAL)
10074                   error ("friend declaration not in class definition");
10075                 if (current_function_decl && funcdef_flag)
10076                   cp_error ("can't define friend function `%s' in a local class definition",
10077                             name);
10078               }
10079
10080             /* Construct the function type and go to the next
10081                inner layer of declarator.  */
10082
10083             declarator = TREE_OPERAND (declarator, 0);
10084
10085             /* FIXME: This is where default args should be fully
10086                processed.  */
10087
10088             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10089
10090             if (declarator && flags == DTOR_FLAG)
10091               {
10092                 /* A destructor declared in the body of a class will
10093                    be represented as a BIT_NOT_EXPR.  But, we just
10094                    want the underlying IDENTIFIER.  */
10095                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10096                   declarator = TREE_OPERAND (declarator, 0);
10097                 
10098                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10099                   arg_types = void_list_node;
10100                 else if (arg_types == NULL_TREE
10101                          || arg_types != void_list_node)
10102                   {
10103                     cp_error ("destructors may not have parameters");
10104                     arg_types = void_list_node;
10105                     last_function_parms = NULL_TREE;
10106                   }
10107               }
10108
10109             /* ANSI says that `const int foo ();'
10110                does not make the function foo const.  */
10111             type = build_function_type (type, arg_types);
10112
10113             {
10114               tree t;
10115               for (t = arg_types; t; t = TREE_CHAIN (t))
10116                 if (TREE_PURPOSE (t)
10117                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10118                   {
10119                     add_defarg_fn (type);
10120                     break;
10121                   }
10122             }
10123           }
10124           break;
10125
10126         case ADDR_EXPR:
10127         case INDIRECT_REF:
10128           /* Filter out pointers-to-references and references-to-references.
10129              We can get these if a TYPE_DECL is used.  */
10130
10131           if (TREE_CODE (type) == REFERENCE_TYPE)
10132             {
10133               error ("cannot declare %s to references",
10134                      TREE_CODE (declarator) == ADDR_EXPR
10135                      ? "references" : "pointers");
10136               declarator = TREE_OPERAND (declarator, 0);
10137               continue;
10138             }
10139
10140           if (TREE_CODE (type) == OFFSET_TYPE
10141               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10142                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10143             {
10144               cp_error ("cannot declare pointer to `%#T' member",
10145                         TREE_TYPE (type));
10146               type = TREE_TYPE (type);
10147             }
10148
10149           /* Merge any constancy or volatility into the target type
10150              for the pointer.  */
10151
10152           /* We now know that the TYPE_QUALS don't apply to the decl,
10153              but to the target of the pointer.  */
10154           type_quals = TYPE_UNQUALIFIED;
10155
10156           if (TREE_CODE (declarator) == ADDR_EXPR)
10157             {
10158               if (TREE_CODE (type) == VOID_TYPE)
10159                 error ("invalid type: `void &'");
10160               else
10161                 type = build_reference_type (type);
10162             }
10163           else if (TREE_CODE (type) == METHOD_TYPE)
10164             type = build_ptrmemfunc_type (build_pointer_type (type));
10165           else
10166             type = build_pointer_type (type);
10167
10168           /* Process a list of type modifier keywords (such as
10169              const or volatile) that were given inside the `*' or `&'.  */
10170
10171           if (TREE_TYPE (declarator))
10172             {
10173               register tree typemodlist;
10174               int erred = 0;
10175
10176               constp = 0;
10177               volatilep = 0;
10178               restrictp = 0;
10179               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10180                    typemodlist = TREE_CHAIN (typemodlist))
10181                 {
10182                   tree qualifier = TREE_VALUE (typemodlist);
10183
10184                   if (qualifier == ridpointers[(int) RID_CONST])
10185                     constp++;
10186                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10187                     volatilep++;
10188                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10189                     restrictp++;
10190                   else if (!erred)
10191                     {
10192                       erred = 1;
10193                       error ("invalid type modifier within pointer declarator");
10194                     }
10195                 }
10196               if (constp > 1)
10197                 pedwarn ("duplicate `const'");
10198               if (volatilep > 1)
10199                 pedwarn ("duplicate `volatile'");
10200               if (restrictp > 1)
10201                 pedwarn ("duplicate `restrict'");
10202
10203               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10204                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10205                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10206               if (TREE_CODE (declarator) == ADDR_EXPR
10207                   && (constp || volatilep))
10208                 {
10209                   if (constp)
10210                     pedwarn ("discarding `const' applied to a reference");
10211                   if (volatilep)
10212                     pedwarn ("discarding `volatile' applied to a reference");
10213                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10214                 }
10215               type = cp_build_qualified_type (type, type_quals);
10216             }
10217           declarator = TREE_OPERAND (declarator, 0);
10218           ctype = NULL_TREE;
10219           break;
10220
10221         case SCOPE_REF:
10222           {
10223             /* We have converted type names to NULL_TREE if the
10224                name was bogus, or to a _TYPE node, if not.
10225
10226                The variable CTYPE holds the type we will ultimately
10227                resolve to.  The code here just needs to build
10228                up appropriate member types.  */
10229             tree sname = TREE_OPERAND (declarator, 1);
10230             tree t;
10231
10232             /* Destructors can have their visibilities changed as well.  */
10233             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10234               sname = TREE_OPERAND (sname, 0);
10235
10236             if (TREE_COMPLEXITY (declarator) == 0)
10237               /* This needs to be here, in case we are called
10238                  multiple times.  */ ;
10239             else if (TREE_COMPLEXITY (declarator) == -1)
10240               /* Namespace member. */
10241               pop_decl_namespace ();
10242             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10243               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10244             else if (! IS_AGGR_TYPE_CODE
10245                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10246               ;
10247             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10248               {
10249                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10250                    that refer to ctype.  They couldn't be resolved earlier
10251                    because we hadn't pushed into the class yet.
10252                    Example: resolve 'B<T>::type' in
10253                    'B<typename B<T>::type> B<T>::f () { }'.  */
10254                 if (current_template_parms
10255                     && uses_template_parms (type)
10256                     && uses_template_parms (current_class_type))
10257                   {
10258                     tree args = current_template_args ();
10259                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10260                   }
10261
10262                 /* This pop_nested_class corresponds to the
10263                    push_nested_class used to push into class scope for
10264                    parsing the argument list of a function decl, in
10265                    qualified_id.  */
10266                 pop_nested_class ();
10267                 TREE_COMPLEXITY (declarator) = current_class_depth;
10268               }
10269             else
10270               my_friendly_abort (16);
10271
10272             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10273               {
10274                 /* We had a reference to a global decl, or
10275                    perhaps we were given a non-aggregate typedef,
10276                    in which case we cleared this out, and should just
10277                    keep going as though it wasn't there.  */
10278                 declarator = sname;
10279                 continue;
10280               }
10281             ctype = TREE_OPERAND (declarator, 0);
10282
10283             t = ctype;
10284             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10285               {
10286                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10287                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10288                   template_count += 1;
10289                 t = TYPE_MAIN_DECL (t);
10290                 if (DECL_LANG_SPECIFIC (t))
10291                   t = DECL_CLASS_CONTEXT (t);
10292                 else
10293                   t = NULL_TREE;
10294               }
10295
10296             if (sname == NULL_TREE)
10297               goto done_scoping;
10298
10299             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10300               {
10301                 /* This is the `standard' use of the scoping operator:
10302                    basetype :: member .  */
10303
10304                 if (ctype == current_class_type)
10305                   {
10306                     /* class A {
10307                          void A::f ();
10308                        };
10309
10310                        Is this ill-formed?  */
10311
10312                     if (pedantic)
10313                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10314                                   ctype, name);
10315                   }
10316                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10317                   {
10318                     if (current_class_type == NULL_TREE
10319                         || friendp)
10320                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10321                                                       TYPE_ARG_TYPES (type));
10322                     else
10323                       {
10324                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10325                                   ctype, name, current_class_type);
10326                         return void_type_node;
10327                       }
10328                   }
10329                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10330                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10331                   {
10332                     /* Have to move this code elsewhere in this function.
10333                        this code is used for i.e., typedef int A::M; M *pm;
10334
10335                        It is?  How? jason 10/2/94 */
10336
10337                     if (current_class_type)
10338                       {
10339                         cp_error ("cannot declare member `%T::%s' within `%T'",
10340                                   ctype, name, current_class_type);
10341                         return void_type_node;
10342                       }
10343                     type = build_offset_type (ctype, type);
10344                   }
10345                 else if (uses_template_parms (ctype))
10346                   {
10347                     if (TREE_CODE (type) == FUNCTION_TYPE)
10348                       type
10349                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10350                                                    TYPE_ARG_TYPES (type));
10351                   }
10352                 else
10353                   {
10354                     cp_error ("structure `%T' not yet defined", ctype);
10355                     return error_mark_node;
10356                   }
10357
10358                 declarator = sname;
10359               }
10360             else if (TREE_CODE (sname) == SCOPE_REF)
10361               my_friendly_abort (17);
10362             else
10363               {
10364               done_scoping:
10365                 declarator = TREE_OPERAND (declarator, 1);
10366                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10367                   /* In this case, we will deal with it later.  */
10368                   ;
10369                 else
10370                   {
10371                     if (TREE_CODE (type) == FUNCTION_TYPE)
10372                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10373                                                       TYPE_ARG_TYPES (type));
10374                     else
10375                       type = build_offset_type (ctype, type);
10376                   }
10377               }
10378           }
10379           break;
10380
10381         case BIT_NOT_EXPR:
10382           declarator = TREE_OPERAND (declarator, 0);
10383           break;
10384
10385         case RECORD_TYPE:
10386         case UNION_TYPE:
10387         case ENUMERAL_TYPE:
10388           declarator = NULL_TREE;
10389           break;
10390
10391         case ERROR_MARK:
10392           declarator = NULL_TREE;
10393           break;
10394
10395         default:
10396           my_friendly_abort (158);
10397         }
10398     }
10399
10400   /* See the comment for the TREE_LIST case, above.  */
10401   if (inner_attrs)
10402     {
10403       if (! ignore_attrs)
10404         decl_attributes (type, inner_attrs, NULL_TREE);
10405       else if (attrlist)
10406         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10407       else
10408         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10409     }
10410
10411   /* Now TYPE has the actual type.  */
10412
10413   if (explicitp == 1 || (explicitp && friendp))
10414     {
10415       /* [dcl.fct.spec] The explicit specifier shall only be used in
10416          declarations of constructors within a class definition.  */
10417       error ("only declarations of constructors can be `explicit'");
10418       explicitp = 0;
10419     }
10420
10421   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10422     {
10423       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10424         {
10425           error ("non-member `%s' cannot be declared `mutable'", name);
10426           RIDBIT_RESET (RID_MUTABLE, specbits);
10427         }
10428       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10429         {
10430           error ("non-object member `%s' cannot be declared `mutable'", name);
10431           RIDBIT_RESET (RID_MUTABLE, specbits);
10432         }
10433       else if (TREE_CODE (type) == FUNCTION_TYPE
10434                || TREE_CODE (type) == METHOD_TYPE)
10435         {
10436           error ("function `%s' cannot be declared `mutable'", name);
10437           RIDBIT_RESET (RID_MUTABLE, specbits);
10438         }
10439       else if (staticp)
10440         {
10441           error ("static `%s' cannot be declared `mutable'", name);
10442           RIDBIT_RESET (RID_MUTABLE, specbits);
10443         }
10444       else if (type_quals & TYPE_QUAL_CONST)
10445         {
10446           error ("const `%s' cannot be declared `mutable'", name);
10447           RIDBIT_RESET (RID_MUTABLE, specbits);
10448         }
10449     }
10450
10451   if (declarator == NULL_TREE
10452       || TREE_CODE (declarator) == IDENTIFIER_NODE
10453       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10454           && (TREE_CODE (type) == FUNCTION_TYPE
10455               || TREE_CODE (type) == METHOD_TYPE)))
10456     /* OK */;
10457   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10458     {
10459       cp_error ("template-id `%D' used as a declarator", declarator);
10460       declarator = dname;
10461     }
10462   else
10463     /* Unexpected declarator format.  */
10464     my_friendly_abort (990210);
10465
10466   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10467
10468   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10469     {
10470       tree decl;
10471
10472       /* Note that the grammar rejects storage classes
10473          in typenames, fields or parameters.  */
10474       if (current_lang_name == lang_name_java)
10475         TYPE_FOR_JAVA (type) = 1;
10476
10477       if (decl_context == FIELD)
10478         {
10479           if (declarator == constructor_name (current_class_type))
10480             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10481                         declarator);
10482           decl = build_lang_decl (TYPE_DECL, declarator, type);
10483         }
10484       else
10485         {
10486           /* Make sure this typedef lives as long as its type,
10487              since it might be used as a template parameter. */
10488           if (type != error_mark_node)
10489             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10490           if (processing_template_decl)
10491             decl = build_lang_decl (TYPE_DECL, declarator, type);
10492           else
10493             decl = build_decl (TYPE_DECL, declarator, type);
10494           if (type != error_mark_node)
10495             pop_obstacks ();
10496         }
10497
10498       /* If the user declares "typedef struct {...} foo" then the
10499          struct will have an anonymous name.  Fill that name in now.
10500          Nothing can refer to it, so nothing needs know about the name
10501          change.  */
10502       if (type != error_mark_node
10503           && TYPE_NAME (type)
10504           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10505           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10506           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10507         {
10508           tree oldname = TYPE_NAME (type);
10509           tree t;
10510
10511           /* Replace the anonymous name with the real name everywhere.  */
10512           lookup_tag_reverse (type, declarator);
10513           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10514             if (TYPE_NAME (t) == oldname)
10515               TYPE_NAME (t) = decl;
10516
10517           if (TYPE_LANG_SPECIFIC (type))
10518             TYPE_WAS_ANONYMOUS (type) = 1;
10519
10520           /* If this is a typedef within a template class, the nested
10521              type is a (non-primary) template.  The name for the
10522              template needs updating as well.  */
10523           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10524             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10525               = TYPE_IDENTIFIER (type);
10526
10527           /* XXX Temporarily set the scope. 
10528              When returning, start_decl expects it as NULL_TREE,
10529              and will then then set it using pushdecl. */
10530           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10531           if (current_class_type)
10532             DECL_CONTEXT (decl) = current_class_type;
10533           else
10534             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10535
10536           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10537           DECL_ASSEMBLER_NAME (decl)
10538             = get_identifier (build_overload_name (type, 1, 1));
10539           DECL_CONTEXT (decl) = NULL_TREE;
10540
10541           /* FIXME remangle member functions; member functions of a
10542              type with external linkage have external linkage.  */
10543         }
10544
10545       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10546         {
10547           cp_error_at ("typedef name may not be class-qualified", decl);
10548           return NULL_TREE;
10549         }
10550       else if (quals)
10551         {
10552           if (ctype == NULL_TREE)
10553             {
10554               if (TREE_CODE (type) != METHOD_TYPE)
10555                 cp_error_at ("invalid type qualifier for non-method type", decl);
10556               else
10557                 ctype = TYPE_METHOD_BASETYPE (type);
10558             }
10559           if (ctype != NULL_TREE)
10560             grok_method_quals (ctype, decl, quals);
10561         }
10562
10563       if (RIDBIT_SETP (RID_SIGNED, specbits)
10564           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10565         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10566
10567       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10568                       inlinep, friendp, raises != NULL_TREE);
10569
10570       if (initialized)
10571         error ("typedef declaration includes an initializer");
10572
10573       return decl;
10574     }
10575
10576   /* Detect the case of an array type of unspecified size
10577      which came, as such, direct from a typedef name.
10578      We must copy the type, so that each identifier gets
10579      a distinct type, so that each identifier's size can be
10580      controlled separately by its own initializer.  */
10581
10582   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10583       && TYPE_DOMAIN (type) == NULL_TREE)
10584     {
10585       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10586     }
10587
10588   /* If this is a type name (such as, in a cast or sizeof),
10589      compute the type and return it now.  */
10590
10591   if (decl_context == TYPENAME)
10592     {
10593       /* Note that the grammar rejects storage classes
10594          in typenames, fields or parameters.  */
10595       if (type_quals != TYPE_UNQUALIFIED)
10596         type_quals = TYPE_UNQUALIFIED;
10597
10598       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10599       if (friendp)
10600         {
10601           if (type_quals != TYPE_UNQUALIFIED)
10602             {
10603               cp_error ("type qualifiers specified for friend class declaration");
10604               type_quals = TYPE_UNQUALIFIED;
10605             }
10606           if (inlinep)
10607             {
10608               cp_error ("`inline' specified for friend class declaration");
10609               inlinep = 0;
10610             }
10611
10612           /* Only try to do this stuff if we didn't already give up.  */
10613           if (type != integer_type_node)
10614             {
10615               /* A friendly class?  */
10616               if (current_class_type)
10617                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10618               else
10619                 error ("trying to make class `%s' a friend of global scope",
10620                        TYPE_NAME_STRING (type));
10621               type = void_type_node;
10622             }
10623         }
10624       else if (quals)
10625         {
10626           tree dummy = build_decl (TYPE_DECL, declarator, type);
10627           if (ctype == NULL_TREE)
10628             {
10629               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10630               ctype = TYPE_METHOD_BASETYPE (type);
10631             }
10632           grok_method_quals (ctype, dummy, quals);
10633           type = TREE_TYPE (dummy);
10634         }
10635
10636       return type;
10637     }
10638   else if (declarator == NULL_TREE && decl_context != PARM
10639            && decl_context != CATCHPARM
10640            && TREE_CODE (type) != UNION_TYPE
10641            && ! bitfield)
10642     {
10643       cp_error ("abstract declarator `%T' used as declaration", type);
10644       declarator = make_anon_name ();
10645     }
10646
10647   /* `void' at top level (not within pointer)
10648      is allowed only in typedefs or type names.
10649      We don't complain about parms either, but that is because
10650      a better error message can be made later.  */
10651
10652   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10653     {
10654       if (! declarator)
10655         error ("unnamed variable or field declared void");
10656       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10657         {
10658           if (IDENTIFIER_OPNAME_P (declarator))
10659             my_friendly_abort (356);
10660           else
10661             error ("variable or field `%s' declared void", name);
10662         }
10663       else
10664         error ("variable or field declared void");
10665       type = integer_type_node;
10666     }
10667
10668   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10669      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10670
10671   if (decl_context == PARM || decl_context == CATCHPARM)
10672     {
10673       if (ctype || in_namespace)
10674         error ("cannot use `::' in parameter declaration");
10675
10676       /* A parameter declared as an array of T is really a pointer to T.
10677          One declared as a function is really a pointer to a function.
10678          One declared as a member is really a pointer to member.  */
10679
10680       if (TREE_CODE (type) == ARRAY_TYPE)
10681         {
10682           /* Transfer const-ness of array into that of type pointed to.  */
10683           type = build_pointer_type (TREE_TYPE (type));
10684           type_quals = TYPE_UNQUALIFIED;
10685         }
10686       else if (TREE_CODE (type) == FUNCTION_TYPE)
10687         type = build_pointer_type (type);
10688       else if (TREE_CODE (type) == OFFSET_TYPE)
10689         type = build_pointer_type (type);
10690       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10691         {
10692           error ("declaration of `%s' as void", name);
10693           return NULL_TREE;
10694         }
10695     }
10696   
10697   {
10698     register tree decl;
10699
10700     if (decl_context == PARM)
10701       {
10702         decl = build_decl (PARM_DECL, declarator, type);
10703
10704         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10705                         inlinep, friendp, raises != NULL_TREE);
10706
10707         /* Compute the type actually passed in the parmlist,
10708            for the case where there is no prototype.
10709            (For example, shorts and chars are passed as ints.)
10710            When there is a prototype, this is overridden later.  */
10711
10712         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10713       }
10714     else if (decl_context == FIELD)
10715       {
10716         if (type == error_mark_node)
10717           {
10718             /* Happens when declaring arrays of sizes which
10719                are error_mark_node, for example.  */
10720             decl = NULL_TREE;
10721           }
10722         else if (in_namespace && !friendp)
10723           {
10724             /* Something like struct S { int N::j; };  */
10725             cp_error ("invalid use of `::'");
10726             decl = NULL_TREE;
10727           }
10728         else if (TREE_CODE (type) == FUNCTION_TYPE)
10729           {
10730             int publicp = 0;
10731             tree function_context;
10732
10733             /* We catch the others as conflicts with the builtin
10734                typedefs.  */
10735             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10736               {
10737                 cp_error ("function `%D' cannot be declared friend",
10738                           declarator);
10739                 friendp = 0;
10740               }
10741
10742             if (friendp == 0)
10743               {
10744                 if (ctype == NULL_TREE)
10745                   ctype = current_class_type;
10746
10747                 if (ctype == NULL_TREE)
10748                   {
10749                     cp_error ("can't make `%D' into a method -- not in a class",
10750                               declarator);
10751                     return void_type_node;
10752                   }
10753
10754                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10755                    ARM 9.5 */
10756                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10757                   {
10758                     cp_error ("function `%D' declared virtual inside a union",
10759                               declarator);
10760                     return void_type_node;
10761                   }
10762
10763                 if (declarator == ansi_opname[(int) NEW_EXPR]
10764                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10765                     || declarator == ansi_opname[(int) DELETE_EXPR]
10766                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10767                   {
10768                     if (virtualp)
10769                       {
10770                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10771                                   declarator);
10772                         virtualp = 0;
10773                       }
10774                   }
10775                 else if (staticp < 2)
10776                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10777                                                   TYPE_ARG_TYPES (type));
10778               }
10779
10780             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10781             function_context = (ctype != NULL_TREE) ? 
10782               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10783             publicp = (! friendp || ! staticp)
10784               && function_context == NULL_TREE;
10785             decl = grokfndecl (ctype, type, 
10786                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10787                                ? declarator : dname,
10788                                declarator,
10789                                virtualp, flags, quals, raises,
10790                                friendp ? -1 : 0, friendp, publicp, inlinep,
10791                                funcdef_flag, template_count, in_namespace);
10792             if (decl == NULL_TREE)
10793               return decl;
10794 #if 0
10795             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10796             /* The decl and setting of decl_machine_attr is also turned off.  */
10797             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10798 #endif
10799
10800             /* [class.conv.ctor]
10801
10802                A constructor declared without the function-specifier
10803                explicit that can be called with a single parameter
10804                specifies a conversion from the type of its first
10805                parameter to the type of its class.  Such a constructor
10806                is called a converting constructor.  */
10807             if (explicitp == 2)
10808               DECL_NONCONVERTING_P (decl) = 1;
10809             else if (DECL_CONSTRUCTOR_P (decl))
10810               {
10811                 /* The constructor can be called with exactly one
10812                    parameter if there is at least one parameter, and
10813                    any subsequent parameters have default arguments.
10814                    We don't look at the first parameter, which is
10815                    really just the `this' parameter for the new
10816                    object.  */
10817                 tree arg_types = 
10818                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10819
10820                 /* Skip the `in_chrg' argument too, if present.  */
10821                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10822                   arg_types = TREE_CHAIN (arg_types);
10823
10824                 if (arg_types == void_list_node
10825                     || (arg_types 
10826                         && TREE_CHAIN (arg_types) 
10827                         && TREE_CHAIN (arg_types) != void_list_node
10828                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10829                   DECL_NONCONVERTING_P (decl) = 1;
10830               }
10831           }
10832         else if (TREE_CODE (type) == METHOD_TYPE)
10833           {
10834             /* We only get here for friend declarations of
10835                members of other classes.  */
10836             /* All method decls are public, so tell grokfndecl to set
10837                TREE_PUBLIC, also.  */
10838             decl = grokfndecl (ctype, type, declarator, declarator,
10839                                virtualp, flags, quals, raises,
10840                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10841                                template_count, in_namespace);
10842             if (decl == NULL_TREE)
10843               return NULL_TREE;
10844           }
10845         else if (!staticp && ! processing_template_decl
10846                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10847                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10848           {
10849             if (declarator)
10850               cp_error ("field `%D' has incomplete type", declarator);
10851             else
10852               cp_error ("name `%T' has incomplete type", type);
10853
10854             /* If we're instantiating a template, tell them which
10855                instantiation made the field's type be incomplete.  */
10856             if (current_class_type
10857                 && TYPE_NAME (current_class_type)
10858                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10859                 && declspecs && TREE_VALUE (declspecs)
10860                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10861               cp_error ("  in instantiation of template `%T'",
10862                         current_class_type);
10863
10864             type = error_mark_node;
10865             decl = NULL_TREE;
10866           }
10867         else
10868           {
10869             if (friendp)
10870               {
10871                 error ("`%s' is neither function nor method; cannot be declared friend",
10872                        IDENTIFIER_POINTER (declarator));
10873                 friendp = 0;
10874               }
10875             decl = NULL_TREE;
10876           }
10877
10878         if (friendp)
10879           {
10880             /* Friends are treated specially.  */
10881             if (ctype == current_class_type)
10882               warning ("member functions are implicitly friends of their class");
10883             else
10884               {
10885                 tree t = NULL_TREE;
10886                 if (decl && DECL_NAME (decl))
10887                   {
10888                     if (template_class_depth (current_class_type) == 0)
10889                       {
10890                         decl 
10891                           = check_explicit_specialization 
10892                           (declarator, decl,
10893                            template_count, 2 * (funcdef_flag != 0) + 4);
10894                         if (decl == error_mark_node)
10895                           return error_mark_node;
10896                       }
10897
10898                     t = do_friend (ctype, declarator, decl,
10899                                    last_function_parms, attrlist, flags, quals,
10900                                    funcdef_flag);
10901                   }
10902                 if (t && funcdef_flag)
10903                   return t;
10904                 
10905                 return void_type_node;
10906               }
10907           }
10908
10909         /* Structure field.  It may not be a function, except for C++ */
10910
10911         if (decl == NULL_TREE)
10912           {
10913             if (initialized)
10914               {
10915                 if (!staticp)
10916                   {
10917                     /* An attempt is being made to initialize a non-static
10918                        member.  But, from [class.mem]:
10919                        
10920                        4 A member-declarator can contain a
10921                        constant-initializer only if it declares a static
10922                        member (_class.static_) of integral or enumeration
10923                        type, see _class.static.data_.  
10924
10925                        This used to be relatively common practice, but
10926                        the rest of the compiler does not correctly
10927                        handle the initialization unless the member is
10928                        static so we make it static below.  */
10929                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10930                                 declarator);
10931                     cp_pedwarn ("making `%D' static", declarator);
10932                     staticp = 1;
10933                   }
10934
10935                 if (uses_template_parms (type))
10936                   /* We'll check at instantiation time.  */
10937                   ;
10938                 else if (check_static_variable_definition (declarator,
10939                                                            type))
10940                   /* If we just return the declaration, crashes
10941                      will sometimes occur.  We therefore return
10942                      void_type_node, as if this was a friend
10943                      declaration, to cause callers to completely
10944                      ignore this declaration.  */
10945                   return void_type_node;
10946               }
10947
10948             /* 9.2p13 [class.mem] */
10949             if (declarator == constructor_name (current_class_type)
10950                 /* Divergence from the standard:  In extern "C", we
10951                    allow non-static data members here, because C does
10952                    and /usr/include/netinet/in.h uses that.  */
10953                 && (staticp || ! in_system_header))
10954               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10955                           declarator);
10956
10957             if (staticp)
10958               {
10959                 /* C++ allows static class members.  All other work
10960                    for this is done by grokfield.  */
10961                 decl = build_lang_decl (VAR_DECL, declarator, type);
10962                 TREE_STATIC (decl) = 1;
10963                 /* In class context, 'static' means public access.  */
10964                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10965               }
10966             else
10967               {
10968                 decl = build_lang_decl (FIELD_DECL, declarator, type);
10969                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10970                   {
10971                     DECL_MUTABLE_P (decl) = 1;
10972                     RIDBIT_RESET (RID_MUTABLE, specbits);
10973                   }
10974               }
10975
10976             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10977                             inlinep, friendp, raises != NULL_TREE);
10978           }
10979       }
10980     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10981       {
10982         tree original_name;
10983         int publicp = 0;
10984
10985         if (! declarator)
10986           return NULL_TREE;
10987
10988         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10989           original_name = dname;
10990         else
10991           original_name = declarator;
10992
10993         if (RIDBIT_SETP (RID_AUTO, specbits))
10994           error ("storage class `auto' invalid for function `%s'", name);
10995         else if (RIDBIT_SETP (RID_REGISTER, specbits))
10996           error ("storage class `register' invalid for function `%s'", name);
10997
10998         /* Function declaration not at top level.
10999            Storage classes other than `extern' are not allowed
11000            and `extern' makes no difference.  */
11001         if (! toplevel_bindings_p ()
11002             && (RIDBIT_SETP (RID_STATIC, specbits)
11003                 || RIDBIT_SETP (RID_INLINE, specbits))
11004             && pedantic)
11005           {
11006             if (RIDBIT_SETP (RID_STATIC, specbits))
11007               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11008             else
11009               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11010           }
11011         
11012         if (ctype == NULL_TREE)
11013           {
11014             if (virtualp)
11015               {
11016                 error ("virtual non-class function `%s'", name);
11017                 virtualp = 0;
11018               }
11019           }
11020         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11021           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11022                                           TYPE_ARG_TYPES (type));
11023
11024         /* Record presence of `static'.  */
11025         publicp = (ctype != NULL_TREE
11026                    || RIDBIT_SETP (RID_EXTERN, specbits)
11027                    || !RIDBIT_SETP (RID_STATIC, specbits));
11028
11029         decl = grokfndecl (ctype, type, original_name, declarator,
11030                            virtualp, flags, quals, raises,
11031                            1, friendp,
11032                            publicp, inlinep, funcdef_flag, 
11033                            template_count, in_namespace);
11034         if (decl == NULL_TREE)
11035           return NULL_TREE;
11036
11037         if (staticp == 1)
11038           {
11039             int illegal_static = 0;
11040
11041             /* Don't allow a static member function in a class, and forbid
11042                declaring main to be static.  */
11043             if (TREE_CODE (type) == METHOD_TYPE)
11044               {
11045                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11046                 illegal_static = 1;
11047               }
11048             else if (current_function_decl)
11049               {
11050                 /* FIXME need arm citation */
11051                 error ("cannot declare static function inside another function");
11052                 illegal_static = 1;
11053               }
11054
11055             if (illegal_static)
11056               {
11057                 staticp = 0;
11058                 RIDBIT_RESET (RID_STATIC, specbits);
11059               }
11060           }
11061       }
11062     else
11063       {
11064         /* It's a variable.  */
11065
11066         /* An uninitialized decl with `extern' is a reference.  */
11067         decl = grokvardecl (type, declarator, &specbits, 
11068                             initialized, 
11069                             (type_quals & TYPE_QUAL_CONST) != 0, 
11070                             in_namespace);
11071         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11072                         inlinep, friendp, raises != NULL_TREE);
11073
11074         if (ctype)
11075           {
11076             DECL_CONTEXT (decl) = ctype;
11077             if (staticp == 1)
11078               {
11079                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11080                 staticp = 0;
11081                 RIDBIT_RESET (RID_STATIC, specbits);
11082               }
11083             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11084               {
11085                 cp_error ("static member `%D' declared `register'", decl);
11086                 RIDBIT_RESET (RID_REGISTER, specbits);
11087               }
11088             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11089               {
11090                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11091                             decl);
11092                 RIDBIT_RESET (RID_EXTERN, specbits);
11093               }
11094           }
11095       }
11096
11097     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11098
11099     /* Record `register' declaration for warnings on &
11100        and in case doing stupid register allocation.  */
11101
11102     if (RIDBIT_SETP (RID_REGISTER, specbits))
11103       DECL_REGISTER (decl) = 1;
11104
11105     if (RIDBIT_SETP (RID_EXTERN, specbits))
11106       DECL_THIS_EXTERN (decl) = 1;
11107
11108     if (RIDBIT_SETP (RID_STATIC, specbits))
11109       DECL_THIS_STATIC (decl) = 1;
11110
11111     /* Record constancy and volatility.  There's no need to do this
11112        when processing a template; we'll do this for the instantiated
11113        declaration based on the type of DECL.  */
11114     if (!processing_template_decl)
11115       c_apply_type_quals_to_decl (type_quals, decl);
11116
11117     return decl;
11118   }
11119 }
11120 \f
11121 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11122    An empty exprlist is a parmlist.  An exprlist which
11123    contains only identifiers at the global level
11124    is a parmlist.  Otherwise, it is an exprlist.  */
11125
11126 int
11127 parmlist_is_exprlist (exprs)
11128      tree exprs;
11129 {
11130   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11131     return 0;
11132
11133   if (toplevel_bindings_p ())
11134     {
11135       /* At the global level, if these are all identifiers,
11136          then it is a parmlist.  */
11137       while (exprs)
11138         {
11139           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11140             return 1;
11141           exprs = TREE_CHAIN (exprs);
11142         }
11143       return 0;
11144     }
11145   return 1;
11146 }
11147
11148 /* Subroutine of start_function.  Ensure that each of the parameter
11149    types (as listed in PARMS) is complete, as is required for a
11150    function definition.  */
11151
11152 static void
11153 require_complete_types_for_parms (parms)
11154      tree parms;
11155 {
11156   while (parms)
11157     {
11158       tree type = TREE_TYPE (parms);
11159       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11160         {
11161           if (DECL_NAME (parms))
11162             error ("parameter `%s' has incomplete type",
11163                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11164           else
11165             error ("parameter has incomplete type");
11166           TREE_TYPE (parms) = error_mark_node;
11167         }
11168       else
11169         layout_decl (parms, 0);
11170
11171       parms = TREE_CHAIN (parms);
11172     }
11173 }
11174
11175 /* Returns *TP if *TP is a local variable (or parameter).  Returns
11176    NULL_TREE otherwise.  */
11177
11178 static tree
11179 local_variable_p (tp, walk_subtrees, data)
11180      tree *tp;
11181      int *walk_subtrees ATTRIBUTE_UNUSED;
11182      void *data ATTRIBUTE_UNUSED;
11183 {
11184   tree t = *tp;
11185
11186   if ((TREE_CODE (t) == VAR_DECL 
11187        /* A VAR_DECL with a context that is a _TYPE is a static data
11188           member.  */
11189        && !TYPE_P (CP_DECL_CONTEXT (t))
11190        /* Any other non-local variable must be at namespace scope.  */
11191        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11192       || (TREE_CODE (t) == PARM_DECL))
11193     return t;
11194
11195   return NULL_TREE;
11196 }
11197
11198 /* Check that ARG, which is a default-argument expression for a
11199    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11200    something goes wrong.  DECL may also be a _TYPE node, rather than a
11201    DECL, if there is no DECL available.  */
11202
11203 tree
11204 check_default_argument (decl, arg)
11205      tree decl;
11206      tree arg;
11207 {
11208   tree var;
11209   tree decl_type;
11210
11211   if (TREE_CODE (arg) == DEFAULT_ARG)
11212     /* We get a DEFAULT_ARG when looking at an in-class declaration
11213        with a default argument.  Ignore the argument for now; we'll
11214        deal with it after the class is complete.  */
11215     return arg;
11216
11217   if (processing_template_decl || uses_template_parms (arg))
11218     /* We don't do anything checking until instantiation-time.  Note
11219        that there may be uninstantiated arguments even for an
11220        instantiated function, since default arguments are not
11221        instantiated until they are needed.  */
11222     return arg;
11223
11224   if (TYPE_P (decl))
11225     {
11226       decl_type = decl;
11227       decl = NULL_TREE;
11228     }
11229   else
11230     decl_type = TREE_TYPE (decl);
11231
11232   if (arg == error_mark_node 
11233       || decl == error_mark_node
11234       || TREE_TYPE (arg) == error_mark_node
11235       || decl_type == error_mark_node)
11236     /* Something already went wrong.  There's no need to check
11237        further.  */
11238     return error_mark_node;
11239
11240   /* [dcl.fct.default]
11241      
11242      A default argument expression is implicitly converted to the
11243      parameter type.  */
11244   if (!TREE_TYPE (arg)
11245       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11246     {
11247       if (decl)
11248         cp_error ("default argument for `%#D' has type `%T'", 
11249                   decl, TREE_TYPE (arg));
11250       else
11251         cp_error ("default argument for parameter of type `%T' has type `%T'",
11252                   decl_type, TREE_TYPE (arg));
11253
11254       return error_mark_node;
11255     }
11256
11257   /* [dcl.fct.default]
11258
11259      Local variables shall not be used in default argument
11260      expressions. 
11261
11262      The keyword `this' shall not be used in a default argument of a
11263      member function.  */
11264   var = walk_tree (&arg, local_variable_p, NULL);
11265   if (var)
11266     {
11267       cp_error ("default argument `%E' uses local variable `%D'",
11268                 arg, var);
11269       return error_mark_node;
11270     }
11271
11272   /* All is well.  */
11273   return arg;
11274 }
11275
11276 /* Decode the list of parameter types for a function type.
11277    Given the list of things declared inside the parens,
11278    return a list of types.
11279
11280    The list we receive can have three kinds of elements:
11281    an IDENTIFIER_NODE for names given without types,
11282    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11283    or void_type_node, to mark the end of an argument list
11284    when additional arguments are not permitted (... was not used).
11285
11286    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11287    a mere declaration.  A nonempty identifier-list gets an error message
11288    when FUNCDEF_FLAG is zero.
11289    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11290    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11291
11292    If all elements of the input list contain types,
11293    we return a list of the types.
11294    If all elements contain no type (except perhaps a void_type_node
11295    at the end), we return a null list.
11296    If some have types and some do not, it is an error, and we
11297    return a null list.
11298
11299    Also set last_function_parms to either
11300    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11301    A list of names is converted to a chain of PARM_DECLs
11302    by store_parm_decls so that ultimately it is always a chain of decls.
11303
11304    Note that in C++, parameters can take default values.  These default
11305    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11306    an error to specify default values which are followed by parameters
11307    that have no default values, or an ELLIPSES.  For simplicities sake,
11308    only parameters which are specified with their types can take on
11309    default values.  */
11310
11311 static tree
11312 grokparms (first_parm, funcdef_flag)
11313      tree first_parm;
11314      int funcdef_flag;
11315 {
11316   tree result = NULL_TREE;
11317   tree decls = NULL_TREE;
11318
11319   if (first_parm != NULL_TREE
11320       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11321     {
11322       if (! funcdef_flag)
11323         pedwarn ("parameter names (without types) in function declaration");
11324       last_function_parms = first_parm;
11325       return NULL_TREE;
11326     }
11327   else if (first_parm != NULL_TREE
11328            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11329            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11330     my_friendly_abort (145);
11331   else
11332     {
11333       /* Types were specified.  This is a list of declarators
11334          each represented as a TREE_LIST node.  */
11335       register tree parm, chain;
11336       int any_init = 0, any_error = 0;
11337
11338       if (first_parm != NULL_TREE)
11339         {
11340           tree last_result = NULL_TREE;
11341           tree last_decl = NULL_TREE;
11342
11343           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11344             {
11345               tree type = NULL_TREE, list_node = parm;
11346               register tree decl = TREE_VALUE (parm);
11347               tree init = TREE_PURPOSE (parm);
11348
11349               chain = TREE_CHAIN (parm);
11350               /* @@ weak defense against parse errors.  */
11351               if (TREE_CODE (decl) != VOID_TYPE 
11352                   && TREE_CODE (decl) != TREE_LIST)
11353                 {
11354                   /* Give various messages as the need arises.  */
11355                   if (TREE_CODE (decl) == STRING_CST)
11356                     cp_error ("invalid string constant `%E'", decl);
11357                   else if (TREE_CODE (decl) == INTEGER_CST)
11358                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11359                   continue;
11360                 }
11361
11362               if (TREE_CODE (decl) != VOID_TYPE)
11363                 {
11364                   decl = grokdeclarator (TREE_VALUE (decl),
11365                                          TREE_PURPOSE (decl),
11366                                          PARM, init != NULL_TREE,
11367                                          NULL_TREE);
11368                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11369                     continue;
11370
11371                   /* Top-level qualifiers on the parameters are
11372                      ignored for function types.  */
11373                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11374
11375                   if (TREE_CODE (type) == VOID_TYPE)
11376                     decl = void_type_node;
11377                   else if (TREE_CODE (type) == METHOD_TYPE)
11378                     {
11379                       if (DECL_NAME (decl))
11380                         /* Cannot use the decl here because
11381                            we don't have DECL_CONTEXT set up yet.  */
11382                         cp_error ("parameter `%D' invalidly declared method type",
11383                                   DECL_NAME (decl));
11384                       else
11385                         error ("parameter invalidly declared method type");
11386                       type = build_pointer_type (type);
11387                       TREE_TYPE (decl) = type;
11388                     }
11389                   else if (TREE_CODE (type) == OFFSET_TYPE)
11390                     {
11391                       if (DECL_NAME (decl))
11392                         cp_error ("parameter `%D' invalidly declared offset type",
11393                                   DECL_NAME (decl));
11394                       else
11395                         error ("parameter invalidly declared offset type");
11396                       type = build_pointer_type (type);
11397                       TREE_TYPE (decl) = type;
11398                     }
11399                   else if (abstract_virtuals_error (decl, type))
11400                     any_error = 1;  /* Seems like a good idea. */
11401                   else if (POINTER_TYPE_P (type))
11402                     {
11403                       tree t = type;
11404                       while (POINTER_TYPE_P (t)
11405                              || (TREE_CODE (t) == ARRAY_TYPE
11406                                  && TYPE_DOMAIN (t) != NULL_TREE))
11407                         t = TREE_TYPE (t);
11408                       if (TREE_CODE (t) == ARRAY_TYPE)
11409                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11410                                   type,
11411                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11412                     }
11413                 }
11414
11415               if (TREE_CODE (decl) == VOID_TYPE)
11416                 {
11417                   if (result == NULL_TREE)
11418                     {
11419                       result = void_list_node;
11420                       last_result = result;
11421                     }
11422                   else
11423                     {
11424                       TREE_CHAIN (last_result) = void_list_node;
11425                       last_result = void_list_node;
11426                     }
11427                   if (chain
11428                       && (chain != void_list_node || TREE_CHAIN (chain)))
11429                     error ("`void' in parameter list must be entire list");
11430                   break;
11431                 }
11432
11433               /* Since there is a prototype, args are passed in their own types.  */
11434               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11435               if (PROMOTE_PROTOTYPES
11436                   && (TREE_CODE (type) == INTEGER_TYPE
11437                       || TREE_CODE (type) == ENUMERAL_TYPE)
11438                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11439                 DECL_ARG_TYPE (decl) = integer_type_node;
11440               if (!any_error && init)
11441                 {
11442                   any_init++;
11443                   init = check_default_argument (decl, init);
11444                 }
11445               else
11446                 init = NULL_TREE;
11447
11448               if (decls == NULL_TREE)
11449                 {
11450                   decls = decl;
11451                   last_decl = decls;
11452                 }
11453               else
11454                 {
11455                   TREE_CHAIN (last_decl) = decl;
11456                   last_decl = decl;
11457                 }
11458               list_node = tree_cons (init, type, NULL_TREE);
11459               if (result == NULL_TREE)
11460                 {
11461                   result = list_node;
11462                   last_result = result;
11463                 }
11464               else
11465                 {
11466                   TREE_CHAIN (last_result) = list_node;
11467                   last_result = list_node;
11468                 }
11469             }
11470           if (last_result)
11471             TREE_CHAIN (last_result) = NULL_TREE;
11472           /* If there are no parameters, and the function does not end
11473              with `...', then last_decl will be NULL_TREE.  */
11474           if (last_decl != NULL_TREE)
11475             TREE_CHAIN (last_decl) = NULL_TREE;
11476         }
11477     }
11478
11479   last_function_parms = decls;
11480
11481   return result;
11482 }
11483
11484 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11485    FUNCTION_TYPE with the newly parsed version of its default argument, which
11486    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11487
11488 void
11489 replace_defarg (arg, init)
11490      tree arg, init;
11491 {
11492   if (! processing_template_decl
11493       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11494     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11495                 TREE_TYPE (init), TREE_VALUE (arg));
11496   TREE_PURPOSE (arg) = init;
11497 }
11498 \f
11499 int
11500 copy_args_p (d)
11501      tree d;
11502 {
11503   tree t = FUNCTION_ARG_CHAIN (d);
11504   if (DECL_CONSTRUCTOR_P (d)
11505       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11506     t = TREE_CHAIN (t);
11507   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11508       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11509           == DECL_CLASS_CONTEXT (d))
11510       && (TREE_CHAIN (t) == NULL_TREE
11511           || TREE_CHAIN (t) == void_list_node
11512           || TREE_PURPOSE (TREE_CHAIN (t))))
11513     return 1;
11514   return 0;
11515 }
11516
11517 /* These memoizing functions keep track of special properties which
11518    a class may have.  `grok_ctor_properties' notices whether a class
11519    has a constructor of the form X(X&), and also complains
11520    if the class has a constructor of the form X(X).
11521    `grok_op_properties' takes notice of the various forms of
11522    operator= which are defined, as well as what sorts of type conversion
11523    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11524
11525 int
11526 grok_ctor_properties (ctype, decl)
11527      tree ctype, decl;
11528 {
11529   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11530   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11531
11532   /* When a type has virtual baseclasses, a magical first int argument is
11533      added to any ctor so we can tell if the class has been initialized
11534      yet.  This could screw things up in this function, so we deliberately
11535      ignore the leading int if we're in that situation.  */
11536   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11537     {
11538       my_friendly_assert (parmtypes
11539                           && TREE_VALUE (parmtypes) == integer_type_node,
11540                           980529);
11541       parmtypes = TREE_CHAIN (parmtypes);
11542       parmtype = TREE_VALUE (parmtypes);
11543     }
11544
11545   /* [class.copy]
11546
11547      A non-template constructor for class X is a copy constructor if
11548      its first parameter is of type X&, const X&, volatile X& or const
11549      volatile X&, and either there are no other parameters or else all
11550      other parameters have default arguments.  */
11551   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11552       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11553       && (TREE_CHAIN (parmtypes) == NULL_TREE
11554           || TREE_CHAIN (parmtypes) == void_list_node
11555           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11556       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11557            && is_member_template (DECL_TI_TEMPLATE (decl))))
11558     {
11559       TYPE_HAS_INIT_REF (ctype) = 1;
11560       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11561         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11562     }
11563   /* [class.copy]
11564
11565      A declaration of a constructor for a class X is ill-formed if its
11566      first parameter is of type (optionally cv-qualified) X and either
11567      there are no other parameters or else all other parameters have
11568      default arguments.  
11569
11570      We *don't* complain about member template instantiations that
11571      have this form, though; they can occur as we try to decide what
11572      constructor to use during overload resolution.  Since overload
11573      resolution will never prefer such a constructor to the
11574      non-template copy constructor (which is either explicitly or
11575      implicitly defined), there's no need to worry about their
11576      existence.  Theoretically, they should never even be
11577      instantiated, but that's hard to forestall.  */
11578   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11579            && (TREE_CHAIN (parmtypes) == NULL_TREE
11580                || TREE_CHAIN (parmtypes) == void_list_node
11581                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11582            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11583                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11584     {
11585       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11586                 ctype, ctype);
11587       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11588       return 0;
11589     }
11590   else if (TREE_CODE (parmtype) == VOID_TYPE
11591            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11592     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11593
11594   return 1;
11595 }
11596
11597 /* An operator with this name can be either unary or binary.  */
11598
11599 static int
11600 ambi_op_p (name)
11601      tree name;
11602 {
11603   return (name == ansi_opname [(int) INDIRECT_REF]
11604           || name == ansi_opname [(int) ADDR_EXPR]
11605           || name == ansi_opname [(int) NEGATE_EXPR]
11606           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11607           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11608           || name == ansi_opname [(int) CONVERT_EXPR]);
11609 }
11610
11611 /* An operator with this name can only be unary.  */
11612
11613 static int
11614 unary_op_p (name)
11615      tree name;
11616 {
11617   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11618           || name == ansi_opname [(int) BIT_NOT_EXPR]
11619           || name == ansi_opname [(int) COMPONENT_REF]
11620           || IDENTIFIER_TYPENAME_P (name));
11621 }
11622
11623 /* Do a little sanity-checking on how they declared their operator.  */
11624
11625 void
11626 grok_op_properties (decl, virtualp, friendp)
11627      tree decl;
11628      int virtualp, friendp;
11629 {
11630   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11631   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11632   tree name = DECL_NAME (decl);
11633
11634   if (current_class_type == NULL_TREE)
11635     friendp = 1;
11636
11637   if (! friendp)
11638     {
11639       /* [class.copy]
11640
11641          A user-declared copy assignment operator X::operator= is a
11642          non-static non-template member function of class X with
11643          exactly one parameter of type X, X&, const X&, volatile X& or
11644          const volatile X&.  */
11645       if (name == ansi_opname[(int) MODIFY_EXPR]
11646           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11647                && is_member_template (DECL_TI_TEMPLATE (decl))))
11648         ;
11649       else if (name == ansi_opname[(int) CALL_EXPR])
11650         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11651       else if (name == ansi_opname[(int) ARRAY_REF])
11652         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11653       else if (name == ansi_opname[(int) COMPONENT_REF]
11654                || name == ansi_opname[(int) MEMBER_REF])
11655         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11656       else if (name == ansi_opname[(int) NEW_EXPR])
11657         TYPE_GETS_NEW (current_class_type) |= 1;
11658       else if (name == ansi_opname[(int) DELETE_EXPR])
11659         TYPE_GETS_DELETE (current_class_type) |= 1;
11660       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11661         TYPE_GETS_NEW (current_class_type) |= 2;
11662       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11663         TYPE_GETS_DELETE (current_class_type) |= 2;
11664     }
11665
11666   if (name == ansi_opname[(int) NEW_EXPR]
11667       || name == ansi_opname[(int) VEC_NEW_EXPR])
11668     {
11669       /* When the compiler encounters the definition of A::operator new, it
11670          doesn't look at the class declaration to find out if it's static.  */
11671       if (methodp)
11672         revert_static_member_fn (&decl, NULL, NULL);
11673      
11674       /* Take care of function decl if we had syntax errors.  */
11675       if (argtypes == NULL_TREE)
11676         TREE_TYPE (decl)
11677           = build_function_type (ptr_type_node,
11678                                  hash_tree_chain (integer_type_node,
11679                                                   void_list_node));
11680       else
11681         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11682     }
11683   else if (name == ansi_opname[(int) DELETE_EXPR]
11684            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11685     {
11686       if (methodp)
11687         revert_static_member_fn (&decl, NULL, NULL);
11688      
11689       if (argtypes == NULL_TREE)
11690         TREE_TYPE (decl)
11691           = build_function_type (void_type_node,
11692                                  hash_tree_chain (ptr_type_node,
11693                                                   void_list_node));
11694       else
11695         {
11696           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11697
11698           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11699               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11700                   != void_list_node))
11701             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11702         }
11703     }
11704   else
11705     {
11706       /* An operator function must either be a non-static member function
11707          or have at least one parameter of a class, a reference to a class,
11708          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11709       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11710         {
11711           if (IDENTIFIER_TYPENAME_P (name)
11712               || name == ansi_opname[(int) CALL_EXPR]
11713               || name == ansi_opname[(int) MODIFY_EXPR]
11714               || name == ansi_opname[(int) COMPONENT_REF]
11715               || name == ansi_opname[(int) ARRAY_REF])
11716             cp_error ("`%D' must be a nonstatic member function", decl);
11717           else
11718             {
11719               tree p = argtypes;
11720
11721               if (DECL_STATIC_FUNCTION_P (decl))
11722                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11723
11724               if (p)
11725                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11726                   {
11727                     tree arg = TREE_VALUE (p);
11728                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11729                       arg = TREE_TYPE (arg);
11730
11731                     /* This lets bad template code slip through.  */
11732                     if (IS_AGGR_TYPE (arg)
11733                         || TREE_CODE (arg) == ENUMERAL_TYPE
11734                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11735                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11736                       goto foundaggr;
11737                   }
11738               cp_error
11739                 ("`%D' must have an argument of class or enumerated type",
11740                  decl);
11741             foundaggr:
11742               ;
11743             }
11744         }
11745       
11746       if (name == ansi_opname[(int) CALL_EXPR])
11747         return;                 /* No restrictions on args. */
11748
11749       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11750         {
11751           tree t = TREE_TYPE (name);
11752           if (TREE_CODE (t) == VOID_TYPE)
11753             pedwarn ("void is not a valid type conversion operator");
11754           else if (! friendp)
11755             {
11756               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11757               const char *what = 0;
11758               if (ref)
11759                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11760
11761               if (t == current_class_type)
11762                 what = "the same type";
11763               /* Don't force t to be complete here.  */
11764               else if (IS_AGGR_TYPE (t)
11765                        && TYPE_SIZE (t)
11766                        && DERIVED_FROM_P (t, current_class_type))
11767                 what = "a base class";
11768
11769               if (what)
11770                 warning ("conversion to %s%s will never use a type conversion operator",
11771                          ref ? "a reference to " : "", what);
11772             }
11773         }
11774
11775       if (name == ansi_opname[(int) MODIFY_EXPR])
11776         {
11777           tree parmtype;
11778
11779           if (list_length (argtypes) != 3 && methodp)
11780             {
11781               cp_error ("`%D' must take exactly one argument", decl);
11782               return;
11783             }
11784           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11785
11786           if (copy_assignment_arg_p (parmtype, virtualp)
11787               && ! friendp)
11788             {
11789               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11790               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11791                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11792                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11793             }
11794         }
11795       else if (name == ansi_opname[(int) COND_EXPR])
11796         {
11797           /* 13.4.0.3 */
11798           cp_error ("ANSI C++ prohibits overloading operator ?:");
11799         }         
11800       else if (ambi_op_p (name))
11801         {
11802           if (list_length (argtypes) == 2)
11803             /* prefix */;
11804           else if (list_length (argtypes) == 3)
11805             {
11806               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11807                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11808                   && ! processing_template_decl
11809                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11810                 {
11811                   if (methodp)
11812                     cp_error ("postfix `%D' must take `int' as its argument",
11813                               decl);
11814                   else
11815                     cp_error
11816                       ("postfix `%D' must take `int' as its second argument",
11817                        decl);
11818                 }
11819             }
11820           else
11821             {
11822               if (methodp)
11823                 cp_error ("`%D' must take either zero or one argument", decl);
11824               else
11825                 cp_error ("`%D' must take either one or two arguments", decl);
11826             }
11827
11828           /* More Effective C++ rule 6.  */
11829           if (warn_ecpp
11830               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11831                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11832             {
11833               tree arg = TREE_VALUE (argtypes);
11834               tree ret = TREE_TYPE (TREE_TYPE (decl));
11835               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11836                 arg = TREE_TYPE (arg);
11837               arg = TYPE_MAIN_VARIANT (arg);
11838               if (list_length (argtypes) == 2)
11839                 {
11840                   if (TREE_CODE (ret) != REFERENCE_TYPE
11841                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11842                                        arg))
11843                     cp_warning ("prefix `%D' should return `%T'", decl,
11844                                 build_reference_type (arg));
11845                 }
11846               else
11847                 {
11848                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11849                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11850                 }
11851             }
11852         }
11853       else if (unary_op_p (name))
11854         {
11855           if (list_length (argtypes) != 2)
11856             {
11857               if (methodp)
11858                 cp_error ("`%D' must take `void'", decl);
11859               else
11860                 cp_error ("`%D' must take exactly one argument", decl);
11861             }
11862         }
11863       else /* if (binary_op_p (name)) */
11864         {
11865           if (list_length (argtypes) != 3)
11866             {
11867               if (methodp)
11868                 cp_error ("`%D' must take exactly one argument", decl);
11869               else
11870                 cp_error ("`%D' must take exactly two arguments", decl);
11871             }
11872
11873           /* More Effective C++ rule 7.  */
11874           if (warn_ecpp
11875               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11876                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11877                   || name == ansi_opname [COMPOUND_EXPR]))
11878             cp_warning ("user-defined `%D' always evaluates both arguments",
11879                         decl);
11880         }
11881
11882       /* Effective C++ rule 23.  */
11883       if (warn_ecpp
11884           && list_length (argtypes) == 3
11885           && (name == ansi_opname [PLUS_EXPR]
11886               || name == ansi_opname [MINUS_EXPR]
11887               || name == ansi_opname [TRUNC_DIV_EXPR]
11888               || name == ansi_opname [MULT_EXPR])
11889           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11890         cp_warning ("`%D' should return by value", decl);
11891
11892       /* 13.4.0.8 */
11893       if (argtypes)
11894         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11895           if (TREE_PURPOSE (argtypes))
11896             {
11897               TREE_PURPOSE (argtypes) = NULL_TREE;
11898               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11899                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11900                 {
11901                   if (pedantic)
11902                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11903                 }
11904               else
11905                 cp_error ("`%D' cannot have default arguments", decl);
11906             }
11907     }
11908 }
11909 \f
11910 static const char *
11911 tag_name (code)
11912      enum tag_types code;
11913 {
11914   switch (code)
11915     {
11916     case record_type:
11917       return "struct";
11918     case class_type:
11919       return "class";
11920     case union_type:
11921       return "union ";
11922     case enum_type:
11923       return "enum";
11924     default:
11925       my_friendly_abort (981122);
11926     }
11927 }
11928
11929 /* Get the struct, enum or union (CODE says which) with tag NAME.
11930    Define the tag as a forward-reference if it is not defined.
11931
11932    C++: If a class derivation is given, process it here, and report
11933    an error if multiple derivation declarations are not identical.
11934
11935    If this is a definition, come in through xref_tag and only look in
11936    the current frame for the name (since C++ allows new names in any
11937    scope.)  */
11938
11939 tree
11940 xref_tag (code_type_node, name, globalize)
11941      tree code_type_node;
11942      tree name;
11943      int globalize;
11944 {
11945   enum tag_types tag_code;
11946   enum tree_code code;
11947   int temp = 0;
11948   register tree ref, t;
11949   struct binding_level *b = current_binding_level;
11950   int got_type = 0;
11951   tree attributes = NULL_TREE;
11952   tree context = NULL_TREE;
11953
11954   /* If we are called from the parser, code_type_node will sometimes be a
11955      TREE_LIST.  This indicates that the user wrote
11956      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11957      use them later.  */
11958   if (TREE_CODE (code_type_node) == TREE_LIST)
11959     {
11960       attributes = TREE_PURPOSE (code_type_node);
11961       code_type_node = TREE_VALUE (code_type_node);
11962     }
11963
11964   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11965   switch (tag_code)
11966     {
11967     case record_type:
11968     case class_type:
11969       code = RECORD_TYPE;
11970       break;
11971     case union_type:
11972       code = UNION_TYPE;
11973       break;
11974     case enum_type:
11975       code = ENUMERAL_TYPE;
11976       break;
11977     default:
11978       my_friendly_abort (18);
11979     }
11980
11981   /* If a cross reference is requested, look up the type
11982      already defined for this tag and return it.  */
11983   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11984     {
11985       t = name;
11986       name = TYPE_IDENTIFIER (t);
11987       got_type = 1;
11988     }
11989   else
11990     t = IDENTIFIER_TYPE_VALUE (name);
11991
11992   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11993       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11994     t = NULL_TREE;
11995
11996   if (! globalize)
11997     {
11998       /* If we know we are defining this tag, only look it up in
11999          this scope and don't try to find it as a type.  */
12000       ref = lookup_tag (code, name, b, 1);
12001     }
12002   else
12003     {
12004       if (t)
12005         {
12006           /* [dcl.type.elab] If the identifier resolves to a
12007              typedef-name or a template type-parameter, the
12008              elaborated-type-specifier is ill-formed.  */
12009           if (t != TYPE_MAIN_VARIANT (t)
12010               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12011             cp_pedwarn ("using typedef-name `%D' after `%s'",
12012                         TYPE_NAME (t), tag_name (tag_code));
12013           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12014             cp_error ("using template type parameter `%T' after `%s'",
12015                       t, tag_name (tag_code));
12016
12017           ref = t;
12018         }
12019       else
12020         ref = lookup_tag (code, name, b, 0);
12021           
12022       if (! ref)
12023         {
12024           /* Try finding it as a type declaration.  If that wins,
12025              use it.  */ 
12026           ref = lookup_name (name, 1);
12027
12028           if (ref != NULL_TREE
12029               && processing_template_decl
12030               && DECL_CLASS_TEMPLATE_P (ref)
12031               && template_class_depth (current_class_type) == 0)
12032             /* Since GLOBALIZE is true, we're declaring a global
12033                template, so we want this type.  */
12034             ref = DECL_RESULT (ref);
12035
12036           if (ref && TREE_CODE (ref) == TYPE_DECL
12037               && TREE_CODE (TREE_TYPE (ref)) == code)
12038             ref = TREE_TYPE (ref);
12039           else
12040             ref = NULL_TREE;
12041         }
12042
12043       if (ref && current_class_type 
12044           && template_class_depth (current_class_type) 
12045           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12046         {
12047           /* Since GLOBALIZE is non-zero, we are not looking at a
12048              definition of this tag.  Since, in addition, we are currently
12049              processing a (member) template declaration of a template
12050              class, we must be very careful; consider:
12051
12052                template <class X>
12053                struct S1
12054
12055                template <class U>
12056                struct S2
12057                { template <class V>
12058                friend struct S1; };
12059
12060              Here, the S2::S1 declaration should not be confused with the
12061              outer declaration.  In particular, the inner version should
12062              have a template parameter of level 2, not level 1.  This
12063              would be particularly important if the member declaration
12064              were instead:
12065
12066                template <class V = U> friend struct S1;
12067
12068              say, when we should tsubst into `U' when instantiating
12069              S2.  On the other hand, when presented with:
12070
12071                  template <class T>
12072                  struct S1 {
12073                    template <class U>
12074                    struct S2 {};
12075                    template <class U>
12076                    friend struct S2;
12077                  };
12078
12079               we must find the inner binding eventually.  We
12080               accomplish this by making sure that the new type we
12081               create to represent this declaration has the right
12082               TYPE_CONTEXT.  */
12083           context = TYPE_CONTEXT (ref);
12084           ref = NULL_TREE;
12085         }
12086     }
12087
12088   push_obstacks_nochange ();
12089
12090   if (! ref)
12091     {
12092       /* If no such tag is yet defined, create a forward-reference node
12093          and record it as the "definition".
12094          When a real declaration of this type is found,
12095          the forward-reference will be altered into a real type.  */
12096
12097       /* In C++, since these migrate into the global scope, we must
12098          build them on the permanent obstack.  */
12099
12100       temp = allocation_temporary_p ();
12101       if (temp)
12102         end_temporary_allocation ();
12103
12104       if (code == ENUMERAL_TYPE)
12105         {
12106           cp_error ("use of enum `%#D' without previous declaration", name);
12107
12108           ref = make_node (ENUMERAL_TYPE);
12109
12110           /* Give the type a default layout like unsigned int
12111              to avoid crashing if it does not get defined.  */
12112           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12113           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12114           TREE_UNSIGNED (ref) = 1;
12115           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12116           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12117           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12118
12119           /* Enable us to recognize when a type is created in class context.
12120              To do nested classes correctly, this should probably be cleared
12121              out when we leave this classes scope.  Currently this in only
12122              done in `start_enum'.  */
12123
12124           pushtag (name, ref, globalize);
12125         }
12126       else
12127         {
12128           struct binding_level *old_b = class_binding_level;
12129
12130           ref = make_lang_type (code);
12131           TYPE_CONTEXT (ref) = context;
12132
12133 #ifdef NONNESTED_CLASSES
12134           /* Class types don't nest the way enums do.  */
12135           class_binding_level = (struct binding_level *)0;
12136 #endif
12137           pushtag (name, ref, globalize);
12138           class_binding_level = old_b;
12139         }
12140     }
12141   else
12142     {
12143       /* If it no longer looks like a nested type, make sure it's
12144          in global scope.  
12145          If it is not an IDENTIFIER, this is not a declaration */
12146       if (b->namespace_p && !class_binding_level
12147           && TREE_CODE (name) == IDENTIFIER_NODE
12148           && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12149         SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12150
12151       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12152         redeclare_class_template (ref, current_template_parms);
12153     }
12154
12155   /* Until the type is defined, tentatively accept whatever
12156      structure tag the user hands us.  */
12157   if (TYPE_SIZE (ref) == NULL_TREE
12158       && ref != current_class_type
12159       /* Have to check this, in case we have contradictory tag info.  */
12160       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12161     {
12162       if (tag_code == class_type)
12163         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12164       else if (tag_code == record_type)
12165         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12166     }
12167
12168   pop_obstacks ();
12169
12170   TREE_TYPE (ref) = attributes;
12171
12172   return ref;
12173 }
12174
12175 tree
12176 xref_tag_from_type (old, id, globalize)
12177      tree old, id;
12178      int globalize;
12179 {
12180   tree code_type_node;
12181
12182   if (TREE_CODE (old) == RECORD_TYPE)
12183     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12184                       ? class_type_node : record_type_node);
12185   else
12186     code_type_node = union_type_node;
12187
12188   if (id == NULL_TREE)
12189     id = TYPE_IDENTIFIER (old);
12190
12191   return xref_tag (code_type_node, id, globalize);
12192 }
12193
12194 /* REF is a type (named NAME), for which we have just seen some
12195    baseclasses.  BINFO is a list of those baseclasses; the
12196    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12197    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12198    struct, or union.  */
12199
12200 void
12201 xref_basetypes (code_type_node, name, ref, binfo)
12202      tree code_type_node;
12203      tree name, ref;
12204      tree binfo;
12205 {
12206   /* In the declaration `A : X, Y, ... Z' we mark all the types
12207      (A, X, Y, ..., Z) so we can check for duplicates.  */
12208   tree binfos;
12209   tree base;
12210
12211   int i, len;
12212   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12213
12214   if (tag_code == union_type)
12215     {
12216       cp_error ("derived union `%T' invalid", ref);
12217       return;
12218     }
12219
12220   len = list_length (binfo);
12221   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12222
12223   /* First, make sure that any templates in base-classes are
12224      instantiated.  This ensures that if we call ourselves recursively
12225      we do not get confused about which classes are marked and which
12226      are not.  */
12227   for (base = binfo; base; base = TREE_CHAIN (base))
12228     complete_type (TREE_VALUE (base));
12229
12230   SET_CLASSTYPE_MARKED (ref);
12231   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12232
12233   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12234     {
12235       /* The base of a derived struct is public by default.  */
12236       int via_public
12237         = (TREE_PURPOSE (binfo) == access_public_node
12238            || TREE_PURPOSE (binfo) == access_public_virtual_node
12239            || (tag_code != class_type
12240                && (TREE_PURPOSE (binfo) == access_default_node
12241                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12242       int via_protected
12243         = (TREE_PURPOSE (binfo) == access_protected_node
12244            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12245       int via_virtual
12246         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12247            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12248            || TREE_PURPOSE (binfo) == access_public_virtual_node
12249            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12250       tree basetype = TREE_VALUE (binfo);
12251       tree base_binfo;
12252
12253       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12254         basetype = TREE_TYPE (basetype);
12255       if (!basetype
12256           || (TREE_CODE (basetype) != RECORD_TYPE
12257               && TREE_CODE (basetype) != TYPENAME_TYPE
12258               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12259               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12260         {
12261           cp_error ("base type `%T' fails to be a struct or class type",
12262                     TREE_VALUE (binfo));
12263           continue;
12264         }
12265
12266       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12267
12268       /* This code replaces similar code in layout_basetypes.
12269          We put the complete_type first for implicit `typename'.  */
12270       if (TYPE_SIZE (basetype) == NULL_TREE
12271           && ! (current_template_parms && uses_template_parms (basetype)))
12272         {
12273           cp_error ("base class `%T' has incomplete type", basetype);
12274           continue;
12275         }
12276       else
12277         {
12278           if (CLASSTYPE_MARKED (basetype))
12279             {
12280               if (basetype == ref)
12281                 cp_error ("recursive type `%T' undefined", basetype);
12282               else
12283                 cp_error ("duplicate base type `%T' invalid", basetype);
12284               continue;
12285             }
12286
12287           if (TYPE_FOR_JAVA (basetype)
12288               && (current_lang_stack 
12289                   == &VARRAY_TREE (current_lang_base, 0)))
12290             TYPE_FOR_JAVA (ref) = 1;
12291
12292           /* Note that the BINFO records which describe individual
12293              inheritances are *not* shared in the lattice!  They
12294              cannot be shared because a given baseclass may be
12295              inherited with different `accessibility' by different
12296              derived classes.  (Each BINFO record describing an
12297              individual inheritance contains flags which say what
12298              the `accessibility' of that particular inheritance is.)  */
12299   
12300           base_binfo 
12301             = make_binfo (integer_zero_node, basetype,
12302                           CLASS_TYPE_P (basetype)
12303                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12304                           CLASS_TYPE_P (basetype)
12305                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12306  
12307           TREE_VEC_ELT (binfos, i) = base_binfo;
12308           TREE_VIA_PUBLIC (base_binfo) = via_public;
12309           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12310           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12311           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12312
12313           /* We need to unshare the binfos now so that lookups during class
12314              definition work.  */
12315           unshare_base_binfos (base_binfo);
12316
12317           SET_CLASSTYPE_MARKED (basetype);
12318
12319           /* We are free to modify these bits because they are meaningless
12320              at top level, and BASETYPE is a top-level type.  */
12321           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12322             {
12323               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12324               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12325             }
12326
12327           if (CLASS_TYPE_P (basetype))
12328             {
12329               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12330               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12331             }
12332
12333           i += 1;
12334         }
12335     }
12336   if (i)
12337     TREE_VEC_LENGTH (binfos) = i;
12338   else
12339     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12340
12341   if (i > 1)
12342     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12343   else if (i == 1)
12344     {
12345       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12346       
12347       if (CLASS_TYPE_P (basetype))
12348         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12349           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12350     }
12351
12352   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12353     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12354
12355   /* Unmark all the types.  */
12356   while (--i >= 0)
12357     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12358   CLEAR_CLASSTYPE_MARKED (ref);
12359
12360   /* Now that we know all the base-classes, set up the list of virtual
12361      bases.  */
12362   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12363
12364   pop_obstacks ();
12365 }
12366   
12367 \f
12368 /* Begin compiling the definition of an enumeration type.
12369    NAME is its name (or null if anonymous).
12370    Returns the type object, as yet incomplete.
12371    Also records info about it so that build_enumerator
12372    may be used to declare the individual values as they are read.  */
12373
12374 tree
12375 start_enum (name)
12376      tree name;
12377 {
12378   register tree enumtype = NULL_TREE;
12379   struct binding_level *b = current_binding_level;
12380
12381   /* We are wasting space here and putting these on the permanent_obstack so
12382      that typeid(local enum) will work correctly. */
12383   push_obstacks (&permanent_obstack, &permanent_obstack);
12384
12385   /* If this is the real definition for a previous forward reference,
12386      fill in the contents in the same object that used to be the
12387      forward reference.  */
12388
12389   if (name != NULL_TREE)
12390     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12391
12392   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12393     {
12394       cp_error ("multiple definition of `%#T'", enumtype);
12395       cp_error_at ("previous definition here", enumtype);
12396     }
12397   else
12398     {
12399       enumtype = make_node (ENUMERAL_TYPE);
12400       pushtag (name, enumtype, 0);
12401     }
12402
12403   if (current_class_type)
12404     TREE_ADDRESSABLE (b->tags) = 1;
12405
12406   /* We don't copy this value because build_enumerator needs to do it.  */
12407   enum_next_value = integer_zero_node;
12408   enum_overflow = 0;
12409
12410   GNU_xref_decl (current_function_decl, enumtype);
12411   return enumtype;
12412 }
12413
12414 /* After processing and defining all the values of an enumeration type,
12415    install their decls in the enumeration type and finish it off.
12416    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12417    Returns ENUMTYPE.  */
12418
12419 tree
12420 finish_enum (enumtype)
12421      tree enumtype;
12422 {
12423   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12424   /* Calculate the maximum value of any enumerator in this type.  */
12425
12426   tree values = TYPE_VALUES (enumtype);
12427   if (values)
12428     {
12429       tree pair;
12430
12431       for (pair = values; pair; pair = TREE_CHAIN (pair))
12432         {
12433           tree decl;
12434           tree value;
12435
12436           /* The TREE_VALUE is a CONST_DECL for this enumeration
12437              constant.  */
12438           decl = TREE_VALUE (pair);
12439
12440           /* The DECL_INITIAL will be NULL if we are processing a
12441              template declaration and this enumeration constant had no
12442              explicit initializer.  */
12443           value = DECL_INITIAL (decl);
12444           if (value && !processing_template_decl)
12445             {
12446               /* Set the TREE_TYPE for the VALUE as well.  That's so
12447                  that when we call decl_constant_value we get an
12448                  entity of the right type (but with the constant
12449                  value).  Since we shouldn't ever call
12450                  decl_constant_value on a template type, there's no
12451                  reason to do that when processing_template_decl.
12452                  And, if the expression is something like a
12453                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12454                  wreak havoc on the intended type of the expression.  
12455
12456                  Of course, there's also no point in trying to compute
12457                  minimum or maximum values if we're in a template.  */
12458               TREE_TYPE (value) = enumtype;
12459
12460               if (!minnode)
12461                 minnode = maxnode = value;
12462               else if (tree_int_cst_lt (maxnode, value))
12463                 maxnode = value;
12464               else if (tree_int_cst_lt (value, minnode))
12465                 minnode = value;
12466             }
12467
12468           if (processing_template_decl) 
12469             /* If this is just a template, leave the CONST_DECL
12470                alone.  That way tsubst_copy will find CONST_DECLs for
12471                CONST_DECLs, and not INTEGER_CSTs.  */
12472             ;
12473           else
12474             /* In the list we're building up, we want the enumeration
12475                values, not the CONST_DECLs.  */
12476             TREE_VALUE (pair) = value;
12477         }
12478     }
12479   else
12480     maxnode = minnode = integer_zero_node;
12481
12482   TYPE_VALUES (enumtype) = nreverse (values);
12483
12484   if (processing_template_decl)
12485     {
12486       tree scope = current_scope ();
12487       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12488         add_tree (build_min (TAG_DEFN, enumtype));
12489     }
12490   else
12491     {
12492       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12493       int lowprec = min_precision (minnode, unsignedp);
12494       int highprec = min_precision (maxnode, unsignedp);
12495       int precision = MAX (lowprec, highprec);
12496       tree tem;
12497
12498       TYPE_SIZE (enumtype) = NULL_TREE;
12499
12500       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12501
12502       TYPE_PRECISION (enumtype) = precision;
12503       if (unsignedp)
12504         fixup_unsigned_type (enumtype);
12505       else
12506         fixup_signed_type (enumtype);
12507
12508       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12509         /* Use the width of the narrowest normal C type which is wide
12510            enough.  */ 
12511         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12512                                                     (precision, 1));
12513       else
12514         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12515
12516       TYPE_SIZE (enumtype) = 0;
12517       layout_type (enumtype);
12518     
12519       /* Fix up all variant types of this enum type.  */
12520       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12521            tem = TYPE_NEXT_VARIANT (tem))
12522         {
12523           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12524           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12525           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12526           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12527           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12528           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12529           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12530           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12531           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12532         }
12533
12534       /* Finish debugging output for this type.  */
12535       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12536     }
12537
12538   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12539   pop_obstacks ();
12540
12541   return enumtype;
12542 }
12543
12544 /* Build and install a CONST_DECL for an enumeration constant of the
12545    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12546    Assignment of sequential values by default is handled here.  */
12547
12548 tree
12549 build_enumerator (name, value, type)
12550      tree name;
12551      tree value;
12552      tree type;
12553 {
12554   tree decl, result;
12555   tree context;
12556
12557   /* Remove no-op casts from the value.  */
12558   if (value)
12559     STRIP_TYPE_NOPS (value);
12560
12561  if (! processing_template_decl)
12562    {
12563      /* Validate and default VALUE.  */
12564      if (value != NULL_TREE)
12565        {
12566          if (TREE_READONLY_DECL_P (value))
12567            value = decl_constant_value (value);
12568
12569          if (TREE_CODE (value) == INTEGER_CST)
12570            {
12571              value = default_conversion (value);
12572              constant_expression_warning (value);
12573            }
12574          else
12575            {
12576              cp_error ("enumerator value for `%D' not integer constant", name);
12577              value = NULL_TREE;
12578            }
12579        }
12580
12581      /* Default based on previous value.  */
12582      if (value == NULL_TREE && ! processing_template_decl)
12583        {
12584          value = enum_next_value;
12585          if (enum_overflow)
12586            cp_error ("overflow in enumeration values at `%D'", name);
12587        }
12588
12589      /* Remove no-op casts from the value.  */
12590      if (value)
12591        STRIP_TYPE_NOPS (value);
12592 #if 0
12593      /* To fix MAX_VAL enum consts. (bkoz)  */
12594      TREE_TYPE (value) = integer_type_node;
12595 #endif
12596    }
12597
12598  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12599     Even in other cases, we will later (in finish_enum) be setting the
12600     type of VALUE.  */
12601  if (value != NULL_TREE)
12602    value = copy_node (value);
12603
12604   /* C++ associates enums with global, function, or class declarations.  */
12605  
12606  context = current_scope ();
12607  if (context && context == current_class_type)
12608    /* This enum declaration is local to the class.  */
12609    decl = build_lang_decl (CONST_DECL, name, type);
12610  else
12611    /* It's a global enum, or it's local to a function.  (Note local to
12612       a function could mean local to a class method.  */
12613    decl = build_decl (CONST_DECL, name, type);
12614
12615  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12616  DECL_INITIAL (decl) = value;
12617  TREE_READONLY (decl) = 1;
12618
12619  if (context && context == current_class_type)
12620    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12621       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12622       things like `S::i' later.)  */
12623    finish_member_declaration (decl);
12624  else
12625    {
12626      pushdecl (decl);
12627      GNU_xref_decl (current_function_decl, decl);
12628    }
12629
12630  if (! processing_template_decl)
12631    {
12632      /* Set basis for default for next value.  */
12633      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12634                                                   integer_one_node, PLUS_EXPR);
12635      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12636    }
12637
12638   result = tree_cons (name, decl, NULL_TREE);
12639   return result;
12640 }
12641
12642 \f
12643 static int function_depth;
12644
12645 /* We're defining DECL.  Make sure that it's type is OK.  */
12646
12647 static void
12648 check_function_type (decl)
12649      tree decl;
12650 {
12651   tree fntype = TREE_TYPE (decl);
12652
12653   /* In a function definition, arg types must be complete.  */
12654   require_complete_types_for_parms (current_function_parms);
12655
12656   if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12657     {
12658       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12659
12660       /* Make it return void instead, but don't change the
12661          type of the DECL_RESULT, in case we have a named return value.  */
12662       if (TREE_CODE (fntype) == METHOD_TYPE)
12663         {
12664           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12665           TREE_TYPE (decl)
12666             = build_cplus_method_type (ctype,
12667                                        void_type_node,
12668                                        FUNCTION_ARG_CHAIN (decl));
12669         }
12670       else
12671         TREE_TYPE (decl)
12672           = build_function_type (void_type_node,
12673                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
12674       TREE_TYPE (decl) 
12675         = build_exception_variant (fntype,
12676                                    TYPE_RAISES_EXCEPTIONS (fntype));
12677     }
12678   else
12679     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12680 }
12681
12682 /* Create the FUNCTION_DECL for a function definition.
12683    DECLSPECS and DECLARATOR are the parts of the declaration;
12684    they describe the function's name and the type it returns,
12685    but twisted together in a fashion that parallels the syntax of C.
12686
12687    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12688    DECLARATOR is really the DECL for the function we are about to
12689    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12690    indicating that the function is an inline defined in-class, and
12691    SF_EXPAND indicating that we should generate RTL for this
12692    function.  
12693    
12694    This function creates a binding context for the function body
12695    as well as setting up the FUNCTION_DECL in current_function_decl.
12696
12697    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12698    (it defines a datum instead), we return 0, which tells
12699    yyparse to report a parse error.
12700
12701    For C++, we must first check whether that datum makes any sense.
12702    For example, "class A local_a(1,2);" means that variable local_a
12703    is an aggregate of type A, which should have a constructor
12704    applied to it with the argument list [1, 2].  */
12705
12706 int
12707 start_function (declspecs, declarator, attrs, flags)
12708      tree declspecs, declarator, attrs;
12709      int flags;
12710 {
12711   tree decl1;
12712   tree ctype = NULL_TREE;
12713   tree fntype;
12714   tree restype;
12715   extern int have_extern_spec;
12716   extern int used_extern_spec;
12717   int doing_friend = 0;
12718   struct binding_level *bl;
12719
12720   /* Sanity check.  */
12721   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12722   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12723
12724   /* This should only be done once on the top most decl.  */
12725   if (have_extern_spec && !used_extern_spec)
12726     {
12727       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12728       used_extern_spec = 1;
12729     }
12730
12731   if (flags & SF_PRE_PARSED)
12732     {
12733       decl1 = declarator;
12734
12735       fntype = TREE_TYPE (decl1);
12736       if (TREE_CODE (fntype) == METHOD_TYPE)
12737         ctype = TYPE_METHOD_BASETYPE (fntype);
12738
12739       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12740          class is in the (lexical) scope of the class in which it is
12741          defined.  */
12742       if (!ctype && DECL_FRIEND_P (decl1))
12743         {
12744           ctype = DECL_CLASS_CONTEXT (decl1);
12745
12746           /* CTYPE could be null here if we're dealing with a template;
12747              for example, `inline friend float foo()' inside a template
12748              will have no CTYPE set.  */
12749           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12750             ctype = NULL_TREE;
12751           else
12752             doing_friend = 1;
12753         }
12754
12755       last_function_parms = DECL_ARGUMENTS (decl1);
12756       last_function_parm_tags = NULL_TREE;
12757     }
12758   else
12759     {
12760       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12761       /* If the declarator is not suitable for a function definition,
12762          cause a syntax error.  */
12763       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12764
12765       fntype = TREE_TYPE (decl1);
12766
12767       restype = TREE_TYPE (fntype);
12768       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12769         {
12770           cp_error ("semicolon missing after declaration of `%#T'", restype);
12771           shadow_tag (build_expr_list (NULL_TREE, restype));
12772           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12773           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12774             fntype = build_function_type (integer_type_node,
12775                                           TYPE_ARG_TYPES (fntype));
12776           else
12777             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12778                                               integer_type_node,
12779                                               TYPE_ARG_TYPES (fntype));
12780           TREE_TYPE (decl1) = fntype;
12781         }
12782
12783       if (TREE_CODE (fntype) == METHOD_TYPE)
12784         ctype = TYPE_METHOD_BASETYPE (fntype);
12785       else if (DECL_MAIN_P (decl1))
12786         {
12787           /* If this doesn't return integer_type, complain.  */
12788           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12789             {
12790               if (pedantic || warn_return_type)
12791                 pedwarn ("return type for `main' changed to `int'");
12792               TREE_TYPE (decl1) = fntype = default_function_type;
12793             }
12794         }
12795     }
12796   
12797   /* Sometimes we don't notice that a function is a static member, and
12798      build a METHOD_TYPE for it.  Fix that up now.  */
12799   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12800       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12801     {
12802       revert_static_member_fn (&decl1, NULL, NULL);
12803       last_function_parms = TREE_CHAIN (last_function_parms);
12804       ctype = NULL_TREE;
12805     }
12806
12807   /* Warn if function was previously implicitly declared
12808      (but not if we warned then).  */
12809   if (! warn_implicit
12810       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12811     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12812
12813   /* Set up current_class_type, and enter the scope of the class, if
12814      appropriate.  */
12815   if (ctype)
12816     push_nested_class (ctype, 1);
12817   else if (DECL_STATIC_FUNCTION_P (decl1))
12818     push_nested_class (DECL_CONTEXT (decl1), 2);
12819
12820   /* Now that we have entered the scope of the class, we must restore
12821      the bindings for any template parameters surrounding DECL1, if it
12822      is an inline member template.  (Order is important; consider the
12823      case where a template parameter has the same name as a field of
12824      the class.)  It is not until after this point that
12825      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12826   if (flags & SF_INCLASS_INLINE)
12827     maybe_begin_member_template_processing (decl1);
12828
12829   /* Effective C++ rule 15.  See also c_expand_return.  */
12830   if (warn_ecpp
12831       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12832       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12833     cp_warning ("`operator=' should return a reference to `*this'");
12834
12835   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12836      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12837   if (!DECL_INITIAL (decl1))
12838     DECL_INITIAL (decl1) = error_mark_node;
12839
12840 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12841   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12842 #endif
12843   
12844   /* This function exists in static storage.
12845      (This does not mean `static' in the C sense!)  */
12846   TREE_STATIC (decl1) = 1;
12847
12848   /* We must call push_template_decl after current_class_type is set
12849      up.  (If we are processing inline definitions after exiting a
12850      class scope, current_class_type will be NULL_TREE until set above
12851      by push_nested_class.)  */
12852   if (processing_template_decl)
12853     decl1 = push_template_decl (decl1);
12854
12855   /* We are now in the scope of the function being defined.  */
12856   current_function_decl = decl1;
12857
12858   /* Save the parm names or decls from this function's declarator
12859      where store_parm_decls will find them.  */
12860   current_function_parms = last_function_parms;
12861   current_function_parm_tags = last_function_parm_tags;
12862
12863   /* Make sure the parameter and return types are reasonable.  When
12864      you declare a function, these types can be incomplete, but they
12865      must be complete when you define the function.  */
12866   if (! processing_template_decl)
12867     check_function_type (decl1);
12868
12869   /* Build the return declaration for the function.  */
12870   restype = TREE_TYPE (fntype);
12871   if (!processing_template_decl)
12872     {
12873       if (!DECL_RESULT (decl1))
12874         {
12875           DECL_RESULT (decl1)
12876             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12877           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype), 
12878                                       DECL_RESULT (decl1)); 
12879         }
12880     }
12881   else
12882     /* Just use `void'.  Nobody will ever look at this anyhow.  */
12883     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12884
12885   /* Initialize RTL machinery.  We cannot do this until
12886      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12887      even when processing a template; this is how we get
12888      CURRENT_FUNCTION set up, and our per-function variables
12889      initialized.  */
12890   bl = current_binding_level;
12891   init_function_start (decl1, input_filename, lineno);
12892   current_binding_level = bl;
12893   expanding_p = (flags & SF_EXPAND) != 0;
12894
12895   /* Even though we're inside a function body, we still don't want to
12896      call expand_expr to calculate the size of a variable-sized array.
12897      We haven't necessarily assigned RTL to all variables yet, so it's
12898      not safe to try to expand expressions involving them.  */
12899   immediate_size_expand = 0;
12900   current_function->x_dont_save_pending_sizes_p = 1;
12901
12902   /* If we're building a statement-tree, start the tree now.  */
12903   if (processing_template_decl || !expanding_p)
12904     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
12905
12906   /* Let the user know we're compiling this function.  */
12907   if (processing_template_decl || !building_stmt_tree ())
12908     announce_function (decl1);
12909
12910   /* Record the decl so that the function name is defined.
12911      If we already have a decl for this name, and it is a FUNCTION_DECL,
12912      use the old decl.  */
12913   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12914     {
12915       /* A specialization is not used to guide overload resolution.  */
12916       if ((flag_guiding_decls 
12917            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12918           && ! DECL_FUNCTION_MEMBER_P (decl1))
12919         decl1 = pushdecl (decl1);
12920       else
12921         {
12922           /* We need to set the DECL_CONTEXT. */
12923           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12924             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12925           /* And make sure we have enough default args.  */
12926           check_default_args (decl1);
12927         }
12928       DECL_MAIN_VARIANT (decl1) = decl1;
12929       fntype = TREE_TYPE (decl1);
12930     }
12931
12932   /* Reset these in case the call to pushdecl changed them.  */
12933   current_function_decl = decl1;
12934   current_function->decl = decl1;
12935
12936   /* Initialize the per-function data.  */
12937   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12938     {
12939       /* If we already parsed this function, and we're just expanding it
12940          now, restore saved state.  */
12941       struct binding_level *bl = current_binding_level;
12942       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12943       current_binding_level = bl;
12944
12945       /* This function is being processed in whole-function mode; we
12946          already did semantic analysis.  */
12947       current_function->x_whole_function_mode_p = 1;
12948
12949       /* If we decided that we didn't want to inline this function,
12950          make sure the back-end knows that.  */
12951       if (!current_function_cannot_inline)
12952         current_function_cannot_inline = cp_function_chain->cannot_inline;
12953
12954       /* We don't need the saved data anymore.  */
12955       free (DECL_SAVED_FUNCTION_DATA (decl1));
12956       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12957     }
12958   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12959     {
12960       /* We know that this was set up by `grokclassfn'.  We do not
12961          wait until `store_parm_decls', since evil parse errors may
12962          never get us to that point.  Here we keep the consistency
12963          between `current_class_type' and `current_class_ptr'.  */
12964       tree t = DECL_ARGUMENTS (decl1);
12965               
12966       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL, 
12967                           162);
12968       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12969                           19990811);
12970           
12971       cp_function_chain->x_current_class_ref 
12972         = build_indirect_ref (t, NULL_PTR);
12973       cp_function_chain->x_current_class_ptr = t;
12974
12975       /* Constructors and destructors need to know whether they're "in
12976          charge" of initializing virtual base classes.  */
12977       if (DECL_DESTRUCTOR_P (decl1))
12978         current_in_charge_parm = TREE_CHAIN (t);
12979       else if (DECL_CONSTRUCTOR_P (decl1)
12980                && TREE_CHAIN (t)
12981                && DECL_ARTIFICIAL (TREE_CHAIN (t))
12982                && (DECL_NAME (TREE_CHAIN (t))
12983                    == in_charge_identifier))
12984         current_in_charge_parm = TREE_CHAIN (t);
12985     }
12986
12987   if (DECL_INTERFACE_KNOWN (decl1))
12988     {
12989       tree ctx = hack_decl_function_context (decl1);
12990
12991       if (DECL_NOT_REALLY_EXTERN (decl1))
12992         DECL_EXTERNAL (decl1) = 0;
12993
12994       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12995           && TREE_PUBLIC (ctx))
12996         /* This is a function in a local class in an extern inline
12997            function.  */
12998         comdat_linkage (decl1);
12999     }
13000   /* If this function belongs to an interface, it is public.
13001      If it belongs to someone else's interface, it is also external.
13002      This only affects inlines and template instantiations.  */
13003   else if (interface_unknown == 0
13004            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13005                || flag_alt_external_templates))
13006     {
13007       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13008           || processing_template_decl)
13009         {
13010           DECL_EXTERNAL (decl1)
13011             = (interface_only
13012                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13013                    && !DECL_VINDEX (decl1)));
13014
13015           /* For WIN32 we also want to put these in linkonce sections.  */
13016           maybe_make_one_only (decl1);
13017         }
13018       else
13019         DECL_EXTERNAL (decl1) = 0;
13020       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13021       DECL_INTERFACE_KNOWN (decl1) = 1;
13022     }
13023   else if (interface_unknown && interface_only
13024            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13025                || flag_alt_external_templates))
13026     {
13027       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13028          interface, we will have interface_only set but not
13029          interface_known.  In that case, we don't want to use the normal
13030          heuristics because someone will supply a #pragma implementation
13031          elsewhere, and deducing it here would produce a conflict.  */
13032       comdat_linkage (decl1);
13033       DECL_EXTERNAL (decl1) = 0;
13034       DECL_INTERFACE_KNOWN (decl1) = 1;
13035       DECL_DEFER_OUTPUT (decl1) = 1;
13036     }
13037   else
13038     {
13039       /* This is a definition, not a reference.
13040          So clear DECL_EXTERNAL.  */
13041       DECL_EXTERNAL (decl1) = 0;
13042
13043       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13044           && ! DECL_INTERFACE_KNOWN (decl1)
13045           /* Don't try to defer nested functions for now.  */
13046           && ! hack_decl_function_context (decl1))
13047         DECL_DEFER_OUTPUT (decl1) = 1;
13048       else
13049         DECL_INTERFACE_KNOWN (decl1) = 1;
13050     }
13051
13052   if (doing_semantic_analysis_p ())
13053     {
13054       pushlevel (0);
13055       current_binding_level->parm_flag = 1;
13056     }
13057
13058   if (attrs)
13059     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13060   
13061   if (!building_stmt_tree ())
13062     {
13063       GNU_xref_function (decl1, current_function_parms);
13064       make_function_rtl (decl1);
13065     }
13066
13067   /* Promote the value to int before returning it.  */
13068   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13069     restype = type_promotes_to (restype);
13070
13071   /* If this fcn was already referenced via a block-scope `extern' decl
13072      (or an implicit decl), propagate certain information about the usage.  */
13073   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13074     TREE_ADDRESSABLE (decl1) = 1;
13075
13076   if (DECL_RESULT (decl1) == NULL_TREE)
13077     {
13078       DECL_RESULT (decl1)
13079         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13080       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13081       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13082     }
13083
13084   /* Allocate further tree nodes temporarily during compilation
13085      of this function only.  Tiemann moved up here from bottom of fn.  */
13086   /* If this is a nested function, then we must continue to allocate RTL
13087      on the permanent obstack in case we need to inline it later.  */
13088   if (! hack_decl_function_context (decl1))
13089     temporary_allocation ();
13090   
13091   ++function_depth;
13092
13093   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13094       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13095     dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13096   else if (DECL_CONSTRUCTOR_P (decl1))
13097     ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13098
13099   return 1;
13100 }
13101 \f
13102 /* Called after store_parm_decls for a function-try-block.  We need to update
13103    last_parm_cleanup_insn so that the base initializers for a constructor
13104    are run within this block, not before it.  */
13105
13106 void
13107 expand_start_early_try_stmts ()
13108 {
13109   expand_start_try_stmts ();
13110   last_parm_cleanup_insn = get_last_insn ();
13111 }
13112
13113 /* Store the parameter declarations into the current function declaration.
13114    This is called after parsing the parameter declarations, before
13115    digesting the body of the function.
13116
13117    Also install to binding contour return value identifier, if any.  */
13118
13119 void
13120 store_parm_decls ()
13121 {
13122   register tree fndecl = current_function_decl;
13123   register tree parm;
13124   int parms_have_cleanups = 0;
13125   tree cleanups = NULL_TREE;
13126
13127   /* This is a list of types declared among parms in a prototype.  */
13128   tree parmtags = current_function_parm_tags;
13129
13130   /* This is a chain of any other decls that came in among the parm
13131      declarations.  If a parm is declared with  enum {foo, bar} x;
13132      then CONST_DECLs for foo and bar are put here.  */
13133   tree nonparms = NULL_TREE;
13134
13135   /* Create a binding level for the parms.  */
13136   if (!building_stmt_tree ())
13137     expand_start_bindings (2);
13138
13139   if (current_function_parms)
13140     {
13141       /* This case is when the function was defined with an ANSI prototype.
13142          The parms already have decls, so we need not do anything here
13143          except record them as in effect
13144          and complain if any redundant old-style parm decls were written.  */
13145
13146       tree specparms = current_function_parms;
13147       tree next;
13148
13149       if (doing_semantic_analysis_p ())
13150         {
13151           /* Must clear this because it might contain TYPE_DECLs declared
13152              at class level.  */
13153           storedecls (NULL_TREE);
13154
13155           /* If we're doing semantic analysis, then we'll call pushdecl
13156              for each of these.  We must do them in reverse order so that
13157              they end in the correct forward order.  */
13158           specparms = nreverse (specparms);
13159         }
13160
13161       for (parm = specparms; parm; parm = next)
13162         {
13163           next = TREE_CHAIN (parm);
13164           if (TREE_CODE (parm) == PARM_DECL)
13165             {
13166               tree cleanup;
13167               
13168               if (doing_semantic_analysis_p ())
13169                 {
13170                   if (DECL_NAME (parm) == NULL_TREE
13171                       || TREE_CODE (TREE_TYPE (parm)) != VOID_TYPE)
13172                     pushdecl (parm);
13173                   else
13174                     cp_error ("parameter `%D' declared void", parm);
13175                 }
13176
13177               if (! building_stmt_tree ()
13178                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13179                 {
13180                   expand_decl (parm);
13181                   parms_have_cleanups = 1;
13182
13183                   /* Keep track of the cleanups.  */
13184                   cleanups = tree_cons (parm, cleanup, cleanups);
13185                 }
13186             }
13187           else
13188             {
13189               /* If we find an enum constant or a type tag,
13190                  put it aside for the moment.  */
13191               TREE_CHAIN (parm) = NULL_TREE;
13192               nonparms = chainon (nonparms, parm);
13193             }
13194         }
13195
13196       if (doing_semantic_analysis_p ())
13197         {
13198           /* Get the decls in their original chain order
13199              and record in the function.  This is all and only the
13200              PARM_DECLs that were pushed into scope by the loop above.  */
13201           DECL_ARGUMENTS (fndecl) = getdecls ();
13202           storetags (chainon (parmtags, gettags ()));
13203
13204           /* We built up the cleanups in reversed order.  */
13205           cleanups = nreverse (cleanups);
13206         }
13207     }
13208   else
13209     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13210
13211   /* Now store the final chain of decls for the arguments
13212      as the decl-chain of the current lexical scope.
13213      Put the enumerators in as well, at the front so that
13214      DECL_ARGUMENTS is not modified.  */
13215   if (doing_semantic_analysis_p ())
13216     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13217
13218   /* Initialize the RTL code for the function.  */
13219   DECL_SAVED_INSNS (fndecl) = 0;
13220   if (! building_stmt_tree ())
13221     expand_function_start (fndecl, parms_have_cleanups);
13222
13223   current_function_parms_stored = 1;
13224
13225   /* If this function is `main', emit a call to `__main'
13226      to run global initializers, etc.  */
13227   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13228     expand_main_function ();
13229
13230   /* Now that we have initialized the parms, we can start their
13231      cleanups.  We cannot do this before, since expand_decl_cleanup
13232      should not be called before the parm can be used.  */
13233   if (cleanups && !building_stmt_tree ())
13234     while (cleanups)
13235       {
13236         if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), 
13237                                    TREE_VALUE (cleanups)))
13238           cp_error ("parser lost in parsing declaration of `%D'",
13239                     TREE_PURPOSE (cleanups));
13240         
13241         cleanups = TREE_CHAIN (cleanups);
13242       }
13243
13244   /* Create a binding contour which can be used to catch
13245      cleanup-generated temporaries.  Also, if the return value needs or
13246      has initialization, deal with that now.  */
13247   if (parms_have_cleanups)
13248     {
13249       pushlevel (0);
13250       if (!building_stmt_tree ())
13251         expand_start_bindings (2);
13252     }
13253
13254   /* Do the starting of the exception specifications, if we have any.  */
13255   if (flag_exceptions && !processing_template_decl 
13256       && building_stmt_tree () 
13257       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13258     current_eh_spec_try_block = expand_start_eh_spec ();
13259
13260   last_parm_cleanup_insn = get_last_insn ();
13261   last_dtor_insn = get_last_insn ();
13262 }
13263
13264 /* Bind a name and initialization to the return value of
13265    the current function.  */
13266
13267 void
13268 store_return_init (decl)
13269      tree decl;
13270 {
13271   /* If this named return value comes in a register, put it in a
13272      pseudo-register.  */
13273   if (DECL_REGISTER (decl))
13274     {
13275       original_result_rtx = DECL_RTL (decl);
13276       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13277     }
13278 }
13279
13280 \f
13281 /* We have finished doing semantic analysis on DECL, but have not yet
13282    generated RTL for its body.  Save away our current state, so that
13283    when we want to generate RTL later we know what to do.  */
13284
13285 static void
13286 save_function_data (decl)
13287      tree decl;
13288 {
13289   struct language_function *f;
13290
13291   /* Save the language-specific per-function data so that we can
13292      get it back when we really expand this function.  */
13293   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13294                       19990908);
13295       
13296   /* Make a copy.  */
13297   f = ((struct language_function *) 
13298        xmalloc (sizeof (struct language_function)));
13299   bcopy ((char *) cp_function_chain, (char *) f,
13300          sizeof (struct language_function));
13301   DECL_SAVED_FUNCTION_DATA (decl) = f;
13302
13303   /* Clear out the bits we don't need.  */
13304   f->x_base_init_list = NULL_TREE;
13305   f->x_member_init_list = NULL_TREE;
13306   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13307   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13308   f->x_last_dtor_insn = NULL_RTX;
13309   f->x_last_parm_cleanup_insn = NULL_RTX;
13310   f->x_result_rtx = NULL_RTX;
13311   f->x_named_label_uses = NULL;
13312   f->bindings = NULL;
13313
13314   /* When we get back here again, we will be expanding.  */
13315   f->x_expanding_p = 1;
13316
13317   /* If we've already decided that we cannot inline this function, we
13318      must remember that fact when we actually go to expand the
13319      function.  */
13320   f->cannot_inline = current_function_cannot_inline;
13321 }
13322
13323 /* At the end of every constructor we generate to code to return
13324    `this'.  Do that now.  */
13325
13326 static void
13327 finish_constructor_body ()
13328 {
13329   /* Any return from a constructor will end up here.  */
13330   add_tree (build_min_nt (LABEL_STMT, ctor_label));
13331
13332   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13333      generate the return, rather than a goto to CTOR_LABEL.  */
13334   ctor_label = NULL_TREE;
13335   /* In check_return_expr we translate an empty return from a
13336      constructor to a return of `this'.  */
13337   finish_return_stmt (NULL_TREE);
13338 }
13339
13340 /* At the end of every destructor we generate code to restore virtual
13341    function tables to the values desired by base classes and to call
13342    to base class destructors.  Do that now.  */
13343
13344 static void
13345 finish_destructor_body ()
13346 {
13347   tree compound_stmt;
13348   tree in_charge;
13349   tree virtual_size;
13350   tree exprstmt;
13351
13352   /* Create a block to contain all the extra code.  */
13353   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13354
13355   /* Any return from a destructor will end up here.  */
13356   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13357
13358   /* Generate the code to call destructor on base class.  If this
13359      destructor belongs to a class with virtual functions, then set
13360      the virtual function table pointer to represent the type of our
13361      base class.  */
13362
13363   /* This side-effect makes call to `build_delete' generate the code
13364      we have to have at the end of this destructor.  `build_delete'
13365      will set the flag again.  */
13366   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13367
13368   /* These are two cases where we cannot delegate deletion.  */
13369   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13370       || TYPE_GETS_REG_DELETE (current_class_type))
13371     in_charge = integer_zero_node;
13372   else
13373     in_charge = current_in_charge_parm;
13374
13375   exprstmt = build_delete (current_class_type,
13376                            current_class_ref, 
13377                            in_charge,
13378                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 
13379                            0);
13380
13381   if (exprstmt != error_mark_node
13382       && (TREE_CODE (exprstmt) != NOP_EXPR
13383           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13384           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13385     {
13386       if (exprstmt != void_zero_node)
13387         /* Don't call `expand_expr_stmt' if we're not going to do
13388            anything, since -Wall will give a diagnostic.  */
13389         finish_expr_stmt (exprstmt);
13390
13391       /* Run destructors for all virtual baseclasses.  */
13392       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13393         {
13394           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13395           tree if_stmt = begin_if_stmt ();
13396           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13397                                       current_in_charge_parm, 
13398                                       integer_two_node),
13399                                if_stmt);
13400
13401           while (vbases)
13402             {
13403               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13404                 {
13405                   tree vb = get_vbase
13406                     (BINFO_TYPE (vbases),
13407                      TYPE_BINFO (current_class_type));
13408                   finish_expr_stmt
13409                     (build_scoped_method_call
13410                      (current_class_ref, vb, dtor_identifier,
13411                       build_expr_list (NULL_TREE, integer_zero_node)));
13412                 }
13413               vbases = TREE_CHAIN (vbases);
13414             }
13415
13416           finish_then_clause (if_stmt);
13417           finish_if_stmt ();
13418         }
13419     }
13420   
13421   virtual_size = c_sizeof (current_class_type);
13422
13423   /* At the end, call delete if that's what's requested.  */
13424   
13425   /* FDIS sez: At the point of definition of a virtual destructor
13426      (including an implicit definition), non-placement operator delete
13427      shall be looked up in the scope of the destructor's class and if
13428      found shall be accessible and unambiguous.
13429      
13430      This is somewhat unclear, but I take it to mean that if the class
13431      only defines placement deletes we don't do anything here.  So we
13432      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13433      they ever try to delete one of these.  */
13434   if (TYPE_GETS_REG_DELETE (current_class_type)
13435       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13436     {
13437       tree if_stmt;
13438
13439       exprstmt = build_op_delete_call
13440         (DELETE_EXPR, current_class_ptr, virtual_size,
13441          LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13442
13443       if_stmt = begin_if_stmt ();
13444       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13445                                   current_in_charge_parm,
13446                                   integer_one_node),
13447                            if_stmt);
13448       finish_expr_stmt (exprstmt);
13449       finish_then_clause (if_stmt);
13450       finish_if_stmt ();
13451     }
13452
13453   /* Close the block we started above.  */
13454   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13455 }
13456
13457 /* Finish up a function declaration and compile that function
13458    all the way to assembler language output.  The free the storage
13459    for the function definition.
13460
13461    This is called after parsing the body of the function definition.
13462    LINENO is the current line number.
13463
13464    FLAGS is a bitwise or of the following values: 
13465      1 - CALL_POPLEVEL 
13466        An extra call to poplevel (and expand_end_bindings) must be
13467        made to take care of the binding contour for the base
13468        initializers.  This is only relevant for constructors.
13469      2 - INCLASS_INLINE
13470        We just finished processing the body of an in-class inline
13471        function definition.  (This processing will have taken place
13472        after the class definition is complete.)  */
13473
13474 tree
13475 finish_function (lineno, flags)
13476      int lineno;
13477      int flags;
13478 {
13479   register tree fndecl = current_function_decl;
13480   tree fntype, ctype = NULL_TREE;
13481   /* Label to use if this function is supposed to return a value.  */
13482   tree no_return_label = NULL_TREE;
13483   int call_poplevel = (flags & 1) != 0;
13484   int inclass_inline = (flags & 2) != 0;
13485   int expand_p;
13486   int nested;
13487
13488   /* When we get some parse errors, we can end up without a
13489      current_function_decl, so cope.  */
13490   if (fndecl == NULL_TREE)
13491     return error_mark_node;
13492
13493   nested = function_depth > 1;
13494   fntype = TREE_TYPE (fndecl);
13495
13496   /*  TREE_READONLY (fndecl) = 1;
13497       This caused &foo to be of type ptr-to-const-function
13498       which then got a warning when stored in a ptr-to-function variable.  */
13499
13500   /* This happens on strange parse errors.  */
13501   if (! current_function_parms_stored)
13502     {
13503       call_poplevel = 0;
13504       store_parm_decls ();
13505     }
13506
13507   if (building_stmt_tree ())
13508     {
13509       if (DECL_CONSTRUCTOR_P (fndecl))
13510         {
13511           finish_constructor_body ();
13512           if (call_poplevel)
13513             do_poplevel ();
13514         }
13515       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13516         finish_destructor_body ();
13517       else if (DECL_MAIN_P (fndecl))
13518         {
13519           /* Make it so that `main' always returns 0 by default.  */
13520 #ifdef VMS
13521           finish_return_stmt (integer_one_node);
13522 #else
13523           finish_return_stmt (integer_zero_node);
13524 #endif
13525         }
13526
13527       /* Finish dealing with exception specifiers.  */
13528       if (flag_exceptions && !processing_template_decl
13529           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13530         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS 
13531                             (TREE_TYPE (current_function_decl)),
13532                             current_eh_spec_try_block);
13533     }
13534   else
13535     {
13536       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13537         {
13538           tree ttype = target_type (fntype);
13539           tree parmdecl;
13540
13541           if (IS_AGGR_TYPE (ttype))
13542             /* Let debugger know it should output info for this type.  */
13543             note_debug_info_needed (ttype);
13544
13545           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13546             {
13547               ttype = target_type (TREE_TYPE (parmdecl));
13548               if (IS_AGGR_TYPE (ttype))
13549                 /* Let debugger know it should output info for this type.  */
13550                 note_debug_info_needed (ttype);
13551             }
13552         }
13553
13554       /* Clean house because we will need to reorder insns here.  */
13555       do_pending_stack_adjust ();
13556
13557       if (dtor_label)
13558         ;
13559       else if (DECL_CONSTRUCTOR_P (fndecl))
13560         {
13561           /* All subobjects have been fully constructed at this point.  */
13562           end_protect_partials ();
13563
13564           if (call_poplevel)
13565             do_poplevel ();
13566         }
13567       else if (return_label != NULL_RTX
13568                && flag_this_is_variable <= 0
13569                && current_function_return_value == NULL_TREE
13570                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13571         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13572
13573       if (flag_exceptions)
13574         expand_exception_blocks ();
13575
13576       /* If this function is supposed to return a value, ensure that
13577          we do not fall into the cleanups by mistake.  The end of our
13578          function will look like this:
13579          
13580          user code (may have return stmt somewhere)
13581          goto no_return_label
13582          cleanup_label:
13583          cleanups
13584          goto return_label
13585          no_return_label:
13586          NOTE_INSN_FUNCTION_END
13587          return_label:
13588          things for return
13589          
13590          If the user omits a return stmt in the USER CODE section, we
13591          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13592          Otherwise, we won't.  */
13593       if (no_return_label)
13594         {
13595           DECL_CONTEXT (no_return_label) = fndecl;
13596           DECL_INITIAL (no_return_label) = error_mark_node;
13597           DECL_SOURCE_FILE (no_return_label) = input_filename;
13598           DECL_SOURCE_LINE (no_return_label) = lineno;
13599           expand_goto (no_return_label);
13600         }
13601
13602       if (cleanup_label)
13603         {
13604           /* Remove the binding contour which is used
13605              to catch cleanup-generated temporaries.  */
13606           expand_end_bindings (0, 0, 0);
13607           poplevel (0, 0, 0);
13608
13609           /* Emit label at beginning of cleanup code for parameters.  */
13610           emit_label (cleanup_label);
13611         }
13612
13613       /* Get return value into register if that's where it's supposed
13614          to be.  */
13615       if (original_result_rtx)
13616         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13617
13618       /* Finish building code that will trigger warnings if users forget
13619          to make their functions return values.  */
13620       if (no_return_label || cleanup_label)
13621         emit_jump (return_label);
13622       if (no_return_label)
13623         {
13624           /* We don't need to call `expand_*_return' here because we
13625              don't need any cleanups here--this path of code is only
13626              for error checking purposes.  */
13627           expand_label (no_return_label);
13628         }
13629
13630       /* We hard-wired immediate_size_expand to zero in
13631          start_function.  Expand_function_end will decrement this
13632          variable.  So, we set the variable to one here, so that after
13633          the decrement it will remain zero.  */
13634       immediate_size_expand = 1;
13635
13636       /* Generate rtl for function exit.  */
13637       expand_function_end (input_filename, lineno, 1);
13638     }
13639
13640   /* We have to save this value here in case
13641      maybe_end_member_template_processing decides to pop all the
13642      template parameters.  */
13643   expand_p = !building_stmt_tree ();
13644   
13645   /* If we're saving up tree structure, tie off the function now.  */
13646   if (!expand_p)
13647     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
13648
13649   /* This must come after expand_function_end because cleanups might
13650      have declarations (from inline functions) that need to go into
13651      this function's blocks.  */
13652   if (doing_semantic_analysis_p ())
13653     {
13654       if (current_binding_level->parm_flag != 1)
13655         my_friendly_abort (122);
13656       poplevel (1, 0, 1);
13657     }
13658
13659   /* Remember that we were in class scope.  */
13660   if (current_class_name)
13661     ctype = current_class_type;
13662
13663   /* Must mark the RESULT_DECL as being in this function.  */
13664   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13665
13666   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13667      to the FUNCTION_DECL node itself.  */
13668   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13669
13670   /* Save away current state, if appropriate.  */
13671   if (!expanding_p && !processing_template_decl)
13672     save_function_data (fndecl);
13673
13674   if (expand_p)
13675     {
13676       int returns_null;
13677       int returns_value;
13678       int saved_flag_keep_inline_functions =
13679         flag_keep_inline_functions;
13680
13681       /* So we can tell if jump_optimize sets it to 1.  */
13682       can_reach_end = 0;
13683
13684       if (DECL_CONTEXT (fndecl) != NULL_TREE
13685           && hack_decl_function_context (fndecl))
13686         /* Trick rest_of_compilation into not deferring output of this
13687            function, even if it is inline, since the rtl_obstack for
13688            this function is the function_obstack of the enclosing
13689            function and will be deallocated when the enclosing
13690            function is gone.  See save_tree_status.  */
13691         flag_keep_inline_functions = 1;
13692
13693       /* Before we call rest_of_compilation (which will pop the
13694          CURRENT_FUNCTION), we must save these values.  */
13695       returns_null = current_function_returns_null;
13696       returns_value = current_function_returns_value;
13697
13698       /* If this is a nested function (like a template instantiation
13699          that we're compiling in the midst of compiling something
13700          else), push a new GC context.  That will keep local variables
13701          on the stack from being collected while we're doing the
13702          compilation of this function.  */
13703       if (function_depth > 1)
13704         ggc_push_context ();
13705
13706       /* Run the optimizers and output the assembler code for this
13707          function.  */
13708       if (DECL_ARTIFICIAL (fndecl))
13709         {
13710           /* Do we really *want* to inline this synthesized method?  */
13711
13712           int save_fif = flag_inline_functions;
13713           flag_inline_functions = 1;
13714
13715           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13716              will check our size.  */
13717           DECL_INLINE (fndecl) = 0;
13718
13719           rest_of_compilation (fndecl);
13720           flag_inline_functions = save_fif;
13721         }
13722       else
13723         rest_of_compilation (fndecl);
13724
13725       /* Undo the call to ggc_push_context above.  */
13726       if (function_depth > 1)
13727         ggc_pop_context ();
13728
13729       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13730
13731       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13732         {
13733           /* Set DECL_EXTERNAL so that assemble_external will be called as
13734              necessary.  We'll clear it again in finish_file.  */
13735           if (! DECL_EXTERNAL (fndecl))
13736             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13737           DECL_EXTERNAL (fndecl) = 1;
13738           mark_inline_for_output (fndecl);
13739         }
13740
13741       if (ctype && TREE_ASM_WRITTEN (fndecl))
13742         note_debug_info_needed (ctype);
13743
13744       returns_null |= can_reach_end;
13745
13746       /* Since we don't normally go through c_expand_return for constructors,
13747          this normally gets the wrong value.
13748          Also, named return values have their return codes emitted after
13749          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13750       if (DECL_CONSTRUCTOR_P (fndecl)
13751           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13752         returns_null = 0;
13753
13754       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13755         cp_warning ("`noreturn' function `%D' does return", fndecl);
13756       else if ((warn_return_type || pedantic)
13757                && returns_null
13758                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13759         {
13760           /* If this function returns non-void and control can drop through,
13761              complain.  */
13762           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13763         }
13764       /* With just -W, complain only if function returns both with
13765          and without a value.  */
13766       else if (extra_warnings && returns_value && returns_null)
13767         warning ("this function may return with or without a value");
13768     }
13769   else
13770     {
13771       /* Clear out memory we no longer need.  */
13772       free_after_parsing (current_function);
13773       /* Since we never call rest_of_compilation, we never clear
13774          CURRENT_FUNCTION.  Do so explicitly.  */
13775       free_after_compilation (current_function);
13776       current_function = NULL;
13777     }
13778
13779   /* If this is a in-class inline definition, we may have to pop the
13780      bindings for the template parameters that we added in
13781      maybe_begin_member_template_processing when start_function was
13782      called.  */
13783   if (inclass_inline)
13784     maybe_end_member_template_processing ();
13785
13786   /* Leave the scope of the class.  */
13787   if (ctype)
13788     pop_nested_class ();
13789
13790   --function_depth;
13791
13792   /* Free all the tree nodes making up this function.  */
13793   /* Switch back to allocating nodes permanently
13794      until we start another function.  */
13795   if (! nested)
13796     permanent_allocation (1);
13797
13798   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13799     {
13800       tree t;
13801
13802       /* Stop pointing to the local nodes about to be freed.  */
13803       /* But DECL_INITIAL must remain nonzero so we know this
13804          was an actual function definition.  */
13805       DECL_INITIAL (fndecl) = error_mark_node;
13806       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13807         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13808     }
13809
13810   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13811     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13812   if (DECL_STATIC_DESTRUCTOR (fndecl))
13813     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13814
13815   /* Clean up.  */
13816   if (! nested)
13817     {
13818       /* Let the error reporting routines know that we're outside a
13819          function.  For a nested function, this value is used in
13820          pop_cp_function_context and then reset via pop_function_context.  */
13821       current_function_decl = NULL_TREE;
13822     }
13823
13824   return fndecl;
13825 }
13826 \f
13827 /* Create the FUNCTION_DECL for a function definition.
13828    DECLSPECS and DECLARATOR are the parts of the declaration;
13829    they describe the return type and the name of the function,
13830    but twisted together in a fashion that parallels the syntax of C.
13831
13832    This function creates a binding context for the function body
13833    as well as setting up the FUNCTION_DECL in current_function_decl.
13834
13835    Returns a FUNCTION_DECL on success.
13836
13837    If the DECLARATOR is not suitable for a function (it defines a datum
13838    instead), we return 0, which tells yyparse to report a parse error.
13839
13840    May return void_type_node indicating that this method is actually
13841    a friend.  See grokfield for more details.
13842
13843    Came here with a `.pushlevel' .
13844
13845    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13846    CHANGES TO CODE IN `grokfield'.  */
13847
13848 tree
13849 start_method (declspecs, declarator, attrlist)
13850      tree declarator, declspecs, attrlist;
13851 {
13852   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13853                                 attrlist);
13854
13855   /* Something too ugly to handle.  */
13856   if (fndecl == NULL_TREE)
13857     return NULL_TREE;
13858
13859   /* Pass friends other than inline friend functions back.  */
13860   if (fndecl == void_type_node)
13861     return fndecl;
13862
13863   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13864     /* Not a function, tell parser to report parse error.  */
13865     return NULL_TREE;
13866
13867   if (DECL_IN_AGGR_P (fndecl))
13868     {
13869       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13870         {
13871           if (DECL_CONTEXT (fndecl) 
13872               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13873             cp_error ("`%D' is already defined in class %s", fndecl,
13874                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13875         }
13876       return void_type_node;
13877     }
13878
13879   check_template_shadow (fndecl);
13880
13881   DECL_THIS_INLINE (fndecl) = 1;
13882
13883   if (flag_default_inline)
13884     DECL_INLINE (fndecl) = 1;
13885
13886   /* We process method specializations in finish_struct_1.  */
13887   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13888     fndecl = push_template_decl (fndecl);
13889
13890   /* We read in the parameters on the maybepermanent_obstack,
13891      but we won't be getting back to them until after we
13892      may have clobbered them.  So the call to preserve_data
13893      will keep them safe.  */
13894   preserve_data ();
13895
13896   if (! DECL_FRIEND_P (fndecl))
13897     {
13898       if (TREE_CHAIN (fndecl))
13899         {
13900           fndecl = copy_node (fndecl);
13901           TREE_CHAIN (fndecl) = NULL_TREE;
13902         }
13903
13904       if (DECL_CONSTRUCTOR_P (fndecl))
13905         {
13906           if (! grok_ctor_properties (current_class_type, fndecl))
13907             return void_type_node;
13908         }
13909       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13910         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13911     }
13912
13913   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13914
13915   /* Make a place for the parms */
13916   pushlevel (0);
13917   current_binding_level->parm_flag = 1;
13918   
13919   DECL_IN_AGGR_P (fndecl) = 1;
13920   return fndecl;
13921 }
13922
13923 /* Go through the motions of finishing a function definition.
13924    We don't compile this method until after the whole class has
13925    been processed.
13926
13927    FINISH_METHOD must return something that looks as though it
13928    came from GROKFIELD (since we are defining a method, after all).
13929
13930    This is called after parsing the body of the function definition.
13931    STMTS is the chain of statements that makes up the function body.
13932
13933    DECL is the ..._DECL that `start_method' provided.  */
13934
13935 tree
13936 finish_method (decl)
13937      tree decl;
13938 {
13939   register tree fndecl = decl;
13940   tree old_initial;
13941
13942   register tree link;
13943
13944   if (decl == void_type_node)
13945     return decl;
13946
13947   old_initial = DECL_INITIAL (fndecl);
13948
13949   /* Undo the level for the parms (from start_method).
13950      This is like poplevel, but it causes nothing to be
13951      saved.  Saving information here confuses symbol-table
13952      output routines.  Besides, this information will
13953      be correctly output when this method is actually
13954      compiled.  */
13955
13956   /* Clear out the meanings of the local variables of this level;
13957      also record in each decl which block it belongs to.  */
13958
13959   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13960     {
13961       if (DECL_NAME (link) != NULL_TREE)
13962         pop_binding (DECL_NAME (link), link);
13963       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13964       DECL_CONTEXT (link) = NULL_TREE;
13965     }
13966
13967   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13968                       (HOST_WIDE_INT) current_binding_level->level_chain,
13969                       current_binding_level->parm_flag,
13970                       current_binding_level->keep);
13971
13972   poplevel (0, 0, 0);
13973
13974   DECL_INITIAL (fndecl) = old_initial;
13975
13976   /* We used to check if the context of FNDECL was different from
13977      current_class_type as another way to get inside here.  This didn't work
13978      for String.cc in libg++.  */
13979   if (DECL_FRIEND_P (fndecl))
13980     {
13981       CLASSTYPE_INLINE_FRIENDS (current_class_type)
13982         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13983       decl = void_type_node;
13984     }
13985
13986   return decl;
13987 }
13988 \f
13989 /* Called when a new struct TYPE is defined.
13990    If this structure or union completes the type of any previous
13991    variable declaration, lay it out and output its rtl.  */
13992
13993 void
13994 hack_incomplete_structures (type)
13995      tree type;
13996 {
13997   tree *list;
13998
13999   if (current_binding_level->incomplete == NULL_TREE)
14000     return;
14001
14002   if (!type) /* Don't do this for class templates.  */
14003     return;
14004
14005   for (list = &current_binding_level->incomplete; *list; )
14006     {
14007       tree decl = TREE_VALUE (*list);
14008       if ((decl && TREE_TYPE (decl) == type)
14009           || (TREE_TYPE (decl)
14010               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14011               && TREE_TYPE (TREE_TYPE (decl)) == type))
14012         {
14013           int toplevel = toplevel_bindings_p ();
14014           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14015               && TREE_TYPE (TREE_TYPE (decl)) == type)
14016             layout_type (TREE_TYPE (decl));
14017           layout_decl (decl, 0);
14018           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14019           if (! toplevel)
14020             {
14021               tree cleanup;
14022               expand_decl (decl);
14023               cleanup = maybe_build_cleanup (decl);
14024               expand_decl_init (decl);
14025               if (! expand_decl_cleanup (decl, cleanup))
14026                 cp_error ("parser lost in parsing declaration of `%D'",
14027                           decl);
14028             }
14029           *list = TREE_CHAIN (*list);
14030         }
14031       else
14032         list = &TREE_CHAIN (*list);
14033     }
14034 }
14035
14036 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14037    See build_delete for information about AUTO_DELETE.
14038
14039    Don't build these on the momentary obstack; they must live
14040    the life of the binding contour.  */
14041
14042 static tree
14043 maybe_build_cleanup_1 (decl, auto_delete)
14044      tree decl, auto_delete;
14045 {
14046   tree type = TREE_TYPE (decl);
14047   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14048     {
14049       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14050       tree rval;
14051
14052       if (TREE_CODE (type) == ARRAY_TYPE)
14053         rval = decl;
14054       else
14055         {
14056           mark_addressable (decl);
14057           rval = build_unary_op (ADDR_EXPR, decl, 0);
14058         }
14059
14060       /* Optimize for space over speed here.  */
14061       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14062           || flag_expensive_optimizations)
14063         flags |= LOOKUP_NONVIRTUAL;
14064
14065       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14066
14067       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14068           && ! TYPE_HAS_DESTRUCTOR (type))
14069         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14070                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14071
14072       return rval;
14073     }
14074   return 0;
14075 }
14076
14077 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
14078
14079 tree
14080 build_target_expr (decl, value)
14081      tree decl;
14082      tree value;
14083 {
14084   tree t;
14085
14086   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
14087              maybe_build_cleanup (decl), NULL_TREE);
14088   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14089      ignore the TARGET_EXPR.  If there really turn out to be no
14090      side-effects, then the optimizer should be able to get rid of
14091      whatever code is generated anyhow.  */
14092   TREE_SIDE_EFFECTS (t) = 1;
14093
14094   return t;
14095 }
14096
14097 /* If DECL is of a type which needs a cleanup, build that cleanup
14098    here.  The cleanup does free the storage with a call to delete.  */
14099
14100 tree
14101 maybe_build_cleanup_and_delete (decl)
14102      tree decl;
14103 {
14104   return maybe_build_cleanup_1 (decl, integer_three_node);
14105 }
14106
14107 /* If DECL is of a type which needs a cleanup, build that cleanup
14108    here.  The cleanup does not free the storage with a call a delete.  */
14109
14110 tree
14111 maybe_build_cleanup (decl)
14112      tree decl;
14113 {
14114   return maybe_build_cleanup_1 (decl, integer_two_node);
14115 }
14116 \f
14117 /* Expand a C++ expression at the statement level.
14118    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14119    The C++ type checker should get all of these out when
14120    expressions are combined with other, type-providing, expressions,
14121    leaving only orphan expressions, such as:
14122
14123    &class::bar;         / / takes its address, but does nothing with it.  */
14124
14125 void
14126 cplus_expand_expr_stmt (exp)
14127      tree exp;
14128 {
14129   if (stmts_are_full_exprs_p)
14130     exp = convert_to_void (exp, "statement");
14131   
14132 #if 0
14133   /* We should do this eventually, but right now this causes regex.o from
14134      libg++ to miscompile, and tString to core dump.  */
14135   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14136 #endif
14137
14138   /* If we don't do this, we end up down inside expand_expr
14139      trying to do TYPE_MODE on the ERROR_MARK, and really
14140      go outside the bounds of the type.  */
14141   if (exp != error_mark_node)
14142     expand_expr_stmt (break_out_cleanups (exp));
14143 }
14144
14145 /* When a stmt has been parsed, this function is called.  */
14146
14147 void
14148 finish_stmt ()
14149 {
14150   /* Always assume this statement was not an expression statement.  If
14151      it actually was an expression statement, its our callers
14152      responsibility to fix this up.  */
14153   last_expr_type = NULL_TREE;
14154 }
14155
14156 /* Change a static member function definition into a FUNCTION_TYPE, instead
14157    of the METHOD_TYPE that we create when it's originally parsed.
14158
14159    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14160    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14161    other decls.  Either pass the addresses of local variables or NULL.  */
14162
14163 void
14164 revert_static_member_fn (decl, fn, argtypes)
14165      tree *decl, *fn, *argtypes;
14166 {
14167   tree tmp;
14168   tree function = fn ? *fn : TREE_TYPE (*decl);
14169   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14170
14171   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14172       != TYPE_UNQUALIFIED)
14173     cp_error ("static member function `%#D' declared with type qualifiers", 
14174               *decl);
14175
14176   args = TREE_CHAIN (args);
14177   tmp = build_function_type (TREE_TYPE (function), args);
14178   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14179   tmp = build_exception_variant (tmp,
14180                                  TYPE_RAISES_EXCEPTIONS (function));
14181   TREE_TYPE (*decl) = tmp;
14182   if (DECL_ARGUMENTS (*decl))
14183     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14184   DECL_STATIC_FUNCTION_P (*decl) = 1;
14185   if (fn)
14186     *fn = tmp;
14187   if (argtypes)
14188     *argtypes = args;
14189 }
14190
14191 /* Initialize the variables used during compilation of a C++ 
14192    function.  */ 
14193
14194 static void
14195 push_cp_function_context (f)
14196      struct function *f;
14197 {
14198   struct language_function *p 
14199     = ((struct language_function *) 
14200        xcalloc (1, sizeof (struct language_function)));
14201   f->language = p;
14202
14203   /* It takes an explicit call to expand_body to generate RTL for a
14204      function.  */
14205   expanding_p = 0;
14206
14207   /* Whenever we start a new function, we destroy temporaries in the
14208      usual way.  */
14209   stmts_are_full_exprs_p = 1;
14210 }
14211
14212 /* Free the language-specific parts of F, now that we've finished
14213    compiling the function.  */
14214
14215 static void
14216 pop_cp_function_context (f)
14217      struct function *f;
14218 {
14219   if (f->language)
14220     free (f->language);
14221   f->language = 0;
14222 }
14223
14224 /* Mark P for GC.  */
14225
14226 static void
14227 mark_lang_function (p)
14228      struct language_function *p;
14229 {
14230   if (!p)
14231     return;
14232
14233   ggc_mark_tree (p->x_named_labels);
14234   ggc_mark_tree (p->x_ctor_label);
14235   ggc_mark_tree (p->x_dtor_label);
14236   ggc_mark_tree (p->x_base_init_list);
14237   ggc_mark_tree (p->x_member_init_list);
14238   ggc_mark_tree (p->x_current_class_ptr);
14239   ggc_mark_tree (p->x_current_class_ref);
14240   ggc_mark_tree (p->x_eh_spec_try_block);
14241   ggc_mark_tree (p->x_scope_stmt_stack);
14242
14243   ggc_mark_rtx (p->x_last_dtor_insn);
14244   ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14245   ggc_mark_rtx (p->x_result_rtx);
14246
14247   mark_stmt_tree (&p->x_stmt_tree);
14248   mark_binding_level (&p->bindings);
14249 }
14250
14251 /* Mark the language-specific data in F for GC.  */
14252
14253 void
14254 mark_cp_function_context (f)
14255      struct function *f;
14256 {
14257   mark_lang_function (f->language);
14258 }
14259
14260 int
14261 in_function_p ()
14262 {
14263   return function_depth != 0;
14264 }
14265
14266
14267 void
14268 lang_mark_false_label_stack (l)
14269      struct label_node *l;
14270 {
14271   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14272   my_friendly_assert (l == NULL, 19990904);
14273 }
14274
14275 void
14276 lang_mark_tree (t)
14277      tree t;
14278 {
14279   enum tree_code code = TREE_CODE (t);
14280   if (code == IDENTIFIER_NODE)
14281     {
14282       struct lang_identifier *li = (struct lang_identifier *) t;
14283       struct lang_id2 *li2 = li->x;
14284       ggc_mark_tree (li->namespace_bindings);
14285       ggc_mark_tree (li->bindings);
14286       ggc_mark_tree (li->class_value);
14287       ggc_mark_tree (li->class_template_info);
14288
14289       if (li2)
14290         {
14291           ggc_mark_tree (li2->label_value);
14292           ggc_mark_tree (li2->implicit_decl);
14293           ggc_mark_tree (li2->error_locus);
14294         }
14295     }
14296   else if (code == CPLUS_BINDING)
14297     {
14298       if (BINDING_HAS_LEVEL_P (t))
14299         mark_binding_level (&BINDING_LEVEL (t));
14300       else
14301         ggc_mark_tree (BINDING_SCOPE (t));
14302       ggc_mark_tree (BINDING_VALUE (t));
14303     }
14304   else if (code == OVERLOAD)
14305     ggc_mark_tree (OVL_FUNCTION (t));
14306   else if (code == TEMPLATE_PARM_INDEX)
14307     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14308   else if (TREE_CODE_CLASS (code) == 'd')
14309     {
14310       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14311
14312       if (ld)
14313         {
14314           ggc_mark (ld);
14315           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14316             ggc_mark_tree (ld->decl_flags.u2.access);
14317           ggc_mark_tree (ld->decl_flags.context);
14318           if (TREE_CODE (t) != NAMESPACE_DECL)
14319             ggc_mark_tree (ld->decl_flags.u.template_info);
14320           else
14321             mark_binding_level (&NAMESPACE_LEVEL (t));
14322           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14323             {
14324               ggc_mark_tree (ld->main_decl_variant);
14325               ggc_mark_tree (ld->befriending_classes);
14326               ggc_mark_tree (ld->saved_tree);
14327               if (TREE_CODE (t) == TYPE_DECL)
14328                 ggc_mark_tree (ld->u.sorted_fields);
14329               else if (TREE_CODE (t) == FUNCTION_DECL
14330                        && !DECL_PENDING_INLINE_P (t))
14331                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14332             }
14333         }
14334     }
14335   else if (TREE_CODE_CLASS (code) == 't')
14336     {
14337       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14338
14339       if (lt && !(TREE_CODE (t) == POINTER_TYPE 
14340                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14341         {
14342           ggc_mark (lt);
14343           ggc_mark_tree (lt->vfields);
14344           ggc_mark_tree (lt->vbases);
14345           ggc_mark_tree (lt->tags);
14346           ggc_mark_tree (lt->search_slot);
14347           ggc_mark_tree (lt->size);
14348           ggc_mark_tree (lt->abstract_virtuals);
14349           ggc_mark_tree (lt->friend_classes);
14350           ggc_mark_tree (lt->rtti);
14351           ggc_mark_tree (lt->methods);
14352           ggc_mark_tree (lt->template_info);
14353           ggc_mark_tree (lt->befriending_classes);
14354         }
14355       else if (lt)
14356         /* In the case of pointer-to-member function types, the
14357            TYPE_LANG_SPECIFIC is really just a tree.  */
14358         ggc_mark_tree ((tree) lt);
14359     }
14360 }
14361