OSDN Git Service

* cp-tree.h (language_function): Remove x_last_dtor_insn and
[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 /* If original DECL_RESULT of current function was a register,
258    but due to being an addressable named return value, would up
259    on the stack, this variable holds the named return value's
260    original location.  */
261
262 #define original_result_rtx cp_function_chain->x_result_rtx
263
264 struct named_label_list
265 {
266   struct binding_level *binding_level;
267   tree names_in_scope;
268   tree label_decl;
269   const char *filename_o_goto;
270   int lineno_o_goto;
271   struct named_label_list *next;
272 };
273
274 /* Used only for jumps to as-yet undefined labels, since jumps to
275    defined labels can have their validity checked by stmt.c.  */
276
277 #define named_label_uses cp_function_chain->x_named_label_uses
278
279 /* A list of objects which have constructors or destructors
280    which reside in the global scope.  The decl is stored in
281    the TREE_VALUE slot and the initializer is stored
282    in the TREE_PURPOSE slot.  */
283 tree static_aggregates;
284
285 /* -- end of C++ */
286
287 /* A node for the integer constants 2, and 3.  */
288
289 tree integer_two_node, integer_three_node;
290
291 /* While defining an enum type, this is 1 plus the last enumerator
292    constant value.  */
293
294 static tree enum_next_value;
295
296 /* Nonzero means that there was overflow computing enum_next_value.  */
297
298 static int enum_overflow;
299
300 /* Parsing a function declarator leaves here a chain of structure
301    and enum types declared in the parmlist.  */
302
303 static tree last_function_parm_tags;
304
305 /* Similar, for last_function_parm_tags.  */
306 tree last_function_parms;
307 static tree current_function_parm_tags;
308
309 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
310    that have names.  Here so we can clear out their names' definitions
311    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
312    TREE_PURPOSE is the previous binding of the label.  */
313
314 #define named_labels cp_function_chain->x_named_labels
315
316 /* The FUNCTION_DECL for the function currently being compiled,
317    or 0 if between functions.  */
318 tree current_function_decl;
319
320 /* Set to 0 at beginning of a function definition, and whenever
321    a label (case or named) is defined.  Set to value of expression
322    returned from function when that value can be transformed into
323    a named return value.  */
324
325 tree current_function_return_value;
326
327 /* Nonzero means give `double' the same size as `float'.  */
328
329 extern int flag_short_double;
330
331 /* Nonzero means don't recognize any builtin functions.  */
332
333 extern int flag_no_builtin;
334
335 /* Nonzero means don't recognize the non-ANSI builtin functions.
336    -ansi sets this.  */
337
338 extern int flag_no_nonansi_builtin;
339
340 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
341    objects.  */
342 extern int flag_huge_objects;
343
344 /* Nonzero if we want to conserve space in the .o files.  We do this
345    by putting uninitialized data and runtime initialized data into
346    .common instead of .data at the expense of not flagging multiple
347    definitions.  */
348 extern int flag_conserve_space;
349 \f
350 /* C and C++ flags are in decl2.c.  */
351
352 /* Flag used when debugging spew.c */
353
354 extern int spew_debug;
355
356 /* A expression of value 0 with the same precision as a sizetype
357    node, but signed.  */
358 tree signed_size_zero_node;
359
360 /* The name of the anonymous namespace, throughout this translation
361    unit.  */
362 tree anonymous_namespace_name;
363
364 \f
365 /* For each binding contour we allocate a binding_level structure
366    which records the names defined in that contour.
367    Contours include:
368     0) the global one
369     1) one for each function definition,
370        where internal declarations of the parameters appear.
371     2) one for each compound statement,
372        to record its declarations.
373
374    The current meaning of a name can be found by searching the levels
375    from the current one out to the global one.
376
377    Off to the side, may be the class_binding_level.  This exists only
378    to catch class-local declarations.  It is otherwise nonexistent.
379
380    Also there may be binding levels that catch cleanups that must be
381    run when exceptions occur.  Thus, to see whether a name is bound in
382    the current scope, it is not enough to look in the
383    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
384    instead.  */
385
386 /* Note that the information in the `names' component of the global contour
387    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
388
389 struct binding_level
390   {
391     /* A chain of _DECL nodes for all variables, constants, functions,
392        and typedef types.  These are in the reverse of the order
393        supplied.  There may be OVERLOADs on this list, too, but they
394        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
395     tree names;
396
397     /* A list of structure, union and enum definitions, for looking up
398        tag names.
399        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
400        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
401        or ENUMERAL_TYPE node.
402
403        C++: the TREE_VALUE nodes can be simple types for
404        component_bindings.  */
405     tree tags;
406
407     /* A list of USING_DECL nodes. */
408     tree usings;
409
410     /* A list of used namespaces. PURPOSE is the namespace,
411        VALUE the common ancestor with this binding_level's namespace. */
412     tree using_directives;
413
414     /* If this binding level is the binding level for a class, then
415        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
416        is the name of an entity bound in the class; the TREE_VALUE is
417        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
418        when leaving class scope, we can restore the
419        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
420        the DECL bound by this name in the class.  */
421     tree class_shadowed;
422
423     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
424        is used for all binding levels.  */
425     tree type_shadowed;
426
427     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
428        label in this scope.  The TREE_PURPOSE is the previous value of
429        the IDENTIFIER_LABEL VALUE.  */
430     tree shadowed_labels;
431
432     /* For each level (except not the global one),
433        a chain of BLOCK nodes for all the levels
434        that were entered and exited one level down.  */
435     tree blocks;
436
437     /* The BLOCK node for this level, if one has been preallocated.
438        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
439     tree this_block;
440
441     /* The binding level which this one is contained in (inherits from).  */
442     struct binding_level *level_chain;
443
444     /* List of decls in `names' that have incomplete
445        structure or union types.  */
446     tree incomplete;
447
448     /* List of VAR_DECLS saved from a previous for statement.
449        These would be dead in ANSI-conforming code, but might
450        be referenced in ARM-era code.  These are stored in a
451        TREE_LIST; the TREE_VALUE is the actual declaration.  */
452     tree dead_vars_from_for;
453
454     /* 1 for the level that holds the parameters of a function.
455        2 for the level that holds a class declaration.
456        3 for levels that hold parameter declarations.  */
457     unsigned parm_flag : 4;
458
459     /* 1 means make a BLOCK for this level regardless of all else.
460        2 for temporary binding contours created by the compiler.  */
461     unsigned keep : 3;
462
463     /* Nonzero if this level "doesn't exist" for tags.  */
464     unsigned tag_transparent : 1;
465
466     /* Nonzero if this level can safely have additional
467        cleanup-needing variables added to it.  */
468     unsigned more_cleanups_ok : 1;
469     unsigned have_cleanups : 1;
470
471     /* Nonzero if this level is for storing the decls for template
472        parameters and generic decls; these decls will be discarded and
473        replaced with a TEMPLATE_DECL.  */
474     unsigned pseudo_global : 1;
475
476     /* This is set for a namespace binding level.  */
477     unsigned namespace_p : 1;
478
479     /* True if this level is that of a for-statement where we need to
480        worry about ambiguous (ARM or ANSI) scope rules.  */
481     unsigned is_for_scope : 1;
482
483     /* True if this level corresponds to an EH region, as for a try block.  */
484     unsigned eh_region : 1;
485
486     /* One bit left for this word.  */
487
488 #if defined(DEBUG_CP_BINDING_LEVELS)
489     /* Binding depth at which this level began.  */
490     unsigned binding_depth;
491 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
492   };
493
494 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
495   
496 /* The binding level currently in effect.  */
497
498 #define current_binding_level                   \
499   (current_function                             \
500    ? cp_function_chain->bindings                \
501    : scope_chain->bindings)
502
503 /* The binding level of the current class, if any.  */
504
505 #define class_binding_level scope_chain->class_bindings
506
507 /* A chain of binding_level structures awaiting reuse.  */
508
509 static struct binding_level *free_binding_level;
510
511 /* The outermost binding level, for names of file scope.
512    This is created when the compiler is started and exists
513    through the entire run.  */
514
515 static struct binding_level *global_binding_level;
516
517 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
518
519 static int keep_next_level_flag;
520
521 #if defined(DEBUG_CP_BINDING_LEVELS)
522 static int binding_depth = 0;
523 static int is_class_level = 0;
524
525 static void
526 indent ()
527 {
528   register unsigned i;
529
530   for (i = 0; i < binding_depth*2; i++)
531     putc (' ', stderr);
532 }
533 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
534
535 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
536
537 static void
538 push_binding_level (newlevel, tag_transparent, keep)
539      struct binding_level *newlevel;
540      int tag_transparent, keep;
541 {
542   /* Add this level to the front of the chain (stack) of levels that
543      are active.  */
544   bzero ((char*) newlevel, sizeof (struct binding_level));
545   newlevel->level_chain = current_binding_level;
546   current_binding_level = newlevel;
547   newlevel->tag_transparent = tag_transparent;
548   newlevel->more_cleanups_ok = 1;
549
550   /* We are called before expand_start_bindings, but after
551      expand_eh_region_start for a try block; so we check this now,
552      before the EH block is covered up.  */
553   newlevel->eh_region = is_eh_region ();
554
555   newlevel->keep = keep;
556 #if defined(DEBUG_CP_BINDING_LEVELS)
557   newlevel->binding_depth = binding_depth;
558   indent ();
559   fprintf (stderr, "push %s level 0x%08x line %d\n",
560            (is_class_level) ? "class" : "block", newlevel, lineno);
561   is_class_level = 0;
562   binding_depth++;
563 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
564 }
565
566 /* Find the innermost enclosing class scope, and reset
567    CLASS_BINDING_LEVEL appropriately.  */
568
569 static void
570 find_class_binding_level ()
571 {
572   struct binding_level *level = current_binding_level;
573
574   while (level && level->parm_flag != 2)
575     level = level->level_chain;
576   if (level && level->parm_flag == 2)
577     class_binding_level = level;
578   else
579     class_binding_level = 0;
580 }
581
582 static void
583 pop_binding_level ()
584 {
585   if (global_binding_level)
586     {
587       /* Cannot pop a level, if there are none left to pop.  */
588       if (current_binding_level == global_binding_level)
589         my_friendly_abort (123);
590     }
591   /* Pop the current level, and free the structure for reuse.  */
592 #if defined(DEBUG_CP_BINDING_LEVELS)
593   binding_depth--;
594   indent ();
595   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
596           (is_class_level) ? "class" : "block",
597           current_binding_level, lineno);
598   if (is_class_level != (current_binding_level == class_binding_level))
599     {
600       indent ();
601       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
602     }
603   is_class_level = 0;
604 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
605   {
606     register struct binding_level *level = current_binding_level;
607     current_binding_level = current_binding_level->level_chain;
608     level->level_chain = free_binding_level;
609 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
610     if (level->binding_depth != binding_depth)
611       abort ();
612 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
613     free_binding_level = level;
614     find_class_binding_level ();
615   }
616 }
617
618 static void
619 suspend_binding_level ()
620 {
621   if (class_binding_level)
622     current_binding_level = class_binding_level;
623
624   if (global_binding_level)
625     {
626       /* Cannot suspend a level, if there are none left to suspend.  */
627       if (current_binding_level == global_binding_level)
628         my_friendly_abort (123);
629     }
630   /* Suspend the current level.  */
631 #if defined(DEBUG_CP_BINDING_LEVELS)
632   binding_depth--;
633   indent ();
634   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
635           (is_class_level) ? "class" : "block",
636           current_binding_level, lineno);
637   if (is_class_level != (current_binding_level == class_binding_level))
638     {
639       indent ();
640       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
641     }
642   is_class_level = 0;
643 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
644   current_binding_level = current_binding_level->level_chain;
645   find_class_binding_level ();
646 }
647
648 static void
649 resume_binding_level (b)
650      struct binding_level *b;
651 {
652   /* Resuming binding levels is meant only for namespaces,
653      and those cannot nest into classes. */
654   my_friendly_assert(!class_binding_level, 386);
655   /* Also, resuming a non-directly nested namespace is a no-no.  */
656   my_friendly_assert(b->level_chain == current_binding_level, 386);
657   current_binding_level = b;
658 #if defined(DEBUG_CP_BINDING_LEVELS)
659   b->binding_depth = binding_depth;
660   indent ();
661   fprintf (stderr, "resume %s level 0x%08x line %d\n",
662            (is_class_level) ? "class" : "block", b, lineno);
663   is_class_level = 0;
664   binding_depth++;
665 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
666 }
667 \f
668 /* Create a new `struct binding_level'.  */
669
670 static
671 struct binding_level *
672 make_binding_level ()
673 {
674   /* NOSTRICT */
675   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
676 }
677
678 /* Nonzero if we are currently in the global binding level.  */
679
680 int
681 global_bindings_p ()
682 {
683   return current_binding_level == global_binding_level;
684 }
685
686 /* Return the innermost binding level that is not for a class scope.  */
687
688 static struct binding_level *
689 innermost_nonclass_level ()
690 {
691   struct binding_level *b;
692
693   b = current_binding_level;
694   while (b->parm_flag == 2)
695     b = b->level_chain;
696
697   return b;
698 }
699
700 /* Nonzero if we are currently in a toplevel binding level.  This
701    means either the global binding level or a namespace in a toplevel
702    binding level.  Since there are no non-toplevel namespace levels,
703    this really means any namespace or pseudo-global level.  We also
704    include a class whose context is toplevel.  */
705
706 int
707 toplevel_bindings_p ()
708 {
709   struct binding_level *b = innermost_nonclass_level ();
710
711   return b->namespace_p || b->pseudo_global;
712 }
713
714 /* Nonzero if this is a namespace scope, or if we are defining a class
715    which is itself at namespace scope, or whose enclosing class is
716    such a class, etc.  */
717
718 int
719 namespace_bindings_p ()
720 {
721   struct binding_level *b = innermost_nonclass_level ();
722
723   return b->namespace_p;
724 }
725
726 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
727    unconditionally.  Otherwise, use the normal logic to decide whether
728    or not to create a BLOCK.  */
729
730 void
731 keep_next_level (keep)
732      int keep;
733 {
734   keep_next_level_flag = keep;
735 }
736
737 /* Nonzero if the current level needs to have a BLOCK made.  */
738
739 int
740 kept_level_p ()
741 {
742   return (current_binding_level->blocks != NULL_TREE
743           || current_binding_level->keep
744           || current_binding_level->names != NULL_TREE
745           || (current_binding_level->tags != NULL_TREE
746               && !current_binding_level->tag_transparent));
747 }
748
749 void
750 declare_pseudo_global_level ()
751 {
752   current_binding_level->pseudo_global = 1;
753 }
754
755 static void
756 declare_namespace_level ()
757 {
758   current_binding_level->namespace_p = 1;
759 }
760
761 int
762 pseudo_global_level_p ()
763 {
764   return current_binding_level->pseudo_global;
765 }
766
767 void
768 set_class_shadows (shadows)
769      tree shadows;
770 {
771   class_binding_level->class_shadowed = shadows;
772 }
773
774 /* Enter a new binding level.
775    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
776    not for that of tags.  */
777
778 void
779 pushlevel (tag_transparent)
780      int tag_transparent;
781 {
782   struct binding_level *newlevel;
783
784   if (current_function && !doing_semantic_analysis_p ())
785     return;
786
787   /* Reuse or create a struct for this binding level.  */
788 #if defined(DEBUG_CP_BINDING_LEVELS)
789   if (0)
790 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
791   if (free_binding_level)
792 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
793     {
794       newlevel = free_binding_level;
795       free_binding_level = free_binding_level->level_chain;
796     }
797   else
798     newlevel = make_binding_level ();
799
800   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
801   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
802   keep_next_level_flag = 0;
803 }
804
805 void
806 note_level_for_for ()
807 {
808   current_binding_level->is_for_scope = 1;
809 }
810
811 /* For a binding between a name and an entity at a block scope,
812    this is the `struct binding_level' for the block.  */
813 #define BINDING_LEVEL(NODE) \
814    (((struct tree_binding*)NODE)->scope.level)
815
816 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
817    level at which this declaration is being bound.  */
818
819 static void
820 push_binding (id, decl, level)
821      tree id;
822      tree decl;
823      struct binding_level* level;
824 {
825   tree binding;
826
827   binding = make_node (CPLUS_BINDING);
828
829   /* Now, fill in the binding information.  */
830   BINDING_VALUE (binding) = decl;
831   BINDING_TYPE (binding) = NULL_TREE;
832   BINDING_LEVEL (binding) = level;
833   INHERITED_VALUE_BINDING_P (binding) = 0;
834   LOCAL_BINDING_P (binding) = (level != class_binding_level);
835   BINDING_HAS_LEVEL_P (binding) = 1;
836
837   /* And put it on the front of the list of bindings for ID.  */
838   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
839   IDENTIFIER_BINDING (id) = binding;
840 }
841
842 /* ID is already bound in the current scope.  But, DECL is an
843    additional binding for ID in the same scope.  This is the `struct
844    stat' hack whereby a non-typedef class-name or enum-name can be
845    bound at the same level as some other kind of entity.  It's the
846    responsibility of the caller to check that inserting this name is
847    legal here.  Returns nonzero if the new binding was successful.  */
848 static int
849 add_binding (id, decl)
850      tree id;
851      tree decl;
852 {
853   tree binding = IDENTIFIER_BINDING (id);
854   int ok = 1;
855
856   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
857     /* The new name is the type name.  */
858     BINDING_TYPE (binding) = decl;
859   else if (!BINDING_VALUE (binding))
860     /* This situation arises when push_class_level_binding moves an
861        inherited type-binding out of the way to make room for a new
862        value binding.  */
863     BINDING_VALUE (binding) = decl;
864   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
865            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
866     {
867       /* The old binding was a type name.  It was placed in
868          BINDING_VALUE because it was thought, at the point it was
869          declared, to be the only entity with such a name.  Move the
870          type name into the type slot; it is now hidden by the new
871          binding.  */
872       BINDING_TYPE (binding) = BINDING_VALUE (binding);
873       BINDING_VALUE (binding) = decl;
874       INHERITED_VALUE_BINDING_P (binding) = 0;
875     }
876   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
877            && TREE_CODE (decl) == TYPE_DECL
878            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
879            && same_type_p (TREE_TYPE (decl),
880                            TREE_TYPE (BINDING_VALUE (binding))))
881     /* We have two typedef-names, both naming the same type to have
882        the same name.  This is OK because of:
883
884          [dcl.typedef]
885
886          In a given scope, a typedef specifier can be used to redefine
887          the name of any type declared in that scope to refer to the
888          type to which it already refers.  */
889     ok = 0;
890   else
891     {
892       cp_error ("declaration of `%#D'", decl);
893       cp_error_at ("conflicts with previous declaration `%#D'",
894                    BINDING_VALUE (binding));
895       ok = 0;
896     }
897
898   return ok;
899 }
900
901 /* Add DECL to the list of things declared in B.  */
902
903 static void
904 add_decl_to_level (decl, b)
905      tree decl;
906      struct binding_level *b;
907 {
908   /* We build up the list in reverse order, and reverse it later if
909      necessary.  */
910   TREE_CHAIN (decl) = b->names;
911   b->names = decl;
912 }
913
914 /* Bind DECL to ID in the current_binding_level, assumed to be a local
915    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
916    doesn't really belong to this binding level, that it got here
917    through a using-declaration.  */
918
919 void
920 push_local_binding (id, decl, flags)
921      tree id;
922      tree decl;
923      int flags;
924 {
925   struct binding_level *b;
926
927   /* Skip over any local classes.  This makes sense if we call
928      push_local_binding with a friend decl of a local class.  */
929   b = current_binding_level;
930   while (b->parm_flag == 2)
931     b = b->level_chain;
932
933   if (lookup_name_current_level (id))
934     {
935       /* Supplement the existing binding.  */
936       if (!add_binding (id, decl))
937         /* It didn't work.  Something else must be bound at this
938            level.  Do not add DECL to the list of things to pop
939            later.  */
940         return;
941     }
942   else
943     /* Create a new binding.  */
944     push_binding (id, decl, b);
945
946   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
947     /* We must put the OVERLOAD into a TREE_LIST since the
948        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
949        decls that got here through a using-declaration.  */
950     decl = build_tree_list (NULL_TREE, decl);
951
952   /* And put DECL on the list of things declared by the current
953      binding level.  */
954   add_decl_to_level (decl, b);
955 }
956
957 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
958    binding was successful.  */
959
960 int
961 push_class_binding (id, decl)
962      tree id;
963      tree decl;
964 {
965   int result = 1;
966   tree binding = IDENTIFIER_BINDING (id);
967   tree context;
968
969   /* Note that we declared this value so that we can issue an error if
970      this an illegal redeclaration of a name already used for some
971      other purpose.  */
972   note_name_declared_in_class (id, decl);
973
974   if (binding && BINDING_LEVEL (binding) == class_binding_level)
975     /* Supplement the existing binding.  */
976     result = add_binding (id, decl);
977   else
978     /* Create a new binding.  */
979     push_binding (id, decl, class_binding_level);
980
981   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
982      class-level declaration.  Note that we do not use DECL here
983      because of the possibility of the `struct stat' hack; if DECL is
984      a class-name or enum-name we might prefer a field-name, or some
985      such.  */
986   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
987
988   /* If this is a binding from a base class, mark it as such.  */
989   binding = IDENTIFIER_BINDING (id);
990   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
991     {
992       /* Any implicit typename must be from a base-class.  The
993          context for an implicit typename declaration is always
994          the derived class in which the lookup was done, so the checks
995          based on the context of DECL below will not trigger.  */
996       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
997         INHERITED_VALUE_BINDING_P (binding) = 1;
998       else
999         {
1000           if (TREE_CODE (decl) == OVERLOAD)
1001             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1002           else
1003             {
1004               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1005                                   0);
1006               context = DECL_REAL_CONTEXT (decl);
1007             }
1008
1009           if (is_properly_derived_from (current_class_type, context))
1010             INHERITED_VALUE_BINDING_P (binding) = 1;
1011           else
1012             INHERITED_VALUE_BINDING_P (binding) = 0;
1013         }
1014     }
1015   else if (BINDING_VALUE (binding) == decl)
1016     /* We only encounter a TREE_LIST when push_class_decls detects an
1017        ambiguity.  Such an ambiguity can be overridden by a definition
1018        in this class.  */
1019     INHERITED_VALUE_BINDING_P (binding) = 1;
1020
1021   return result;
1022 }
1023
1024 /* Remove the binding for DECL which should be the innermost binding
1025    for ID.  */
1026
1027 static void 
1028 pop_binding (id, decl) 
1029      tree id;
1030      tree decl;
1031 {
1032   tree binding;
1033     
1034   if (id == NULL_TREE)
1035     /* It's easiest to write the loops that call this function without
1036        checking whether or not the entities involved have names.  We
1037        get here for such an entity.  */
1038     return;
1039
1040   /* Get the innermost binding for ID.  */
1041   binding = IDENTIFIER_BINDING (id);
1042
1043   /* The name should be bound.  */
1044   my_friendly_assert (binding != NULL_TREE, 0);
1045
1046   /* The DECL will be either the ordinary binding or the type
1047      binding for this identifier.  Remove that binding.  */
1048   if (BINDING_VALUE (binding) == decl)
1049     BINDING_VALUE (binding) = NULL_TREE;
1050   else if (BINDING_TYPE (binding) == decl)
1051     BINDING_TYPE (binding) = NULL_TREE;
1052   else
1053     my_friendly_abort (0);
1054
1055   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1056     /* We're completely done with the innermost binding for this
1057        identifier.  Unhook it from the list of bindings.  */
1058     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1059 }
1060
1061 /* When a label goes out of scope, check to see if that label was used
1062    in a valid manner, and issue any appropriate warnings or errors.  */
1063
1064 static void
1065 pop_label (link)
1066      tree link;
1067 {
1068   tree label = TREE_VALUE (link);
1069
1070   if (!processing_template_decl && doing_semantic_analysis_p ())
1071     {
1072       if (DECL_INITIAL (label) == NULL_TREE)
1073         {
1074           cp_error_at ("label `%D' used but not defined", label);
1075           /* Avoid crashing later.  */
1076           define_label (input_filename, 1, DECL_NAME (label));
1077         }
1078       else if (warn_unused && !TREE_USED (label))
1079         cp_warning_at ("label `%D' defined but not used", label);
1080     }
1081
1082   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1083 }
1084
1085 /* At the end of a function, all labels declared within the fucntion
1086    go out of scope.  BLOCK is the top-level block for the 
1087    function.  */
1088
1089 static void
1090 pop_labels (block)
1091      tree block;
1092 {
1093   tree link;
1094
1095   /* Clear out the definitions of all label names, since their scopes
1096      end here.  */
1097   for (link = named_labels; link; link = TREE_CHAIN (link))
1098     {
1099       pop_label (link);
1100       /* Put the labels into the "variables" of the top-level block,
1101          so debugger can see them.  */
1102       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1103       BLOCK_VARS (block) = TREE_VALUE (link);
1104     }
1105
1106   named_labels = NULL_TREE;
1107 }
1108
1109 /* Exit a binding level.
1110    Pop the level off, and restore the state of the identifier-decl mappings
1111    that were in effect when this level was entered.
1112
1113    If KEEP == 1, this level had explicit declarations, so
1114    and create a "block" (a BLOCK node) for the level
1115    to record its declarations and subblocks for symbol table output.
1116
1117    If FUNCTIONBODY is nonzero, this level is the body of a function,
1118    so create a block as if KEEP were set and also clear out all
1119    label names.
1120
1121    If REVERSE is nonzero, reverse the order of decls before putting
1122    them into the BLOCK.  */
1123
1124 tree
1125 poplevel (keep, reverse, functionbody)
1126      int keep;
1127      int reverse;
1128      int functionbody;
1129 {
1130   register tree link;
1131   /* The chain of decls was accumulated in reverse order.
1132      Put it into forward order, just for cleanliness.  */
1133   tree decls;
1134   int tmp = functionbody;
1135   int real_functionbody;
1136   tree tags;
1137   tree subblocks;
1138   tree block = NULL_TREE;
1139   tree decl;
1140   int block_previously_created;
1141   int leaving_for_scope;
1142
1143   if (current_function && !doing_semantic_analysis_p ())
1144     return NULL_TREE;
1145
1146   my_friendly_assert (current_binding_level->parm_flag != 2,
1147                       19990916);
1148
1149   real_functionbody = (current_binding_level->keep == 2
1150                        ? ((functionbody = 0), tmp) : functionbody);
1151   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1152   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1153
1154   my_friendly_assert (!current_binding_level->class_shadowed,
1155                       19990414);
1156
1157   /* We used to use KEEP == 2 to indicate that the new block should go
1158      at the beginning of the list of blocks at this binding level,
1159      rather than the end.  This hack is no longer used.  */
1160   my_friendly_assert (keep == 0 || keep == 1, 0);
1161
1162   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1163                       (HOST_WIDE_INT) current_binding_level->level_chain,
1164                       current_binding_level->parm_flag,
1165                       current_binding_level->keep);
1166
1167   if (current_binding_level->keep == 1)
1168     keep = 1;
1169
1170   /* Get the decls in the order they were written.
1171      Usually current_binding_level->names is in reverse order.
1172      But parameter decls were previously put in forward order.  */
1173
1174   if (reverse)
1175     current_binding_level->names
1176       = decls = nreverse (current_binding_level->names);
1177   else
1178     decls = current_binding_level->names;
1179
1180   /* Output any nested inline functions within this block
1181      if they weren't already output.  */
1182
1183   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1184     if (TREE_CODE (decl) == FUNCTION_DECL
1185         && ! TREE_ASM_WRITTEN (decl)
1186         && DECL_INITIAL (decl) != NULL_TREE
1187         && TREE_ADDRESSABLE (decl)
1188         && decl_function_context (decl) == current_function_decl)
1189       {
1190         /* If this decl was copied from a file-scope decl
1191            on account of a block-scope extern decl,
1192            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1193         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1194           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1195         else
1196           {
1197             push_function_context ();
1198             output_inline_function (decl);
1199             pop_function_context ();
1200           }
1201       }
1202
1203   /* If there were any declarations or structure tags in that level,
1204      or if this level is a function body,
1205      create a BLOCK to record them for the life of this function.  */
1206
1207   block = NULL_TREE;
1208   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1209   if (block_previously_created)
1210     block = current_binding_level->this_block;
1211   else if (keep == 1 || functionbody)
1212     block = make_node (BLOCK);
1213   if (block != NULL_TREE)
1214     {
1215       if (block_previously_created)
1216         {
1217           if (decls || tags || subblocks)
1218             {
1219               if (BLOCK_VARS (block))
1220                 warning ("internal compiler error: debugging info corrupted");
1221
1222               BLOCK_VARS (block) = decls;
1223
1224               /* We can have previous subblocks and new subblocks when
1225                  doing fixup_gotos with complex cleanups.  We chain the new
1226                  subblocks onto the end of any pre-existing subblocks.  */
1227               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1228                                                  subblocks);
1229             }
1230         }
1231       else
1232         {
1233           BLOCK_VARS (block) = decls;
1234           BLOCK_SUBBLOCKS (block) = subblocks;
1235         }
1236     }
1237
1238   /* In each subblock, record that this is its superior.  */
1239
1240   if (keep >= 0)
1241     for (link = subblocks; link; link = TREE_CHAIN (link))
1242       BLOCK_SUPERCONTEXT (link) = block;
1243
1244   /* We still support the old for-scope rules, whereby the variables
1245      in a for-init statement were in scope after the for-statement
1246      ended.  We only use the new rules in flag_new_for_scope is
1247      nonzero.  */
1248   leaving_for_scope 
1249     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1250
1251   /* Remove declarations for all the DECLs in this level.  */
1252   for (link = decls; link; link = TREE_CHAIN (link))
1253     {
1254       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1255         {
1256           tree outer_binding 
1257             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1258           tree ns_binding;
1259
1260           if (!outer_binding)
1261             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1262           else
1263             ns_binding = NULL_TREE;
1264
1265           if (outer_binding 
1266               && (BINDING_LEVEL (outer_binding) 
1267                   == current_binding_level->level_chain))
1268             /* We have something like:
1269                
1270                  int i;
1271                  for (int i; ;);
1272                  
1273                and we are leaving the `for' scope.  There's no reason to
1274                keep the binding of the inner `i' in this case.  */
1275             pop_binding (DECL_NAME (link), link);
1276           else if ((outer_binding 
1277                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1278                         == TYPE_DECL))
1279                    || (ns_binding 
1280                        && TREE_CODE (ns_binding) == TYPE_DECL))
1281             /* Here, we have something like:
1282
1283                  typedef int I;
1284
1285                  void f () {
1286                    for (int I; ;);
1287                  }
1288
1289                We must pop the for-scope binding so we know what's a
1290                type and what isn't.  */
1291             pop_binding (DECL_NAME (link), link);
1292           else
1293             {
1294               /* Mark this VAR_DECL as dead so that we can tell we left it
1295                  there only for backward compatibility.  */
1296               DECL_DEAD_FOR_LOCAL (link) = 1;
1297               
1298               /* Keep track of what should of have happenned when we
1299                  popped the binding.  */
1300               if (outer_binding && BINDING_VALUE (outer_binding))
1301                 DECL_SHADOWED_FOR_VAR (link) 
1302                   = BINDING_VALUE (outer_binding);
1303
1304               /* Add it to the list of dead variables in the next
1305                  outermost binding to that we can remove these when we
1306                  leave that binding.  */
1307               current_binding_level->level_chain->dead_vars_from_for
1308                 = tree_cons (NULL_TREE, link,
1309                              current_binding_level->level_chain->
1310                              dead_vars_from_for);
1311
1312               /* Although we don't pop the CPLUS_BINDING, we do clear
1313                  its BINDING_LEVEL since the level is going away now.  */
1314               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1315                 = 0;
1316             }
1317         }
1318       else 
1319         {
1320           /* Remove the binding.  */
1321           decl = link;
1322           if (TREE_CODE (decl) == TREE_LIST)
1323             decl = TREE_VALUE (decl);
1324           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1325             pop_binding (DECL_NAME (decl), decl);
1326           else if (TREE_CODE (decl) == OVERLOAD)
1327             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1328           else 
1329             my_friendly_abort (0);
1330         }
1331     }
1332
1333   /* Remove declarations for any `for' variables from inner scopes
1334      that we kept around.  */
1335   for (link = current_binding_level->dead_vars_from_for;
1336        link; link = TREE_CHAIN (link))
1337     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1338
1339   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1340   for (link = current_binding_level->type_shadowed;
1341        link; link = TREE_CHAIN (link))
1342     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1343
1344   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1345   for (link = current_binding_level->shadowed_labels;
1346        link; 
1347        link = TREE_CHAIN (link))
1348     pop_label (link);
1349
1350   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1351      list if a `using' declaration put them there.  The debugging
1352      back-ends won't understand OVERLOAD, so we remove them here.
1353      Because the BLOCK_VARS are (temporarily) shared with
1354      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1355      popped all the bindings.  */
1356   if (block)
1357     {
1358       tree* d;
1359
1360       for (d = &BLOCK_VARS (block); *d; )
1361         {
1362           if (TREE_CODE (*d) == TREE_LIST)
1363             *d = TREE_CHAIN (*d);
1364           else
1365             d = &TREE_CHAIN (*d);
1366         }
1367     }
1368
1369   /* If the level being exited is the top level of a function,
1370      check over all the labels.  */
1371   if (functionbody)
1372     {
1373       /* Since this is the top level block of a function, the vars are
1374          the function's parameters.  Don't leave them in the BLOCK
1375          because they are found in the FUNCTION_DECL instead.  */
1376       BLOCK_VARS (block) = 0;
1377       pop_labels (block);
1378     }
1379
1380   /* Any uses of undefined labels now operate under constraints
1381      of next binding contour.  */
1382   if (current_function)
1383     {
1384       struct binding_level *level_chain;
1385       level_chain = current_binding_level->level_chain;
1386       if (level_chain)
1387         {
1388           struct named_label_list *labels;
1389           for (labels = named_label_uses; labels; labels = labels->next)
1390             if (labels->binding_level == current_binding_level)
1391               {
1392                 labels->binding_level = level_chain;
1393                 labels->names_in_scope = level_chain->names;
1394               }
1395         }
1396     }
1397
1398   tmp = current_binding_level->keep;
1399
1400   pop_binding_level ();
1401   if (functionbody)
1402     DECL_INITIAL (current_function_decl) = block;
1403   else if (block)
1404     {
1405       if (!block_previously_created)
1406         current_binding_level->blocks
1407           = chainon (current_binding_level->blocks, block);
1408     }
1409   /* If we did not make a block for the level just exited,
1410      any blocks made for inner levels
1411      (since they cannot be recorded as subblocks in that level)
1412      must be carried forward so they will later become subblocks
1413      of something else.  */
1414   else if (subblocks)
1415     current_binding_level->blocks
1416       = chainon (current_binding_level->blocks, subblocks);
1417
1418   /* Take care of compiler's internal binding structures.  */
1419   if (tmp == 2)
1420     {
1421       add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1422       /* Each and every BLOCK node created here in `poplevel' is important
1423          (e.g. for proper debugging information) so if we created one
1424          earlier, mark it as "used".  */
1425       if (block)
1426         TREE_USED (block) = 1;
1427       block = poplevel (keep, reverse, functionbody);
1428     }
1429
1430   /* Each and every BLOCK node created here in `poplevel' is important
1431      (e.g. for proper debugging information) so if we created one
1432      earlier, mark it as "used".  */
1433   if (block)
1434     TREE_USED (block) = 1;
1435   return block;
1436 }
1437
1438 /* Delete the node BLOCK from the current binding level.
1439    This is used for the block inside a stmt expr ({...})
1440    so that the block can be reinserted where appropriate.  */
1441
1442 void
1443 delete_block (block)
1444      tree block;
1445 {
1446   tree t;
1447   if (current_binding_level->blocks == block)
1448     current_binding_level->blocks = TREE_CHAIN (block);
1449   for (t = current_binding_level->blocks; t;)
1450     {
1451       if (TREE_CHAIN (t) == block)
1452         TREE_CHAIN (t) = TREE_CHAIN (block);
1453       else
1454         t = TREE_CHAIN (t);
1455     }
1456   TREE_CHAIN (block) = NULL_TREE;
1457   /* Clear TREE_USED which is always set by poplevel.
1458      The flag is set again if insert_block is called.  */
1459   TREE_USED (block) = 0;
1460 }
1461
1462 /* Insert BLOCK at the end of the list of subblocks of the
1463    current binding level.  This is used when a BIND_EXPR is expanded,
1464    to handle the BLOCK node inside the BIND_EXPR.  */
1465
1466 void
1467 insert_block (block)
1468      tree block;
1469 {
1470   TREE_USED (block) = 1;
1471   current_binding_level->blocks
1472     = chainon (current_binding_level->blocks, block);
1473 }
1474
1475 /* Set the BLOCK node for the innermost scope
1476    (the one we are currently in).  */
1477
1478 void
1479 set_block (block)
1480     register tree block;
1481 {
1482   current_binding_level->this_block = block;
1483 }
1484
1485 /* Do a pushlevel for class declarations.  */
1486
1487 void
1488 pushlevel_class ()
1489 {
1490   register struct binding_level *newlevel;
1491
1492   /* Reuse or create a struct for this binding level.  */
1493 #if defined(DEBUG_CP_BINDING_LEVELS)
1494   if (0)
1495 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1496   if (free_binding_level)
1497 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1498     {
1499       newlevel = free_binding_level;
1500       free_binding_level = free_binding_level->level_chain;
1501     }
1502   else
1503     newlevel = make_binding_level ();
1504
1505 #if defined(DEBUG_CP_BINDING_LEVELS)
1506   is_class_level = 1;
1507 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1508
1509   push_binding_level (newlevel, 0, 0);
1510
1511   class_binding_level = current_binding_level;
1512   class_binding_level->parm_flag = 2;
1513 }
1514
1515 /* ...and a poplevel for class declarations.  */
1516
1517 void
1518 poplevel_class ()
1519 {
1520   register struct binding_level *level = class_binding_level;
1521   tree shadowed;
1522
1523   my_friendly_assert (level != 0, 354);
1524   
1525   /* If we're leaving a toplevel class, don't bother to do the setting
1526      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1527      shouldn't even be used when current_class_type isn't set, and second,
1528      if we don't touch it here, we're able to use the cache effect if the
1529      next time we're entering a class scope, it is the same class.  */
1530   if (current_class_depth != 1)
1531     {
1532       struct binding_level* b;
1533
1534       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1535       for (shadowed = level->class_shadowed;
1536            shadowed;
1537            shadowed = TREE_CHAIN (shadowed))
1538         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1539         
1540       /* Find the next enclosing class, and recreate
1541          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1542       b = level->level_chain;
1543       while (b && b->parm_flag != 2)
1544         b = b->level_chain;
1545
1546       if (b)
1547         for (shadowed = b->class_shadowed; 
1548              shadowed; 
1549              shadowed = TREE_CHAIN (shadowed))
1550           {
1551             tree t;
1552
1553             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1554             while (t && BINDING_LEVEL (t) != b)
1555               t = TREE_CHAIN (t);
1556       
1557             if (t)
1558               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1559                 = BINDING_VALUE (t);
1560           }
1561     }
1562   else
1563     /* Remember to save what IDENTIFIER's were bound in this scope so we
1564        can recover from cache misses.  */
1565     {
1566       previous_class_type = current_class_type;
1567       previous_class_values = class_binding_level->class_shadowed;
1568     }
1569   for (shadowed = level->type_shadowed;
1570        shadowed;
1571        shadowed = TREE_CHAIN (shadowed))
1572     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1573
1574   /* Remove the bindings for all of the class-level declarations.  */
1575   for (shadowed = level->class_shadowed; 
1576        shadowed; 
1577        shadowed = TREE_CHAIN (shadowed))
1578     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1579
1580   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1581                       (HOST_WIDE_INT) class_binding_level->level_chain,
1582                       class_binding_level->parm_flag,
1583                       class_binding_level->keep);
1584
1585   /* Now, pop out of the binding level which we created up in the
1586      `pushlevel_class' routine.  */
1587 #if defined(DEBUG_CP_BINDING_LEVELS)
1588   is_class_level = 1;
1589 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1590
1591   pop_binding_level ();
1592 }
1593
1594 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1595    for any names in enclosing classes.  */
1596
1597 void
1598 clear_identifier_class_values ()
1599 {
1600   tree t;
1601
1602   if (!class_binding_level)
1603     return;
1604
1605   for (t = class_binding_level->class_shadowed;
1606        t;
1607        t = TREE_CHAIN (t))
1608     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1609 }
1610
1611 /* Returns non-zero if T is a virtual function table.  */
1612
1613 int
1614 vtable_decl_p (t, data)
1615      tree t;
1616      void *data ATTRIBUTE_UNUSED;
1617 {
1618   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1619 }
1620
1621 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1622    functions.  */
1623
1624 int
1625 vtype_decl_p (t, data)
1626      tree t;
1627      void *data ATTRIBUTE_UNUSED;
1628 {
1629   return (TREE_CODE (t) == TYPE_DECL
1630           && TREE_TYPE (t) != error_mark_node
1631           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1632           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1633 }
1634
1635 /* Return the declarations that are members of the namespace NS.  */
1636
1637 tree
1638 cp_namespace_decls (ns)
1639      tree ns;
1640 {
1641   return NAMESPACE_LEVEL (ns)->names;
1642 }
1643
1644 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1645    itself, calling F for each.  The DATA is passed to F as well.  */
1646
1647 static int
1648 walk_namespaces_r (namespace, f, data)
1649      tree namespace;
1650      walk_namespaces_fn f;
1651      void *data;
1652 {
1653   tree current;
1654   int result = 0;
1655
1656   result |= (*f) (namespace, data);
1657
1658   for (current = cp_namespace_decls (namespace);
1659        current;
1660        current = TREE_CHAIN (current))
1661     {
1662       if (TREE_CODE (current) != NAMESPACE_DECL
1663           || DECL_NAMESPACE_ALIAS (current))
1664         continue;
1665       if (!DECL_LANG_SPECIFIC (current))
1666         {
1667           /* Hmm. std. */
1668           my_friendly_assert (current == std_node, 393);
1669           continue;
1670         }
1671
1672       /* We found a namespace.  */
1673       result |= walk_namespaces_r (current, f, data);
1674     }
1675
1676   return result;
1677 }
1678
1679 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1680    F as well.  */
1681
1682 int
1683 walk_namespaces (f, data)
1684      walk_namespaces_fn f;
1685      void *data;
1686 {
1687   return walk_namespaces_r (global_namespace, f, data);
1688 }
1689
1690 struct walk_globals_data {
1691   walk_globals_pred p;
1692   walk_globals_fn f;
1693   void *data;
1694 };
1695
1696 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1697    for which P returns non-zero, call F with its address.  If any call
1698    to F returns a non-zero value, return a non-zero value.  */
1699
1700 static int 
1701 walk_globals_r (namespace, data)
1702      tree namespace;
1703      void *data;
1704 {
1705   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1706   walk_globals_pred p = wgd->p;
1707   walk_globals_fn f = wgd->f;
1708   void *d = wgd->data;
1709   tree *t;
1710   int result = 0;
1711
1712   t = &NAMESPACE_LEVEL (namespace)->names;
1713
1714   while (*t)
1715     {
1716       tree glbl = *t;
1717
1718       if ((*p) (glbl, d))
1719         result |= (*f) (t, d);
1720
1721       /* If F changed *T, then *T still points at the next item to
1722          examine.  */
1723       if (*t == glbl)
1724         t = &TREE_CHAIN (*t);
1725     }
1726
1727   return result;
1728 }
1729
1730 /* Walk the global declarations.  Whenever one is found for which P
1731    returns non-zero, call F with its address.  If any call to F
1732    returns a non-zero value, return a non-zero value.  */
1733
1734 int
1735 walk_globals (p, f, data)
1736      walk_globals_pred p;
1737      walk_globals_fn f;
1738      void *data;
1739 {
1740   struct walk_globals_data wgd;
1741   wgd.p = p;
1742   wgd.f = f;
1743   wgd.data = data;
1744
1745   return walk_namespaces (walk_globals_r, &wgd);
1746 }
1747
1748 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1749    DATA is non-NULL, this is the last time we will call
1750    wrapup_global_declarations for this NAMESPACE.  */
1751
1752 int
1753 wrapup_globals_for_namespace (namespace, data)
1754      tree namespace;
1755      void *data;
1756 {
1757   tree globals = cp_namespace_decls (namespace);
1758   int len = list_length (globals);
1759   tree *vec = (tree *) alloca (sizeof (tree) * len);
1760   int i;
1761   int result;
1762   tree decl;
1763   int last_time = (data != 0);
1764
1765   if (last_time && namespace == global_namespace)
1766     /* Let compile_file handle the global namespace.  */
1767     return 0;
1768
1769   /* Process the decls in reverse order--earliest first.
1770      Put them into VEC from back to front, then take out from front.  */
1771   
1772   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1773     vec[len - i - 1] = decl;
1774   
1775   if (last_time)
1776     {
1777       check_global_declarations (vec, len);
1778       return 0;
1779     }
1780
1781   /* Temporarily mark vtables as external.  That prevents
1782      wrapup_global_declarations from writing them out; we must process
1783      them ourselves in finish_vtable_vardecl.  */
1784   for (i = 0; i < len; ++i)
1785     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1786       {
1787         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1788         DECL_EXTERNAL (vec[i]) = 1;
1789       }
1790
1791   /* Write out any globals that need to be output.  */
1792   result = wrapup_global_declarations (vec, len);
1793
1794   /* Undo the hack to DECL_EXTERNAL above.  */
1795   for (i = 0; i < len; ++i)
1796     if (vtable_decl_p (vec[i], /*data=*/0)
1797         && DECL_NOT_REALLY_EXTERN (vec[i]))
1798       {
1799         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1800         DECL_EXTERNAL (vec[i]) = 0;
1801       }
1802
1803   return result;
1804 }
1805
1806 \f
1807 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1808
1809 static void
1810 mark_binding_level (arg)
1811      void *arg;
1812 {
1813   struct binding_level *lvl = *(struct binding_level **)arg;
1814
1815   while (lvl)
1816     {
1817       ggc_mark_tree (lvl->names);
1818       ggc_mark_tree (lvl->tags);
1819       ggc_mark_tree (lvl->usings);
1820       ggc_mark_tree (lvl->using_directives);
1821       ggc_mark_tree (lvl->class_shadowed);
1822       ggc_mark_tree (lvl->type_shadowed);
1823       ggc_mark_tree (lvl->shadowed_labels);
1824       ggc_mark_tree (lvl->blocks);
1825       ggc_mark_tree (lvl->this_block);
1826       ggc_mark_tree (lvl->incomplete);
1827       ggc_mark_tree (lvl->dead_vars_from_for);
1828
1829       lvl = lvl->level_chain;
1830     }
1831 }
1832 \f
1833 /* For debugging.  */
1834 static int no_print_functions = 0;
1835 static int no_print_builtins = 0;
1836
1837 void
1838 print_binding_level (lvl)
1839      struct binding_level *lvl;
1840 {
1841   tree t;
1842   int i = 0, len;
1843   fprintf (stderr, " blocks=");
1844   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1845   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1846            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1847   if (lvl->tag_transparent)
1848     fprintf (stderr, " tag-transparent");
1849   if (lvl->more_cleanups_ok)
1850     fprintf (stderr, " more-cleanups-ok");
1851   if (lvl->have_cleanups)
1852     fprintf (stderr, " have-cleanups");
1853   fprintf (stderr, "\n");
1854   if (lvl->names)
1855     {
1856       fprintf (stderr, " names:\t");
1857       /* We can probably fit 3 names to a line?  */
1858       for (t = lvl->names; t; t = TREE_CHAIN (t))
1859         {
1860           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1861             continue;
1862           if (no_print_builtins
1863               && (TREE_CODE (t) == TYPE_DECL)
1864               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1865             continue;
1866
1867           /* Function decls tend to have longer names.  */
1868           if (TREE_CODE (t) == FUNCTION_DECL)
1869             len = 3;
1870           else
1871             len = 2;
1872           i += len;
1873           if (i > 6)
1874             {
1875               fprintf (stderr, "\n\t");
1876               i = len;
1877             }
1878           print_node_brief (stderr, "", t, 0);
1879           if (t == error_mark_node)
1880             break;
1881         }
1882       if (i)
1883         fprintf (stderr, "\n");
1884     }
1885   if (lvl->tags)
1886     {
1887       fprintf (stderr, " tags:\t");
1888       i = 0;
1889       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1890         {
1891           if (TREE_PURPOSE (t) == NULL_TREE)
1892             len = 3;
1893           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1894             len = 2;
1895           else
1896             len = 4;
1897           i += len;
1898           if (i > 5)
1899             {
1900               fprintf (stderr, "\n\t");
1901               i = len;
1902             }
1903           if (TREE_PURPOSE (t) == NULL_TREE)
1904             {
1905               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1906               fprintf (stderr, ">");
1907             }
1908           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1909             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1910           else
1911             {
1912               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1913               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1914               fprintf (stderr, ">");
1915             }
1916         }
1917       if (i)
1918         fprintf (stderr, "\n");
1919     }
1920   if (lvl->class_shadowed)
1921     {
1922       fprintf (stderr, " class-shadowed:");
1923       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1924         {
1925           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1926         }
1927       fprintf (stderr, "\n");
1928     }
1929   if (lvl->type_shadowed)
1930     {
1931       fprintf (stderr, " type-shadowed:");
1932       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1933         {
1934           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1935         }
1936       fprintf (stderr, "\n");
1937     }
1938 }
1939
1940 void
1941 print_other_binding_stack (stack)
1942      struct binding_level *stack;
1943 {
1944   struct binding_level *level;
1945   for (level = stack; level != global_binding_level; level = level->level_chain)
1946     {
1947       fprintf (stderr, "binding level ");
1948       fprintf (stderr, HOST_PTR_PRINTF, level);
1949       fprintf (stderr, "\n");
1950       print_binding_level (level);
1951     }
1952 }
1953
1954 void
1955 print_binding_stack ()
1956 {
1957   struct binding_level *b;
1958   fprintf (stderr, "current_binding_level=");
1959   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1960   fprintf (stderr, "\nclass_binding_level=");
1961   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
1962   fprintf (stderr, "\nglobal_binding_level=");
1963   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
1964   fprintf (stderr, "\n");
1965   if (class_binding_level)
1966     {
1967       for (b = class_binding_level; b; b = b->level_chain)
1968         if (b == current_binding_level)
1969           break;
1970       if (b)
1971         b = class_binding_level;
1972       else
1973         b = current_binding_level;
1974     }
1975   else
1976     b = current_binding_level;
1977   print_other_binding_stack (b);
1978   fprintf (stderr, "global:\n");
1979   print_binding_level (global_binding_level);
1980 }
1981
1982 /* Namespace binding access routines: The namespace_bindings field of
1983    the identifier is polymorphic, with three possible values:
1984    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
1985    indicating the BINDING_VALUE of global_namespace. */
1986
1987 /* Check whether the a binding for the name to scope is known.
1988    Assumes that the bindings of the name are already a list
1989    of bindings. Returns the binding found, or NULL_TREE. */
1990
1991 static tree
1992 find_binding (name, scope)
1993      tree name;
1994      tree scope;
1995 {
1996   tree iter, prev = NULL_TREE;
1997
1998   scope = ORIGINAL_NAMESPACE (scope);
1999   
2000   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2001        iter = TREE_CHAIN (iter))
2002     {
2003       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2004       if (BINDING_SCOPE (iter) == scope)
2005         {
2006           /* Move binding found to the front of the list, so
2007              subsequent lookups will find it faster. */
2008           if (prev)
2009             {
2010               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2011               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2012               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2013             }
2014           return iter;
2015         }
2016       prev = iter;
2017     }
2018   return NULL_TREE;
2019 }
2020
2021 /* Always returns a binding for name in scope. If the
2022    namespace_bindings is not a list, convert it to one first.
2023    If no binding is found, make a new one. */
2024
2025 tree
2026 binding_for_name (name, scope)
2027      tree name;
2028      tree scope;
2029 {
2030   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2031   tree result;
2032
2033   scope = ORIGINAL_NAMESPACE (scope);
2034   
2035   if (b && TREE_CODE (b) != CPLUS_BINDING)
2036     {
2037       /* Get rid of optimization for global scope. */
2038       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2039       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2040       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2041     }
2042   if (b && (result = find_binding (name, scope)))
2043     return result;
2044   /* Not found, make a new permanent one. */
2045   push_obstacks (&permanent_obstack, &permanent_obstack);
2046   result = make_node (CPLUS_BINDING);
2047   TREE_CHAIN (result) = b;
2048   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2049   BINDING_SCOPE (result) = scope;
2050   BINDING_TYPE (result) = NULL_TREE;
2051   BINDING_VALUE (result) = NULL_TREE;
2052   pop_obstacks ();
2053   return result;
2054 }
2055
2056 /* Return the binding value for name in scope, considering that
2057    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2058
2059 tree
2060 namespace_binding (name, scope)
2061      tree name;
2062      tree scope;
2063 {
2064   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2065   if (b == NULL_TREE)
2066     return NULL_TREE;
2067   if (scope == NULL_TREE)
2068     scope = global_namespace;
2069   if (TREE_CODE (b) != CPLUS_BINDING)
2070     return (scope == global_namespace) ? b : NULL_TREE;
2071   name = find_binding (name,scope);
2072   if (name == NULL_TREE)
2073     return name;
2074   return BINDING_VALUE (name);
2075 }
2076
2077 /* Set the binding value for name in scope. If modifying the binding
2078    of global_namespace is attempted, try to optimize it. */
2079
2080 void
2081 set_namespace_binding (name, scope, val)
2082      tree name;
2083      tree scope;
2084      tree val;
2085 {
2086   tree b;
2087
2088   if (scope == NULL_TREE)
2089     scope = global_namespace;
2090   
2091   if (scope == global_namespace)
2092     {
2093       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2094       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2095         {
2096           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2097           return;
2098         }
2099     }
2100   b = binding_for_name (name, scope);
2101   BINDING_VALUE (b) = val;
2102 }
2103
2104 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2105    select a name that is unique to this compilation unit.  */
2106
2107 void
2108 push_namespace (name)
2109      tree name;
2110 {
2111   tree d = NULL_TREE;
2112   int need_new = 1;
2113   int implicit_use = 0;
2114   int global = 0;
2115   if (!global_namespace)
2116     {
2117       /* This must be ::. */
2118       my_friendly_assert (name == get_identifier ("::"), 377);
2119       global = 1;
2120     }
2121   else if (!name)
2122     {
2123       /* The name of anonymous namespace is unique for the translation
2124          unit.  */
2125       if (!anonymous_namespace_name)
2126         anonymous_namespace_name = get_file_function_name ('N');
2127       name = anonymous_namespace_name;
2128       d = IDENTIFIER_NAMESPACE_VALUE (name);
2129       if (d)
2130         /* Reopening anonymous namespace.  */
2131         need_new = 0;
2132       implicit_use = 1;
2133     }
2134   else if (current_namespace == global_namespace
2135            && name == DECL_NAME (std_node))
2136     {
2137       in_std++;
2138       return;
2139     }
2140   else
2141     {
2142       /* Check whether this is an extended namespace definition. */
2143       d = IDENTIFIER_NAMESPACE_VALUE (name);
2144       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2145         {
2146           need_new = 0;
2147           if (DECL_NAMESPACE_ALIAS (d))
2148             {
2149               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2150                         d, DECL_NAMESPACE_ALIAS (d));
2151               d = DECL_NAMESPACE_ALIAS (d);
2152             }
2153         }
2154     }
2155   
2156   if (need_new)
2157     {
2158       /* Make a new namespace, binding the name to it. */
2159       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2160       /* The global namespace is not pushed, and the global binding
2161          level is set elsewhere.  */
2162       if (!global)
2163         {
2164           d = pushdecl (d);
2165           pushlevel (0);
2166           declare_namespace_level ();
2167           NAMESPACE_LEVEL (d) = current_binding_level;
2168         }
2169     }
2170   else
2171     resume_binding_level (NAMESPACE_LEVEL (d));
2172
2173   if (implicit_use)
2174     do_using_directive (d);
2175   /* Enter the name space. */
2176   current_namespace = d;
2177 }
2178
2179 /* Pop from the scope of the current namespace.  */
2180
2181 void
2182 pop_namespace ()
2183 {
2184   if (current_namespace == global_namespace)
2185     {
2186       my_friendly_assert (in_std>0, 980421);
2187       in_std--;
2188       return;
2189     }
2190   current_namespace = CP_DECL_CONTEXT (current_namespace);
2191   /* The binding level is not popped, as it might be re-opened later.  */
2192   suspend_binding_level ();
2193 }
2194
2195 /* Push into the scope of the namespace NS, even if it is deeply
2196    nested within another namespace.  */
2197
2198 void
2199 push_nested_namespace (ns)
2200      tree ns;
2201 {
2202   if (ns == global_namespace)
2203     push_to_top_level ();
2204   else
2205     {
2206       push_nested_namespace (CP_DECL_CONTEXT (ns));
2207       push_namespace (DECL_NAME (ns));
2208     }
2209 }
2210
2211 /* Pop back from the scope of the namespace NS, which was previously
2212    entered with push_nested_namespace.  */
2213      
2214 void
2215 pop_nested_namespace (ns)
2216      tree ns;
2217 {
2218   while (ns != global_namespace)
2219     {
2220       pop_namespace ();
2221       ns = CP_DECL_CONTEXT (ns);
2222     }
2223
2224   pop_from_top_level ();
2225 }
2226
2227 \f
2228 /* Subroutines for reverting temporarily to top-level for instantiation
2229    of templates and such.  We actually need to clear out the class- and
2230    local-value slots of all identifiers, so that only the global values
2231    are at all visible.  Simply setting current_binding_level to the global
2232    scope isn't enough, because more binding levels may be pushed.  */
2233 struct saved_scope *scope_chain;
2234
2235 /* Mark ST for GC.  */
2236
2237 static void
2238 mark_stmt_tree (st)
2239      struct stmt_tree *st;
2240 {
2241   ggc_mark_tree (st->x_last_stmt);
2242   ggc_mark_tree (st->x_last_expr_type);
2243 }
2244
2245 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2246
2247 static void
2248 mark_saved_scope (arg)
2249      void *arg;
2250 {
2251   struct saved_scope *t = *(struct saved_scope **)arg;
2252   while (t)
2253     {
2254       mark_binding_level (&t->class_bindings);
2255       ggc_mark_tree (t->old_bindings);
2256       ggc_mark_tree (t->old_namespace);
2257       ggc_mark_tree (t->class_name);
2258       ggc_mark_tree (t->class_type);
2259       ggc_mark_tree (t->access_specifier);
2260       ggc_mark_tree (t->function_decl);
2261       if (t->lang_base)
2262         ggc_mark_tree_varray (t->lang_base);
2263       ggc_mark_tree (t->lang_name);
2264       ggc_mark_tree (t->x_function_parms);
2265       ggc_mark_tree (t->template_parms);
2266       ggc_mark_tree (t->x_previous_class_type);
2267       ggc_mark_tree (t->x_previous_class_values);
2268       ggc_mark_tree (t->x_saved_tree);
2269
2270       mark_stmt_tree (&t->x_stmt_tree);
2271       mark_binding_level (&t->bindings);
2272       t = t->prev;
2273     }
2274 }
2275
2276 static tree
2277 store_bindings (names, old_bindings)
2278      tree names, old_bindings;
2279 {
2280   tree t;
2281   for (t = names; t; t = TREE_CHAIN (t))
2282     {
2283       tree binding, t1, id;
2284
2285       if (TREE_CODE (t) == TREE_LIST)
2286         id = TREE_PURPOSE (t);
2287       else
2288         id = DECL_NAME (t);
2289
2290       if (!id 
2291           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2292              we have no IDENTIFIER_BINDING if we have left the class
2293              scope, but cached the class-level declarations.  */
2294           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2295         continue;
2296
2297       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2298         if (TREE_VEC_ELT (t1, 0) == id)
2299           goto skip_it;
2300
2301       binding = make_tree_vec (4);
2302
2303       if (id)
2304         {
2305           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2306           TREE_VEC_ELT (binding, 0) = id;
2307           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2308           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2309           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2310           IDENTIFIER_BINDING (id) = NULL_TREE;
2311           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2312         }
2313       TREE_CHAIN (binding) = old_bindings;
2314       old_bindings = binding;
2315     skip_it:
2316       ;
2317     }
2318   return old_bindings;
2319 }
2320
2321 void
2322 maybe_push_to_top_level (pseudo)
2323      int pseudo;
2324 {
2325   struct saved_scope *s;
2326   struct binding_level *b;
2327   tree old_bindings;
2328   int need_pop;
2329
2330   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2331
2332   b = scope_chain ? current_binding_level : 0;
2333
2334   /* If we're in the middle of some function, save our state.  */
2335   if (current_function)
2336     {
2337       need_pop = 1;
2338       push_function_context_to (NULL_TREE);
2339     }
2340   else
2341     need_pop = 0;
2342
2343   old_bindings = NULL_TREE;
2344   if (scope_chain && previous_class_type)
2345     old_bindings = store_bindings (previous_class_values, old_bindings);
2346
2347   /* Have to include global_binding_level, because class-level decls
2348      aren't listed anywhere useful.  */
2349   for (; b; b = b->level_chain)
2350     {
2351       tree t;
2352
2353       /* Template IDs are inserted into the global level. If they were
2354          inserted into namespace level, finish_file wouldn't find them
2355          when doing pending instantiations. Therefore, don't stop at
2356          namespace level, but continue until :: .  */
2357       if (b == global_binding_level || (pseudo && b->pseudo_global))
2358         break;
2359
2360       old_bindings = store_bindings (b->names, old_bindings);
2361       /* We also need to check class_shadowed to save class-level type
2362          bindings, since pushclass doesn't fill in b->names.  */
2363       if (b->parm_flag == 2)
2364         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2365
2366       /* Unwind type-value slots back to top level.  */
2367       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2368         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2369     }
2370   s->prev = scope_chain;
2371   s->old_bindings = old_bindings;
2372   s->bindings = b;
2373   s->need_pop_function_context = need_pop;
2374   s->function_decl = current_function_decl;
2375
2376   scope_chain = s;
2377   current_function_decl = NULL_TREE;
2378   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2379   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2380   current_lang_name = lang_name_cplusplus;
2381   strict_prototype = strict_prototypes_lang_cplusplus;
2382   current_namespace = global_namespace;
2383
2384   push_obstacks (&permanent_obstack, &permanent_obstack);
2385 }
2386
2387 void
2388 push_to_top_level ()
2389 {
2390   maybe_push_to_top_level (0);
2391 }
2392
2393 void
2394 pop_from_top_level ()
2395 {
2396   struct saved_scope *s = scope_chain;
2397   tree t;
2398
2399   /* Clear out class-level bindings cache.  */
2400   if (previous_class_type)
2401     invalidate_class_lookup_cache ();
2402
2403   pop_obstacks ();
2404
2405   VARRAY_FREE (current_lang_base);
2406
2407   scope_chain = s->prev;
2408   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2409     {
2410       tree id = TREE_VEC_ELT (t, 0);
2411       if (id)
2412         {
2413           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2414           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2415           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2416         }
2417     }
2418
2419   if (current_lang_name == lang_name_cplusplus)
2420     strict_prototype = strict_prototypes_lang_cplusplus;
2421   else if (current_lang_name == lang_name_c)
2422     strict_prototype = strict_prototypes_lang_c;
2423
2424   /* If we were in the middle of compiling a function, restore our
2425      state.  */
2426   if (s->need_pop_function_context)
2427     pop_function_context_from (NULL_TREE);
2428   current_function_decl = s->function_decl;
2429
2430   free (s);
2431 }
2432 \f
2433 /* Push a definition of struct, union or enum tag "name".
2434    into binding_level "b".   "type" should be the type node, 
2435    We assume that the tag "name" is not already defined.
2436
2437    Note that the definition may really be just a forward reference.
2438    In that case, the TYPE_SIZE will be a NULL_TREE.
2439
2440    C++ gratuitously puts all these tags in the name space.  */
2441
2442 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2443    record the shadowed value for this binding contour.  TYPE is
2444    the type that ID maps to.  */
2445
2446 static void
2447 set_identifier_type_value_with_scope (id, type, b)
2448      tree id;
2449      tree type;
2450      struct binding_level *b;
2451 {
2452   if (!b->namespace_p)
2453     {
2454       /* Shadow the marker, not the real thing, so that the marker
2455          gets restored later. */
2456       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2457       b->type_shadowed
2458         = tree_cons (id, old_type_value, b->type_shadowed);
2459     }
2460   else
2461     {
2462       tree binding = binding_for_name (id, current_namespace);
2463       BINDING_TYPE (binding) = type;
2464       /* Store marker instead of real type. */
2465       type = global_type_node;
2466     }
2467   SET_IDENTIFIER_TYPE_VALUE (id, type);
2468 }
2469
2470 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2471
2472 void
2473 set_identifier_type_value (id, type)
2474      tree id;
2475      tree type;
2476 {
2477   set_identifier_type_value_with_scope (id, type, current_binding_level);
2478 }
2479
2480 /* Return the type associated with id. */
2481
2482 tree
2483 identifier_type_value (id)
2484      tree id;
2485 {
2486   /* There is no type with that name, anywhere. */
2487   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2488     return NULL_TREE;
2489   /* This is not the type marker, but the real thing. */
2490   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2491     return REAL_IDENTIFIER_TYPE_VALUE (id);
2492   /* Have to search for it. It must be on the global level, now.
2493      Ask lookup_name not to return non-types. */
2494   id = lookup_name_real (id, 2, 1, 0);
2495   if (id)
2496     return TREE_TYPE (id);
2497   return NULL_TREE;
2498 }
2499
2500 /* Pop off extraneous binding levels left over due to syntax errors.
2501
2502    We don't pop past namespaces, as they might be valid.  */
2503
2504 void
2505 pop_everything ()
2506 {
2507 #ifdef DEBUG_CP_BINDING_LEVELS
2508   fprintf (stderr, "XXX entering pop_everything ()\n");
2509 #endif
2510   while (!toplevel_bindings_p ())
2511     {
2512       if (current_binding_level->parm_flag == 2)
2513         pop_nested_class ();
2514       else
2515         poplevel (0, 0, 0);
2516     }
2517 #ifdef DEBUG_CP_BINDING_LEVELS
2518   fprintf (stderr, "XXX leaving pop_everything ()\n");
2519 #endif
2520 }
2521
2522 /* The type TYPE is being declared.  If it is a class template, or a
2523    specialization of a class template, do any processing required and
2524    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2525    being declared a friend.  B is the binding level at which this TYPE
2526    should be bound.
2527
2528    Returns the TYPE_DECL for TYPE, which may have been altered by this
2529    processing.  */
2530
2531 static tree 
2532 maybe_process_template_type_declaration (type, globalize, b)
2533      tree type;
2534      int globalize;
2535      struct binding_level* b;
2536 {
2537   tree decl = TYPE_NAME (type);
2538  
2539   if (processing_template_parmlist)
2540     /* You can't declare a new template type in a template parameter
2541        list.  But, you can declare a non-template type:
2542        
2543          template <class A*> struct S;
2544        
2545        is a forward-declaration of `A'.  */
2546     ;
2547   else 
2548     {
2549       maybe_check_template_type (type);
2550
2551       my_friendly_assert (IS_AGGR_TYPE (type) 
2552                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2553                           
2554                           
2555       if (processing_template_decl)
2556         {
2557           /* This may change after the call to
2558              push_template_decl_real, but we want the original value.  */
2559           tree name = DECL_NAME (decl);
2560
2561           decl = push_template_decl_real (decl, globalize);
2562           /* If the current binding level is the binding level for the
2563              template parameters (see the comment in
2564              begin_template_parm_list) and the enclosing level is a class
2565              scope, and we're not looking at a friend, push the
2566              declaration of the member class into the class scope.  In the
2567              friend case, push_template_decl will already have put the
2568              friend into global scope, if appropriate.  */
2569           if (TREE_CODE (type) != ENUMERAL_TYPE
2570               && !globalize && b->pseudo_global
2571               && b->level_chain->parm_flag == 2)
2572             {
2573               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2574               /* Put this tag on the list of tags for the class, since
2575                  that won't happen below because B is not the class
2576                  binding level, but is instead the pseudo-global level.  */
2577               b->level_chain->tags = 
2578                 tree_cons (name, type, b->level_chain->tags);
2579               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2580                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2581             }
2582         }
2583     }
2584
2585   return decl;
2586 }
2587
2588 /* In C++, you don't have to write `struct S' to refer to `S'; you
2589    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2590    if the user had written `typedef struct S S'.  Create and return
2591    the TYPE_DECL for TYPE.  */
2592
2593 tree
2594 create_implicit_typedef (name, type)
2595      tree name;
2596      tree type;
2597 {
2598   tree decl;
2599
2600   decl = build_decl (TYPE_DECL, name, type);
2601   SET_DECL_ARTIFICIAL (decl);
2602   /* There are other implicit type declarations, like the one *within*
2603      a class that allows you to write `S::S'.  We must distinguish
2604      amongst these.  */
2605   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2606   TYPE_NAME (type) = decl;
2607
2608   return decl;
2609 }
2610
2611 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2612    Normally put it into the inner-most non-tag-transparent scope,
2613    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2614    The latter is needed for implicit declarations.  */
2615
2616 void
2617 pushtag (name, type, globalize)
2618      tree name, type;
2619      int globalize;
2620 {
2621   register struct binding_level *b;
2622
2623   b = current_binding_level;
2624   while (b->tag_transparent
2625          || (globalize && b->parm_flag == 2))
2626     b = b->level_chain;
2627
2628   b->tags = tree_cons (name, type, b->tags);
2629
2630   if (name)
2631     {
2632       /* Do C++ gratuitous typedefing.  */
2633       if (IDENTIFIER_TYPE_VALUE (name) != type)
2634         {
2635           register tree d = NULL_TREE;
2636           int in_class = 0;
2637           tree context = TYPE_CONTEXT (type);
2638
2639           if (! context)
2640             {
2641               tree cs = current_scope ();
2642
2643               if (! globalize)
2644                 context = cs;
2645               else if (cs != NULL_TREE 
2646                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2647                 /* When declaring a friend class of a local class, we want
2648                    to inject the newly named class into the scope
2649                    containing the local class, not the namespace scope.  */
2650                 context = hack_decl_function_context (get_type_decl (cs));
2651             }
2652           if (!context)
2653             context = current_namespace;
2654
2655           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2656               || b->parm_flag == 2)
2657             in_class = 1;
2658
2659           if (current_lang_name == lang_name_java)
2660             TYPE_FOR_JAVA (type) = 1;
2661
2662           d = create_implicit_typedef (name, type);
2663           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2664           if (! in_class)
2665             set_identifier_type_value_with_scope (name, type, b);
2666
2667           d = maybe_process_template_type_declaration (type,
2668                                                        globalize, b);
2669
2670           if (b->parm_flag == 2)
2671             {
2672               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2673                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2674                    class.  But if it's a member template class, we
2675                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2676                    is done later.  */
2677                 finish_member_declaration (d);
2678               else
2679                 pushdecl_class_level (d);
2680             }
2681           else
2682             d = pushdecl_with_scope (d, b);
2683
2684           if (ANON_AGGRNAME_P (name))
2685             DECL_IGNORED_P (d) = 1;
2686
2687           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2688           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2689           if (!uses_template_parms (type))
2690             DECL_ASSEMBLER_NAME (d)
2691               = get_identifier (build_overload_name (type, 1, 1));
2692         }
2693       if (b->parm_flag == 2)
2694         {
2695           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2696             CLASSTYPE_TAGS (current_class_type) = b->tags;
2697         }
2698     }
2699
2700   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2701     /* Use the canonical TYPE_DECL for this node.  */
2702     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2703   else
2704     {
2705       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2706          will be the tagged type we just added to the current
2707          binding level.  This fake NULL-named TYPE_DECL node helps
2708          dwarfout.c to know when it needs to output a
2709          representation of a tagged type, and it also gives us a
2710          convenient place to record the "scope start" address for
2711          the tagged type.  */
2712
2713       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2714       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2715     }
2716 }
2717
2718 /* Counter used to create anonymous type names.  */
2719
2720 static int anon_cnt = 0;
2721
2722 /* Return an IDENTIFIER which can be used as a name for
2723    anonymous structs and unions.  */
2724
2725 tree
2726 make_anon_name ()
2727 {
2728   char buf[32];
2729
2730   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2731   return get_identifier (buf);
2732 }
2733
2734 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2735    This keeps dbxout from getting confused.  */
2736
2737 void
2738 clear_anon_tags ()
2739 {
2740   register struct binding_level *b;
2741   register tree tags;
2742   static int last_cnt = 0;
2743
2744   /* Fast out if no new anon names were declared.  */
2745   if (last_cnt == anon_cnt)
2746     return;
2747
2748   b = current_binding_level;
2749   while (b->tag_transparent)
2750     b = b->level_chain;
2751   tags = b->tags;
2752   while (tags)
2753     {
2754       /* A NULL purpose means we have already processed all tags
2755          from here to the end of the list.  */
2756       if (TREE_PURPOSE (tags) == NULL_TREE)
2757         break;
2758       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2759         TREE_PURPOSE (tags) = NULL_TREE;
2760       tags = TREE_CHAIN (tags);
2761     }
2762   last_cnt = anon_cnt;
2763 }
2764 \f
2765 /* Subroutine of duplicate_decls: return truthvalue of whether
2766    or not types of these decls match.
2767
2768    For C++, we must compare the parameter list so that `int' can match
2769    `int&' in a parameter position, but `int&' is not confused with
2770    `const int&'.  */
2771
2772 int
2773 decls_match (newdecl, olddecl)
2774      tree newdecl, olddecl;
2775 {
2776   int types_match;
2777
2778   if (newdecl == olddecl)
2779     return 1;
2780
2781   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2782     /* If the two DECLs are not even the same kind of thing, we're not
2783        interested in their types.  */
2784     return 0;
2785
2786   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2787     {
2788       tree f1 = TREE_TYPE (newdecl);
2789       tree f2 = TREE_TYPE (olddecl);
2790       tree p1 = TYPE_ARG_TYPES (f1);
2791       tree p2 = TYPE_ARG_TYPES (f2);
2792
2793       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2794           && ! (DECL_LANGUAGE (newdecl) == lang_c
2795                 && DECL_LANGUAGE (olddecl) == lang_c))
2796         return 0;
2797
2798       /* When we parse a static member function definition,
2799          we put together a FUNCTION_DECL which thinks its type
2800          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2801          proceed.  */
2802       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2803         revert_static_member_fn (&newdecl, &f1, &p1);
2804       else if (TREE_CODE (f2) == METHOD_TYPE
2805                && DECL_STATIC_FUNCTION_P (newdecl))
2806         revert_static_member_fn (&olddecl, &f2, &p2);
2807
2808       /* Here we must take care of the case where new default
2809          parameters are specified.  Also, warn if an old
2810          declaration becomes ambiguous because default
2811          parameters may cause the two to be ambiguous.  */
2812       if (TREE_CODE (f1) != TREE_CODE (f2))
2813         {
2814           if (TREE_CODE (f1) == OFFSET_TYPE)
2815             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2816           else
2817             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2818           return 0;
2819         }
2820
2821       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2822         {
2823           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2824               && p2 == NULL_TREE)
2825             {
2826               types_match = self_promoting_args_p (p1);
2827               if (p1 == void_list_node)
2828                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2829             }
2830           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2831                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2832             {
2833               types_match = self_promoting_args_p (p2);
2834               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2835             }
2836           else
2837             types_match = compparms (p1, p2);
2838         }
2839       else
2840         types_match = 0;
2841     }
2842   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2843     {
2844       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2845                                 DECL_TEMPLATE_PARMS (olddecl)))
2846         return 0;
2847       
2848       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2849         types_match = 1;
2850       else
2851         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2852                                    DECL_TEMPLATE_RESULT (newdecl));
2853     }
2854   else
2855     {
2856       if (TREE_TYPE (newdecl) == error_mark_node)
2857         types_match = TREE_TYPE (olddecl) == error_mark_node;
2858       else if (TREE_TYPE (olddecl) == NULL_TREE)
2859         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2860       else if (TREE_TYPE (newdecl) == NULL_TREE)
2861         types_match = 0;
2862       else
2863         types_match = comptypes (TREE_TYPE (newdecl),
2864                                  TREE_TYPE (olddecl),
2865                                  COMPARE_REDECLARATION);
2866     }
2867
2868   return types_match;
2869 }
2870
2871 /* If NEWDECL is `static' and an `extern' was seen previously,
2872    warn about it.  OLDDECL is the previous declaration.
2873
2874    Note that this does not apply to the C++ case of declaring
2875    a variable `extern const' and then later `const'.
2876
2877    Don't complain about built-in functions, since they are beyond
2878    the user's control.  */
2879
2880 static void
2881 warn_extern_redeclared_static (newdecl, olddecl)
2882      tree newdecl, olddecl;
2883 {
2884   static const char *explicit_extern_static_warning
2885     = "`%D' was declared `extern' and later `static'";
2886   static const char *implicit_extern_static_warning
2887     = "`%D' was declared implicitly `extern' and later `static'";
2888
2889   tree name;
2890
2891   if (TREE_CODE (newdecl) == TYPE_DECL 
2892       || TREE_CODE (newdecl) == TEMPLATE_DECL)
2893     return;
2894   
2895   /* Don't get confused by static member functions; that's a different
2896      use of `static'.  */
2897   if (TREE_CODE (newdecl) == FUNCTION_DECL
2898       && DECL_STATIC_FUNCTION_P (newdecl))
2899     return;
2900
2901   /* If the old declaration was `static', or the new one isn't, then
2902      then everything is OK.  */
2903   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2904     return;
2905
2906   /* It's OK to declare a builtin function as `static'.  */
2907   if (TREE_CODE (olddecl) == FUNCTION_DECL
2908       && DECL_ARTIFICIAL (olddecl))
2909     return;
2910
2911   name = DECL_ASSEMBLER_NAME (newdecl);
2912   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2913               ? implicit_extern_static_warning
2914               : explicit_extern_static_warning, newdecl);
2915   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2916 }
2917
2918 /* Handle when a new declaration NEWDECL has the same name as an old
2919    one OLDDECL in the same binding contour.  Prints an error message
2920    if appropriate.
2921
2922    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2923    Otherwise, return 0.  */
2924
2925 int
2926 duplicate_decls (newdecl, olddecl)
2927      tree newdecl, olddecl;
2928 {
2929   unsigned olddecl_uid = DECL_UID (olddecl);
2930   int olddecl_friend = 0, types_match = 0;
2931   int new_defines_function = 0;
2932
2933   if (newdecl == olddecl)
2934     return 1;
2935
2936   types_match = decls_match (newdecl, olddecl);
2937
2938   /* If either the type of the new decl or the type of the old decl is an
2939      error_mark_node, then that implies that we have already issued an
2940      error (earlier) for some bogus type specification, and in that case,
2941      it is rather pointless to harass the user with yet more error message
2942      about the same declaration, so just pretend the types match here.  */
2943   if (TREE_TYPE (newdecl) == error_mark_node
2944       || TREE_TYPE (olddecl) == error_mark_node)
2945     types_match = 1;
2946  
2947   /* Check for redeclaration and other discrepancies. */
2948   if (TREE_CODE (olddecl) == FUNCTION_DECL
2949       && DECL_ARTIFICIAL (olddecl))
2950     {
2951       if (TREE_CODE (newdecl) != FUNCTION_DECL)
2952         {
2953           /* If you declare a built-in or predefined function name as static,
2954              the old definition is overridden, but optionally warn this was a
2955              bad choice of name.  */
2956           if (! TREE_PUBLIC (newdecl))
2957             {
2958               if (warn_shadow)
2959                 cp_warning ("shadowing %s function `%#D'",
2960                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2961                             olddecl);
2962               /* Discard the old built-in function.  */
2963               return 0;
2964             }
2965           /* If the built-in is not ansi, then programs can override
2966              it even globally without an error.  */
2967           else if (! DECL_BUILT_IN (olddecl))
2968             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2969                         olddecl, newdecl);
2970           else
2971             {
2972               cp_error ("declaration of `%#D'", newdecl);
2973               cp_error ("conflicts with built-in declaration `%#D'",
2974                         olddecl);
2975             }
2976           return 0;
2977         }
2978       else if (!types_match)
2979         {
2980           if ((DECL_LANGUAGE (newdecl) == lang_c
2981                && DECL_LANGUAGE (olddecl) == lang_c)
2982               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
2983                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
2984             {
2985               /* A near match; override the builtin.  */
2986
2987               if (TREE_PUBLIC (newdecl))
2988                 {
2989                   cp_warning ("new declaration `%#D'", newdecl);
2990                   cp_warning ("ambiguates built-in declaration `%#D'",
2991                               olddecl);
2992                 }
2993               else if (warn_shadow)
2994                 cp_warning ("shadowing %s function `%#D'",
2995                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2996                             olddecl);
2997             }
2998           else
2999             /* Discard the old built-in function.  */
3000             return 0;
3001         }
3002       
3003       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3004         {
3005           /* If a builtin function is redeclared as `static', merge
3006              the declarations, but make the original one static.  */
3007           DECL_THIS_STATIC (olddecl) = 1;
3008           TREE_PUBLIC (olddecl) = 0;
3009
3010           /* Make the olddeclaration consistent with the new one so that
3011              all remnants of the builtin-ness of this function will be
3012              banished.  */
3013           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3014           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3015           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3016           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3017                                        newdecl);
3018         }
3019     }
3020   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3021     {
3022       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3023            && TREE_CODE (newdecl) != TYPE_DECL
3024            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3025                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3026           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3027               && TREE_CODE (olddecl) != TYPE_DECL
3028               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3029                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3030                         == TYPE_DECL))))
3031         {
3032           /* We do nothing special here, because C++ does such nasty
3033              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3034              get shadowed, and know that if we need to find a TYPE_DECL
3035              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3036              slot of the identifier.  */
3037           return 0;
3038         }
3039
3040       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3041            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3042           || (TREE_CODE (olddecl) == FUNCTION_DECL
3043               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3044         return 0;
3045
3046       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3047       if (TREE_CODE (olddecl) == TREE_LIST)
3048         olddecl = TREE_VALUE (olddecl);
3049       cp_error_at ("previous declaration of `%#D'", olddecl);
3050
3051       /* New decl is completely inconsistent with the old one =>
3052          tell caller to replace the old one.  */
3053
3054       return 0;
3055     }
3056   else if (!types_match)
3057     {
3058       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3059         /* These are certainly not duplicate declarations; they're
3060            from different scopes.  */
3061         return 0;
3062
3063       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3064         {
3065           /* The name of a class template may not be declared to refer to
3066              any other template, class, function, object, namespace, value,
3067              or type in the same scope.  */
3068           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3069               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3070             {
3071               cp_error ("declaration of template `%#D'", newdecl);
3072               cp_error_at ("conflicts with previous declaration `%#D'",
3073                            olddecl);
3074             }
3075           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3076                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3077                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3078                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3079                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3080                                            DECL_TEMPLATE_PARMS (olddecl)))
3081             {
3082               cp_error ("new declaration `%#D'", newdecl);
3083               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3084             }
3085           return 0;
3086         }
3087       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3088         {
3089           if (DECL_LANGUAGE (newdecl) == lang_c
3090               && DECL_LANGUAGE (olddecl) == lang_c)
3091             {
3092               cp_error ("declaration of C function `%#D' conflicts with",
3093                         newdecl);
3094               cp_error_at ("previous declaration `%#D' here", olddecl);
3095             }
3096           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3097                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3098             {
3099               cp_error ("new declaration `%#D'", newdecl);
3100               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3101             }
3102           else
3103             return 0;
3104         }
3105
3106       /* Already complained about this, so don't do so again.  */
3107       else if (current_class_type == NULL_TREE
3108           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3109         {
3110           cp_error ("conflicting types for `%#D'", newdecl);
3111           cp_error_at ("previous declaration as `%#D'", olddecl);
3112         }
3113     }
3114   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3115             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3116                  && (!DECL_TEMPLATE_INFO (newdecl)
3117                      || (DECL_TI_TEMPLATE (newdecl) 
3118                          != DECL_TI_TEMPLATE (olddecl))))
3119                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3120                     && (!DECL_TEMPLATE_INFO (olddecl)
3121                         || (DECL_TI_TEMPLATE (olddecl) 
3122                             != DECL_TI_TEMPLATE (newdecl))))))
3123     /* It's OK to have a template specialization and a non-template
3124        with the same type, or to have specializations of two
3125        different templates with the same type.  Note that if one is a
3126        specialization, and the other is an instantiation of the same
3127        template, that we do not exit at this point.  That situation
3128        can occur if we instantiate a template class, and then
3129        specialize one of its methods.  This situation is legal, but
3130        the declarations must be merged in the usual way.  */
3131     return 0;
3132   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3133            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3134                 && !DECL_USE_TEMPLATE (newdecl))
3135                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3136                    && !DECL_USE_TEMPLATE (olddecl))))
3137     /* One of the declarations is a template instantiation, and the
3138        other is not a template at all.  That's OK.  */
3139     return 0;
3140   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3141            && DECL_NAMESPACE_ALIAS (newdecl)
3142            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3143     /* Redeclaration of namespace alias, ignore it. */
3144     return 1;
3145   else
3146     {
3147       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3148       if (errmsg)
3149         {
3150           cp_error (errmsg, newdecl);
3151           if (DECL_NAME (olddecl) != NULL_TREE)
3152             cp_error_at ((DECL_INITIAL (olddecl)
3153                           && namespace_bindings_p ())
3154                          ? "`%#D' previously defined here"
3155                          : "`%#D' previously declared here", olddecl);
3156         }
3157       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3158                && DECL_INITIAL (olddecl) != NULL_TREE
3159                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3160                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3161         {
3162           /* Prototype decl follows defn w/o prototype.  */
3163           cp_warning_at ("prototype for `%#D'", newdecl);
3164           cp_warning_at ("follows non-prototype definition here", olddecl);
3165         }
3166       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3167                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3168         {
3169           /* extern "C" int foo ();
3170              int foo () { bar (); }
3171              is OK.  */
3172           if (current_lang_stack
3173               == &VARRAY_TREE (current_lang_base, 0))
3174             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3175           else
3176             {
3177               cp_error_at ("previous declaration of `%#D' with %L linkage",
3178                            olddecl, DECL_LANGUAGE (olddecl));
3179               cp_error ("conflicts with new declaration with %L linkage",
3180                         DECL_LANGUAGE (newdecl));
3181             }
3182         }
3183
3184       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3185         ;
3186       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3187         {
3188           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3189           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3190           int i = 1;
3191
3192           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3193             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3194         
3195           for (; t1 && t1 != void_list_node;
3196                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3197             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3198               {
3199                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3200                                            TREE_PURPOSE (t2)))
3201                   {
3202                     if (pedantic)
3203                       {
3204                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3205                                     i, newdecl);
3206                         cp_pedwarn_at ("after previous specification in `%#D'",
3207                                        olddecl);
3208                       }
3209                   }
3210                 else
3211                   {
3212                     cp_error ("default argument given for parameter %d of `%#D'",
3213                               i, newdecl);
3214                     cp_error_at ("after previous specification in `%#D'",
3215                                  olddecl);
3216                   }
3217               }
3218
3219           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3220               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3221             {
3222               cp_warning ("`%#D' was used before it was declared inline",
3223                           newdecl);
3224               cp_warning_at ("previous non-inline declaration here",
3225                              olddecl);
3226             }
3227         }
3228     }
3229
3230   /* If new decl is `static' and an `extern' was seen previously,
3231      warn about it.  */
3232   warn_extern_redeclared_static (newdecl, olddecl);
3233
3234   /* We have committed to returning 1 at this point.  */
3235   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3236     {
3237       /* Now that functions must hold information normally held
3238          by field decls, there is extra work to do so that
3239          declaration information does not get destroyed during
3240          definition.  */
3241       if (DECL_VINDEX (olddecl))
3242         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3243       if (DECL_CONTEXT (olddecl))
3244         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3245       if (DECL_CLASS_CONTEXT (olddecl))
3246         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3247       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3248         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3249       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3250       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3251       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3252       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3253       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3254       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3255       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3256       
3257       /* Optionally warn about more than one declaration for the same
3258          name, but don't warn about a function declaration followed by a
3259          definition.  */
3260       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3261           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3262           /* Don't warn about extern decl followed by definition. */
3263           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3264           /* Don't warn about friends, let add_friend take care of it. */
3265           && ! DECL_FRIEND_P (newdecl))
3266         {
3267           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3268           cp_warning_at ("previous declaration of `%D'", olddecl);
3269         }
3270     }
3271
3272   /* Deal with C++: must preserve virtual function table size.  */
3273   if (TREE_CODE (olddecl) == TYPE_DECL)
3274     {
3275       register tree newtype = TREE_TYPE (newdecl);
3276       register tree oldtype = TREE_TYPE (olddecl);
3277
3278       if (newtype != error_mark_node && oldtype != error_mark_node
3279           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3280         {
3281           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3282           CLASSTYPE_FRIEND_CLASSES (newtype)
3283             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3284         }
3285     }
3286
3287   /* Copy all the DECL_... slots specified in the new decl
3288      except for any that we copy here from the old type.  */
3289   DECL_MACHINE_ATTRIBUTES (newdecl) 
3290     = merge_machine_decl_attributes (olddecl, newdecl);
3291
3292   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3293     {
3294       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3295                              DECL_TEMPLATE_RESULT (olddecl)))
3296         cp_error ("invalid redeclaration of %D", newdecl);
3297       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3298       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3299         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3300                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3301  
3302       return 1;
3303     }
3304     
3305   if (types_match)
3306     {
3307       /* Automatically handles default parameters.  */
3308       tree oldtype = TREE_TYPE (olddecl);
3309       tree newtype;
3310
3311       /* Make sure we put the new type in the same obstack as the old one.  */
3312       if (oldtype)
3313         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3314       else
3315         push_permanent_obstack ();
3316
3317       /* Merge the data types specified in the two decls.  */
3318       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3319
3320       if (TREE_CODE (newdecl) == VAR_DECL)
3321         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3322       /* Do this after calling `common_type' so that default
3323          parameters don't confuse us.  */
3324       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3325           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3326               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3327         {
3328           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3329                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3330           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3331                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3332
3333           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3334               && DECL_SOURCE_LINE (olddecl) != 0
3335               && flag_exceptions
3336               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3337                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3338             {
3339               cp_error ("declaration of `%F' throws different exceptions",
3340                         newdecl);
3341               cp_error_at ("to previous declaration `%F'", olddecl);
3342             }
3343         }
3344       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3345
3346       /* Lay the type out, unless already done.  */
3347       if (! same_type_p (newtype, oldtype)
3348           && TREE_TYPE (newdecl) != error_mark_node
3349           && !(processing_template_decl && uses_template_parms (newdecl)))
3350         layout_type (TREE_TYPE (newdecl));
3351
3352       if ((TREE_CODE (newdecl) == VAR_DECL
3353            || TREE_CODE (newdecl) == PARM_DECL
3354            || TREE_CODE (newdecl) == RESULT_DECL
3355            || TREE_CODE (newdecl) == FIELD_DECL
3356            || TREE_CODE (newdecl) == TYPE_DECL)
3357           && !(processing_template_decl && uses_template_parms (newdecl)))
3358         layout_decl (newdecl, 0);
3359
3360       /* Merge the type qualifiers.  */
3361       if (TREE_READONLY (newdecl))
3362         TREE_READONLY (olddecl) = 1;
3363       if (TREE_THIS_VOLATILE (newdecl))
3364         TREE_THIS_VOLATILE (olddecl) = 1;
3365
3366       /* Merge the initialization information.  */
3367       if (DECL_INITIAL (newdecl) == NULL_TREE
3368           && DECL_INITIAL (olddecl) != NULL_TREE)
3369         {
3370           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3371           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3372           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3373           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3374               && DECL_LANG_SPECIFIC (newdecl)
3375               && DECL_LANG_SPECIFIC (olddecl))
3376             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3377         }
3378
3379       /* Merge the section attribute.
3380          We want to issue an error if the sections conflict but that must be
3381          done later in decl_attributes since we are called before attributes
3382          are assigned.  */
3383       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3384         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3385
3386       /* Keep the old rtl since we can safely use it.  */
3387       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3388
3389       pop_obstacks ();
3390     }
3391   /* If cannot merge, then use the new type and qualifiers,
3392      and don't preserve the old rtl.  */
3393   else
3394     {
3395       /* Clean out any memory we had of the old declaration.  */
3396       tree oldstatic = value_member (olddecl, static_aggregates);
3397       if (oldstatic)
3398         TREE_VALUE (oldstatic) = error_mark_node;
3399
3400       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3401       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3402       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3403       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3404     }
3405
3406   /* Merge the storage class information.  */
3407   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3408   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3409   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3410   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3411   if (! DECL_EXTERNAL (olddecl))
3412     DECL_EXTERNAL (newdecl) = 0;
3413   
3414   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3415     {
3416       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3417       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3418       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3419       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3420         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3421       /* Don't really know how much of the language-specific
3422          values we should copy from old to new.  */
3423       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3424       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3425       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3426       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3427       olddecl_friend = DECL_FRIEND_P (olddecl);
3428
3429       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3430       if (TREE_CODE (newdecl) == FUNCTION_DECL
3431           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3432         DECL_BEFRIENDING_CLASSES (newdecl)
3433           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3434                      DECL_BEFRIENDING_CLASSES (olddecl));
3435     }
3436
3437   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3438     {
3439       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3440           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3441         {
3442           /* If newdecl is not a specialization, then it is not a
3443              template-related function at all.  And that means that we
3444              shoud have exited above, returning 0.  */
3445           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3446                               0);
3447
3448           if (TREE_USED (olddecl)) 
3449             /* From [temp.expl.spec]:
3450                
3451                If a template, a member template or the member of a class
3452                template is explicitly specialized then that
3453                specialization shall be declared before the first use of
3454                that specialization that would cause an implicit
3455                instantiation to take place, in every translation unit in
3456                which such a use occurs.  */
3457             cp_error ("explicit specialization of %D after first use", 
3458                       olddecl);
3459
3460           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3461         }
3462       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3463
3464       /* If either decl says `inline', this fn is inline, unless its
3465          definition was passed already.  */
3466       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3467         DECL_INLINE (olddecl) = 1;
3468       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3469
3470       if (! types_match)
3471         {
3472           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3473           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3474           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3475         }
3476       if (! types_match || new_defines_function)
3477         {
3478           /* These need to be copied so that the names are available.
3479              Note that if the types do match, we'll preserve inline
3480              info and other bits, but if not, we won't.  */
3481           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3482           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3483         }
3484       if (new_defines_function)
3485         /* If defining a function declared with other language
3486            linkage, use the previously declared language linkage.  */
3487         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3488       else if (types_match)
3489         {
3490           /* If redeclaring a builtin function, and not a definition,
3491              it stays built in.  */
3492           if (DECL_BUILT_IN (olddecl))
3493             {
3494               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3495               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3496               /* If we're keeping the built-in definition, keep the rtl,
3497                  regardless of declaration matches.  */
3498               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3499             }
3500           else
3501             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3502
3503           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3504           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3505             /* Previously saved insns go together with
3506                the function's previous definition.  */
3507             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3508           /* Don't clear out the arguments if we're redefining a function.  */
3509           if (DECL_ARGUMENTS (olddecl))
3510             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3511         }
3512       if (DECL_LANG_SPECIFIC (olddecl))
3513         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3514     }
3515
3516   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3517     {
3518       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3519     }
3520
3521   /* Now preserve various other info from the definition.  */
3522   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3523   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3524   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3525   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3526
3527   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3528     {
3529       int function_size;
3530
3531       function_size = sizeof (struct tree_decl);
3532
3533       bcopy ((char *) newdecl + sizeof (struct tree_common),
3534              (char *) olddecl + sizeof (struct tree_common),
3535              function_size - sizeof (struct tree_common));
3536
3537       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3538         {
3539           /* If newdecl is a template instantiation, it is possible that
3540              the following sequence of events has occurred:
3541
3542              o A friend function was declared in a class template.  The
3543              class template was instantiated.  
3544
3545              o The instantiation of the friend declaration was 
3546              recorded on the instantiation list, and is newdecl.  
3547
3548              o Later, however, instantiate_class_template called pushdecl
3549              on the newdecl to perform name injection.  But, pushdecl in
3550              turn called duplicate_decls when it discovered that another
3551              declaration of a global function with the same name already
3552              existed. 
3553
3554              o Here, in duplicate_decls, we decided to clobber newdecl.
3555
3556              If we're going to do that, we'd better make sure that
3557              olddecl, and not newdecl, is on the list of
3558              instantiations so that if we try to do the instantiation
3559              again we won't get the clobbered declaration.  */
3560
3561           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3562           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3563
3564           for (; decls; decls = TREE_CHAIN (decls))
3565             if (TREE_VALUE (decls) == newdecl)
3566               TREE_VALUE (decls) = olddecl;
3567         }
3568     }
3569   else
3570     {
3571       bcopy ((char *) newdecl + sizeof (struct tree_common),
3572              (char *) olddecl + sizeof (struct tree_common),
3573              sizeof (struct tree_decl) - sizeof (struct tree_common)
3574              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3575     }
3576
3577   DECL_UID (olddecl) = olddecl_uid;
3578   if (olddecl_friend)
3579     DECL_FRIEND_P (olddecl) = 1;
3580
3581   /* NEWDECL contains the merged attribute lists.
3582      Update OLDDECL to be the same.  */
3583   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3584
3585   return 1;
3586 }
3587
3588 /* Record a decl-node X as belonging to the current lexical scope.
3589    Check for errors (such as an incompatible declaration for the same
3590    name already seen in the same scope).
3591
3592    Returns either X or an old decl for the same name.
3593    If an old decl is returned, it may have been smashed
3594    to agree with what X says.  */
3595
3596 tree
3597 pushdecl (x)
3598      tree x;
3599 {
3600   register tree t;
3601   register tree name;
3602   int need_new_binding;
3603
3604   /* We shouldn't be calling pushdecl when we're generating RTL for a
3605      function that we already did semantic analysis on previously.  */
3606   my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3607                       19990913);
3608
3609   name = DECL_ASSEMBLER_NAME (x);
3610   need_new_binding = 1;
3611
3612   if (DECL_TEMPLATE_PARM_P (x))
3613     /* Template parameters have no context; they are not X::T even
3614        when declared within a class or namespace.  */
3615     ;
3616   else
3617     {
3618       if (current_function_decl && x != current_function_decl
3619           /* A local declaration for a function doesn't constitute
3620              nesting.  */
3621           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3622           /* A local declaration for an `extern' variable is in the
3623              scoped of the current namespace, not the current
3624              function.  */
3625           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3626           /* Don't change DECL_CONTEXT of virtual methods.  */
3627           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3628           && !DECL_CONTEXT (x))
3629         DECL_CONTEXT (x) = current_function_decl;
3630       if (!DECL_CONTEXT (x))
3631         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3632     }
3633
3634   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3635      compiler wants to use.  */
3636   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3637       || TREE_CODE (x) == NAMESPACE_DECL)
3638     name = DECL_NAME (x);
3639
3640   if (name)
3641     {
3642 #if 0
3643       /* Not needed...see below.  */
3644       char *file;
3645       int line;
3646 #endif
3647       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3648         name = TREE_OPERAND (name, 0);
3649       
3650       /* Namespace-scoped variables are not found in the current level. */
3651       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3652         t = namespace_binding (name, DECL_CONTEXT (x));
3653       else
3654         t = lookup_name_current_level (name);
3655       if (t == error_mark_node)
3656         {
3657           /* error_mark_node is 0 for a while during initialization!  */
3658           t = NULL_TREE;
3659           cp_error_at ("`%#D' used prior to declaration", x);
3660         }
3661
3662       else if (t != NULL_TREE)
3663         {
3664 #if 0
3665           /* This is turned off until I have time to do it right (bpk).  */
3666           /* With the code below that uses it...  */
3667           file = DECL_SOURCE_FILE (t);
3668           line = DECL_SOURCE_LINE (t);
3669 #endif
3670           if (TREE_CODE (t) == PARM_DECL)
3671             {
3672               if (DECL_CONTEXT (t) == NULL_TREE)
3673                 fatal ("parse errors have confused me too much");
3674
3675               /* Check for duplicate params.  */
3676               if (duplicate_decls (x, t))
3677                 return t;
3678             }
3679           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3680                     || DECL_FUNCTION_TEMPLATE_P (x))
3681                    && is_overloaded_fn (t))
3682             /* Don't do anything just yet. */;
3683           else if (t == wchar_decl_node)
3684             {
3685               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3686                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3687
3688               /* Throw away the redeclaration.  */
3689               return t;
3690             }
3691           else if (TREE_CODE (t) != TREE_CODE (x))
3692             {
3693               if (duplicate_decls (x, t))
3694                 return t;
3695             }
3696           else if (duplicate_decls (x, t))
3697             {
3698 #if 0
3699               /* This is turned off until I have time to do it right (bpk).  */
3700
3701               /* Also warn if they did a prototype with `static' on it, but
3702                  then later left the `static' off.  */
3703               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3704                 {
3705                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3706                     return t;
3707
3708                   if (extra_warnings)
3709                     {
3710                       cp_warning ("`static' missing from declaration of `%D'",
3711                                   t);
3712                       warning_with_file_and_line (file, line,
3713                                                   "previous declaration of `%s'",
3714                                                   decl_as_string (t, 0));
3715                     }
3716
3717                   /* Now fix things so it'll do what they expect.  */
3718                   if (current_function_decl)
3719                     TREE_PUBLIC (current_function_decl) = 0;
3720                 }
3721               /* Due to interference in memory reclamation (X may be
3722                  obstack-deallocated at this point), we must guard against
3723                  one really special case.  [jason: This should be handled
3724                  by start_function]  */
3725               if (current_function_decl == x)
3726                 current_function_decl = t;
3727 #endif
3728               if (TREE_CODE (t) == TYPE_DECL)
3729                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3730               else if (TREE_CODE (t) == FUNCTION_DECL)
3731                 check_default_args (t);
3732
3733               return t;
3734             }
3735           else if (DECL_MAIN_P (x))
3736             {
3737               /* A redeclaration of main, but not a duplicate of the
3738                  previous one. 
3739
3740                  [basic.start.main]
3741
3742                  This function shall not be overloaded.  */
3743               cp_error_at ("invalid redeclaration of `%D'", t);
3744               cp_error ("as `%D'", x);
3745               /* We don't try to push this declaration since that
3746                  causes a crash.  */
3747               return x;
3748             }
3749         }
3750
3751       check_template_shadow (x);
3752
3753       /* If this is a function conjured up by the backend, massage it
3754          so it looks friendly.  */
3755       if (TREE_CODE (x) == FUNCTION_DECL
3756           && ! DECL_LANG_SPECIFIC (x))
3757         {
3758           retrofit_lang_decl (x);
3759           DECL_LANGUAGE (x) = lang_c;
3760         }
3761
3762       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3763         {
3764           t = push_overloaded_decl (x, PUSH_LOCAL);
3765           if (t != x)
3766             return t;
3767           if (!namespace_bindings_p ())
3768             /* We do not need to create a binding for this name;
3769                push_overloaded_decl will have already done so if
3770                necessary.  */
3771             need_new_binding = 0;
3772         }
3773       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3774         {
3775           t = push_overloaded_decl (x, PUSH_GLOBAL);
3776           if (t == x)
3777             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3778           return t;
3779         }
3780
3781       /* If declaring a type as a typedef, copy the type (unless we're
3782          at line 0), and install this TYPE_DECL as the new type's typedef
3783          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3784       if (TREE_CODE (x) == TYPE_DECL)
3785         {
3786           tree type = TREE_TYPE (x);
3787           if (DECL_SOURCE_LINE (x) == 0)
3788             {
3789               if (TYPE_NAME (type) == 0)
3790                 TYPE_NAME (type) = x;
3791             }
3792           else if (type != error_mark_node && TYPE_NAME (type) != x
3793                    /* We don't want to copy the type when all we're
3794                       doing is making a TYPE_DECL for the purposes of
3795                       inlining.  */
3796                    && (!TYPE_NAME (type) 
3797                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3798             {
3799               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3800
3801               DECL_ORIGINAL_TYPE (x) = type;
3802               type = build_type_copy (type);
3803               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3804               TYPE_NAME (type) = x;
3805               TREE_TYPE (x) = type;
3806
3807               pop_obstacks ();
3808             }
3809
3810           if (type != error_mark_node
3811               && TYPE_NAME (type)
3812               && TYPE_IDENTIFIER (type))
3813             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3814                                                   current_binding_level);
3815
3816         }
3817
3818       /* Multiple external decls of the same identifier ought to match.
3819
3820          We get warnings about inline functions where they are defined.
3821          We get warnings about other functions from push_overloaded_decl.
3822          
3823          Avoid duplicate warnings where they are used.  */
3824       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3825         {
3826           tree decl;
3827
3828           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3829               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3830                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3831             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3832           else
3833             decl = NULL_TREE;
3834
3835           if (decl
3836               /* If different sort of thing, we already gave an error.  */
3837               && TREE_CODE (decl) == TREE_CODE (x)
3838               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3839             {
3840               cp_pedwarn ("type mismatch with previous external decl", x);
3841               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3842             }
3843         }
3844
3845       /* This name is new in its binding level.
3846          Install the new declaration and return it.  */
3847       if (namespace_bindings_p ())
3848         {
3849           /* Install a global value.  */
3850
3851           /* If the first global decl has external linkage,
3852              warn if we later see static one.  */
3853           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3854             TREE_PUBLIC (name) = 1;
3855
3856           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3857                 && t != NULL_TREE)
3858               /* For an ordinary function, we create a binding from
3859                  the mangled name (i.e., NAME) to the DECL.  But, for
3860                  an `extern "C"' function, the mangled name and the
3861                  ordinary name are the same so we need not do this.  */
3862               && !(TREE_CODE (x) == FUNCTION_DECL && 
3863                    DECL_LANGUAGE (x) == lang_c))
3864             {
3865               if (TREE_CODE (x) == FUNCTION_DECL)
3866                 my_friendly_assert 
3867                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3868                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3869               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3870             }
3871
3872           /* Don't forget if the function was used via an implicit decl.  */
3873           if (IDENTIFIER_IMPLICIT_DECL (name)
3874               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3875             TREE_USED (x) = 1;
3876
3877           /* Don't forget if its address was taken in that way.  */
3878           if (IDENTIFIER_IMPLICIT_DECL (name)
3879               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3880             TREE_ADDRESSABLE (x) = 1;
3881
3882           /* Warn about mismatches against previous implicit decl.  */
3883           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3884               /* If this real decl matches the implicit, don't complain.  */
3885               && ! (TREE_CODE (x) == FUNCTION_DECL
3886                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3887             cp_warning
3888               ("`%D' was previously implicitly declared to return `int'", x);
3889
3890           /* If new decl is `static' and an `extern' was seen previously,
3891              warn about it.  */
3892           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3893             warn_extern_redeclared_static (x, t);
3894         }
3895       else
3896         {
3897           /* Here to install a non-global value.  */
3898           tree oldlocal = IDENTIFIER_VALUE (name);
3899           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3900
3901           if (need_new_binding)
3902             {
3903               push_local_binding (name, x, 0);
3904               /* Because push_local_binding will hook X on to the
3905                  current_binding_level's name list, we don't want to
3906                  do that again below.  */
3907               need_new_binding = 0;
3908             }
3909
3910           /* If this is a TYPE_DECL, push it into the type value slot.  */
3911           if (TREE_CODE (x) == TYPE_DECL)
3912             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3913                                                   current_binding_level);
3914
3915           /* Clear out any TYPE_DECL shadowed by a namespace so that
3916              we won't think this is a type.  The C struct hack doesn't
3917              go through namespaces.  */
3918           if (TREE_CODE (x) == NAMESPACE_DECL)
3919             set_identifier_type_value_with_scope (name, NULL_TREE, 
3920                                                   current_binding_level);
3921
3922           /* If this is an extern function declaration, see if we
3923              have a global definition or declaration for the function.  */
3924           if (oldlocal == NULL_TREE
3925               && DECL_EXTERNAL (x)
3926               && oldglobal != NULL_TREE
3927               && TREE_CODE (x) == FUNCTION_DECL
3928               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3929             {
3930               /* We have one.  Their types must agree.  */
3931               if (decls_match (x, oldglobal))
3932                 /* OK */;
3933               else
3934                 {
3935                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3936                   cp_warning_at ("global declaration `%#D'", oldglobal);
3937                 }
3938             }
3939           /* If we have a local external declaration,
3940              and no file-scope declaration has yet been seen,
3941              then if we later have a file-scope decl it must not be static.  */
3942           if (oldlocal == NULL_TREE
3943               && oldglobal == NULL_TREE
3944               && DECL_EXTERNAL (x)
3945               && TREE_PUBLIC (x))
3946             TREE_PUBLIC (name) = 1;
3947
3948           if (DECL_FROM_INLINE (x))
3949             /* Inline decls shadow nothing.  */;
3950
3951           /* Warn if shadowing an argument at the top level of the body.  */
3952           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3953                    && TREE_CODE (oldlocal) == PARM_DECL
3954                    /* Don't complain if it's from an enclosing function.  */
3955                    && DECL_CONTEXT (oldlocal) == current_function_decl
3956                    && TREE_CODE (x) != PARM_DECL)
3957             {
3958               /* Go to where the parms should be and see if we
3959                  find them there.  */
3960               struct binding_level *b = current_binding_level->level_chain;
3961
3962               if (cleanup_label)
3963                 b = b->level_chain;
3964
3965               /* ARM $8.3 */
3966               if (b->parm_flag == 1)
3967                 cp_error ("declaration of `%#D' shadows a parameter", name);
3968             }
3969           else if (warn_shadow && oldlocal != NULL_TREE
3970                    && current_binding_level->is_for_scope
3971                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3972             {
3973               warning ("variable `%s' shadows local",
3974                        IDENTIFIER_POINTER (name));
3975               cp_warning_at ("  this is the shadowed declaration", oldlocal);
3976             }              
3977           /* Maybe warn if shadowing something else.  */
3978           else if (warn_shadow && !DECL_EXTERNAL (x)
3979                    /* No shadow warnings for internally generated vars.  */
3980                    && ! DECL_ARTIFICIAL (x)
3981                    /* No shadow warnings for vars made for inlining.  */
3982                    && ! DECL_FROM_INLINE (x))
3983             {
3984               const char *warnstring = NULL;
3985
3986               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
3987                 warnstring = "declaration of `%s' shadows a parameter";
3988               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
3989                        && current_class_ptr
3990                        && !TREE_STATIC (name))
3991                 warnstring = "declaration of `%s' shadows a member of `this'";
3992               else if (oldlocal != NULL_TREE)
3993                 warnstring = "declaration of `%s' shadows previous local";
3994               else if (oldglobal != NULL_TREE)
3995                 /* XXX shadow warnings in outer-more namespaces */
3996                 warnstring = "declaration of `%s' shadows global declaration";
3997
3998               if (warnstring)
3999                 warning (warnstring, IDENTIFIER_POINTER (name));
4000             }
4001         }
4002
4003       if (TREE_CODE (x) == FUNCTION_DECL)
4004         check_default_args (x);
4005
4006       /* Keep count of variables in this level with incomplete type.  */
4007       if (TREE_CODE (x) == VAR_DECL
4008           && TREE_TYPE (x) != error_mark_node
4009           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4010                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4011               /* RTTI TD entries are created while defining the type_info.  */
4012               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4013                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4014         current_binding_level->incomplete 
4015           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4016     }
4017
4018   if (need_new_binding)
4019     add_decl_to_level (x, 
4020                        DECL_NAMESPACE_SCOPE_P (x)
4021                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4022                        : current_binding_level);
4023
4024   return x;
4025 }
4026
4027 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4028    caller to set DECL_CONTEXT properly.  */
4029
4030 static tree
4031 pushdecl_with_scope (x, level)
4032      tree x;
4033      struct binding_level *level;
4034 {
4035   register struct binding_level *b;
4036   tree function_decl = current_function_decl;
4037
4038   current_function_decl = NULL_TREE;
4039   if (level->parm_flag == 2)
4040     {
4041       b = class_binding_level;
4042       class_binding_level = level;
4043       pushdecl_class_level (x);
4044       class_binding_level = b;
4045     }
4046   else
4047     {
4048       b = current_binding_level;
4049       current_binding_level = level;
4050       x = pushdecl (x);
4051       current_binding_level = b;
4052     }
4053   current_function_decl = function_decl;
4054   return x;
4055 }
4056
4057 /* Like pushdecl, only it places X in the current namespace,
4058    if appropriate.  */
4059
4060 tree
4061 pushdecl_namespace_level (x)
4062      tree x;
4063 {
4064   register struct binding_level *b = current_binding_level;
4065   register tree t;
4066
4067   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4068
4069   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4070      what we want.  */
4071   if (TREE_CODE (x) == TYPE_DECL)
4072     {
4073       tree name = DECL_NAME (x);
4074       tree newval;
4075       tree *ptr = (tree *)0;
4076       for (; b != global_binding_level; b = b->level_chain)
4077         {
4078           tree shadowed = b->type_shadowed;
4079           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4080             if (TREE_PURPOSE (shadowed) == name)
4081               {
4082                 ptr = &TREE_VALUE (shadowed);
4083                 /* Can't break out of the loop here because sometimes
4084                    a binding level will have duplicate bindings for
4085                    PT names.  It's gross, but I haven't time to fix it.  */
4086               }
4087         }
4088       newval = TREE_TYPE (x);
4089       if (ptr == (tree *)0)
4090         {
4091           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4092              up here if this is changed to an assertion.  --KR  */
4093           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4094         }
4095       else
4096         {
4097           *ptr = newval;
4098         }
4099     }
4100   return t;
4101 }
4102
4103 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4104    if appropriate.  */
4105
4106 tree
4107 pushdecl_top_level (x)
4108      tree x;
4109 {
4110   push_to_top_level ();
4111   x = pushdecl_namespace_level (x);
4112   pop_from_top_level ();
4113   return x;
4114 }
4115
4116 /* Make the declaration of X appear in CLASS scope.  */
4117
4118 void
4119 pushdecl_class_level (x)
4120      tree x;
4121 {
4122   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4123      scope looks for the pre-mangled name.  */
4124   register tree name;
4125
4126   if (TREE_CODE (x) == OVERLOAD)
4127     x = OVL_CURRENT (x);
4128   name = DECL_NAME (x);
4129
4130   if (name)
4131     {
4132       push_class_level_binding (name, x);
4133       if (TREE_CODE (x) == TYPE_DECL)
4134         set_identifier_type_value (name, TREE_TYPE (x));
4135     }
4136   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4137     {
4138       tree f;
4139
4140       for (f = TYPE_FIELDS (TREE_TYPE (x));
4141            f;
4142            f = TREE_CHAIN (f))
4143         pushdecl_class_level (f);
4144     }
4145 }
4146
4147 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4148    DECL, or a modified version thereof.  */
4149
4150 tree
4151 maybe_push_decl (decl)
4152      tree decl;
4153 {
4154   tree type = TREE_TYPE (decl);
4155
4156   /* Add this decl to the current binding level, but not if it comes
4157      from another scope, e.g. a static member variable.  TEM may equal
4158      DECL or it may be a previous decl of the same name.  */
4159   if ((TREE_CODE (decl) != PARM_DECL 
4160        && DECL_CONTEXT (decl) != NULL_TREE 
4161        /* Definitions of namespace members outside their namespace are
4162           possible. */
4163        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4164       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4165       || TREE_CODE (type) == UNKNOWN_TYPE
4166       /* The declaration of a template specialization does not affect
4167          the functions available for overload resolution, so we do not
4168          call pushdecl.  */
4169       || (TREE_CODE (decl) == FUNCTION_DECL
4170           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4171     return decl;
4172   else
4173     return pushdecl (decl);
4174 }
4175
4176 #if 0
4177 /* This function is used to push the mangled decls for nested types into
4178    the appropriate scope.  Previously pushdecl_top_level was used, but that
4179    is incorrect for members of local classes.  */
4180
4181 void
4182 pushdecl_nonclass_level (x)
4183      tree x;
4184 {
4185   struct binding_level *b = current_binding_level;
4186
4187   my_friendly_assert (b->parm_flag != 2, 180);
4188
4189 #if 0
4190   /* Get out of template binding levels */
4191   while (b->pseudo_global)
4192     b = b->level_chain;
4193 #endif
4194
4195   pushdecl_with_scope (x, b);
4196 }
4197 #endif
4198
4199 /* Make the declaration(s) of X appear in CLASS scope
4200    under the name NAME.  */
4201
4202 void
4203 push_class_level_binding (name, x)
4204      tree name;
4205      tree x;
4206 {
4207   tree binding;
4208   /* The class_binding_level will be NULL if x is a template 
4209      parameter name in a member template.  */
4210   if (!class_binding_level)
4211     return;
4212
4213   /* Make sure that this new member does not have the same name
4214      as a template parameter.  */
4215   if (TYPE_BEING_DEFINED (current_class_type))
4216     check_template_shadow (x);
4217
4218   /* If this declaration shadows a declaration from an enclosing
4219      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4220      we leave this class.  Record the shadowed declaration here.  */
4221   binding = IDENTIFIER_BINDING (name);
4222   if (binding 
4223       && ((TREE_CODE (x) == OVERLOAD
4224            && BINDING_VALUE (binding)
4225            && is_overloaded_fn (BINDING_VALUE (binding)))
4226           || INHERITED_VALUE_BINDING_P (binding)))
4227     {
4228       tree shadow;
4229       tree old_decl;
4230
4231       /* If the old binding was from a base class, and was for a tag
4232          name, slide it over to make room for the new binding.  The
4233          old binding is still visible if explicitly qualified with a
4234          class-key.  */
4235       if (INHERITED_VALUE_BINDING_P (binding)
4236           && BINDING_VALUE (binding)
4237           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4238           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4239           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4240         {
4241           old_decl = BINDING_TYPE (binding);
4242           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4243           BINDING_VALUE (binding) = NULL_TREE;
4244           INHERITED_VALUE_BINDING_P (binding) = 0;
4245         }
4246       else
4247         old_decl = BINDING_VALUE (binding);
4248
4249       /* There was already a binding for X containing fewer
4250          functions than are named in X.  Find the previous
4251          declaration of X on the class-shadowed list, and update it.  */
4252       for (shadow = class_binding_level->class_shadowed;
4253            shadow;
4254            shadow = TREE_CHAIN (shadow))
4255         if (TREE_PURPOSE (shadow) == name
4256             && TREE_TYPE (shadow) == old_decl)
4257           {
4258             BINDING_VALUE (binding) = x;
4259             INHERITED_VALUE_BINDING_P (binding) = 0;
4260             TREE_TYPE (shadow) = x;
4261             return;
4262           }
4263     }
4264
4265   /* If we didn't replace an existing binding, put the binding on the
4266      stack of bindings for the identifier, and update
4267      IDENTIFIER_CLASS_VALUE.  */
4268   if (push_class_binding (name, x))
4269     {
4270       class_binding_level->class_shadowed
4271         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4272                      class_binding_level->class_shadowed);
4273       /* Record the value we are binding NAME to so that we can know
4274          what to pop later.  */
4275       TREE_TYPE (class_binding_level->class_shadowed) = x;
4276     }
4277 }
4278
4279 /* Insert another USING_DECL into the current binding level,
4280    returning this declaration. If this is a redeclaration,
4281    do nothing and return NULL_TREE.  */
4282
4283 tree
4284 push_using_decl (scope, name)
4285      tree scope;
4286      tree name;
4287 {
4288   tree decl;
4289   
4290   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4291   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4292   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4293     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4294       break;
4295   if (decl)
4296     return NULL_TREE;
4297   decl = build_lang_decl (USING_DECL, name, void_type_node);
4298   DECL_INITIAL (decl) = scope;
4299   TREE_CHAIN (decl) = current_binding_level->usings;
4300   current_binding_level->usings = decl;
4301   return decl;
4302 }
4303
4304 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4305    changed (i.e. there was already a directive), or the fresh
4306    TREE_LIST otherwise.  */
4307
4308 tree
4309 push_using_directive (used)
4310      tree used;
4311 {
4312   tree ud = current_binding_level->using_directives;
4313   tree iter, ancestor;
4314   
4315   /* Check if we already have this. */
4316   if (purpose_member (used, ud) != NULL_TREE)
4317     return NULL_TREE;
4318
4319   /* Recursively add all namespaces used. */
4320   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4321     push_using_directive (TREE_PURPOSE (iter));
4322
4323   ancestor = namespace_ancestor (current_decl_namespace (), used);
4324   ud = current_binding_level->using_directives;
4325   ud = tree_cons (used, ancestor, ud);
4326   current_binding_level->using_directives = ud;
4327   return ud;
4328 }
4329
4330 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4331    other definitions already in place.  We get around this by making
4332    the value of the identifier point to a list of all the things that
4333    want to be referenced by that name.  It is then up to the users of
4334    that name to decide what to do with that list.
4335
4336    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4337    slot.  It is dealt with the same way.
4338
4339    FLAGS is a bitwise-or of the following values:
4340      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4341                  namespace scope.
4342      PUSH_USING: DECL is being pushed as the result of a using
4343                  declaration. 
4344
4345    The value returned may be a previous declaration if we guessed wrong
4346    about what language DECL should belong to (C or C++).  Otherwise,
4347    it's always DECL (and never something that's not a _DECL).  */
4348
4349 tree
4350 push_overloaded_decl (decl, flags)
4351      tree decl;
4352      int flags;
4353 {
4354   tree name = DECL_NAME (decl);
4355   tree old;
4356   tree new_binding;
4357   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4358
4359   if (doing_global)
4360     old = namespace_binding (name, DECL_CONTEXT (decl));
4361   else
4362     old = lookup_name_current_level (name);
4363
4364   if (old)
4365     {
4366       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4367         {
4368           tree t = TREE_TYPE (old);
4369           if (IS_AGGR_TYPE (t) && warn_shadow
4370               && (! DECL_IN_SYSTEM_HEADER (decl)
4371                   || ! DECL_IN_SYSTEM_HEADER (old)))
4372             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4373           old = NULL_TREE;
4374         }
4375       else if (is_overloaded_fn (old))
4376         {
4377           tree tmp;
4378           
4379           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4380             {
4381               tree fn = OVL_CURRENT (tmp);
4382
4383               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4384                   && !(flags & PUSH_USING)
4385                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4386                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4387                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4388                           decl, fn);
4389               
4390               if (duplicate_decls (decl, fn))
4391                 return fn;
4392             }
4393         }
4394       else
4395         {
4396           cp_error_at ("previous non-function declaration `%#D'", old);
4397           cp_error ("conflicts with function declaration `%#D'", decl);
4398           return decl;
4399         }
4400     }
4401
4402   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4403     {
4404       if (old && TREE_CODE (old) != OVERLOAD)
4405         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4406       else
4407         new_binding = ovl_cons (decl, old);
4408       if (flags & PUSH_USING)
4409         OVL_USED (new_binding) = 1;
4410     }
4411   else
4412     /* NAME is not ambiguous.  */
4413     new_binding = decl;
4414
4415   if (doing_global)
4416     set_namespace_binding (name, current_namespace, new_binding);
4417   else
4418     {
4419       /* We only create an OVERLOAD if there was a previous binding at
4420          this level, or if decl is a template. In the former case, we
4421          need to remove the old binding and replace it with the new
4422          binding.  We must also run through the NAMES on the binding
4423          level where the name was bound to update the chain.  */
4424
4425       if (TREE_CODE (new_binding) == OVERLOAD && old)
4426         {
4427           tree *d;
4428           
4429           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4430                *d;
4431                d = &TREE_CHAIN (*d))
4432             if (*d == old
4433                 || (TREE_CODE (*d) == TREE_LIST
4434                     && TREE_VALUE (*d) == old))
4435               {
4436                 if (TREE_CODE (*d) == TREE_LIST)
4437                   /* Just replace the old binding with the new.  */
4438                   TREE_VALUE (*d) = new_binding;
4439                 else
4440                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4441                   *d = tree_cons (NULL_TREE, new_binding, 
4442                                   TREE_CHAIN (*d));
4443
4444                 /* And update the CPLUS_BINDING node.  */
4445                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4446                   = new_binding;
4447                 return decl;
4448               }
4449
4450           /* We should always find a previous binding in this case.  */
4451           my_friendly_abort (0);
4452         }
4453
4454       /* Install the new binding.  */
4455       push_local_binding (name, new_binding, flags);
4456     }
4457
4458   return decl;
4459 }
4460 \f
4461 /* Generate an implicit declaration for identifier FUNCTIONID
4462    as a function of type int ().  Print a warning if appropriate.  */
4463
4464 tree
4465 implicitly_declare (functionid)
4466      tree functionid;
4467 {
4468   register tree decl;
4469   int temp = allocation_temporary_p ();
4470
4471   push_obstacks_nochange ();
4472
4473   /* Save the decl permanently so we can warn if definition follows.
4474      In ANSI C, warn_implicit is usually false, so the saves little space.
4475      But in C++, it's usually true, hence the extra code.  */
4476   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4477     end_temporary_allocation ();
4478
4479   /* We used to reuse an old implicit decl here,
4480      but this loses with inline functions because it can clobber
4481      the saved decl chains.  */
4482   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4483
4484   DECL_EXTERNAL (decl) = 1;
4485   TREE_PUBLIC (decl) = 1;
4486
4487   /* ANSI standard says implicit declarations are in the innermost block.
4488      So we record the decl in the standard fashion.  */
4489   pushdecl (decl);
4490   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4491
4492   if (warn_implicit
4493       /* Only one warning per identifier.  */
4494       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4495     {
4496       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4497     }
4498
4499   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4500
4501   pop_obstacks ();
4502
4503   return decl;
4504 }
4505
4506 /* Return zero if the declaration NEWDECL is valid
4507    when the declaration OLDDECL (assumed to be for the same name)
4508    has already been seen.
4509    Otherwise return an error message format string with a %s
4510    where the identifier should go.  */
4511
4512 static const char *
4513 redeclaration_error_message (newdecl, olddecl)
4514      tree newdecl, olddecl;
4515 {
4516   if (TREE_CODE (newdecl) == TYPE_DECL)
4517     {
4518       /* Because C++ can put things into name space for free,
4519          constructs like "typedef struct foo { ... } foo"
4520          would look like an erroneous redeclaration.  */
4521       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4522         return 0;
4523       else
4524         return "redefinition of `%#D'";
4525     }
4526   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4527     {
4528       /* If this is a pure function, its olddecl will actually be
4529          the original initialization to `0' (which we force to call
4530          abort()).  Don't complain about redefinition in this case.  */
4531       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4532         return 0;
4533
4534       /* If both functions come from different namespaces, this is not
4535          a redeclaration - this is a conflict with a used function. */
4536       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4537           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4538         return "`%D' conflicts with used function";
4539
4540       /* We'll complain about linkage mismatches in
4541          warn_extern_redeclared_static.  */
4542
4543       /* Defining the same name twice is no good.  */
4544       if (DECL_INITIAL (olddecl) != NULL_TREE
4545           && DECL_INITIAL (newdecl) != NULL_TREE)
4546         {
4547           if (DECL_NAME (olddecl) == NULL_TREE)
4548             return "`%#D' not declared in class";
4549           else
4550             return "redefinition of `%#D'";
4551         }
4552       return 0;
4553     }
4554   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4555     {
4556       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4557            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4558            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4559           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4560               && TYPE_SIZE (TREE_TYPE (newdecl))
4561               && TYPE_SIZE (TREE_TYPE (olddecl))))
4562         return "redefinition of `%#D'";
4563       return 0;
4564     }
4565   else if (toplevel_bindings_p ())
4566     {
4567       /* Objects declared at top level:  */
4568       /* If at least one is a reference, it's ok.  */
4569       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4570         return 0;
4571       /* Reject two definitions.  */
4572       return "redefinition of `%#D'";
4573     }
4574   else
4575     {
4576       /* Objects declared with block scope:  */
4577       /* Reject two definitions, and reject a definition
4578          together with an external reference.  */
4579       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4580         return "redeclaration of `%#D'";
4581       return 0;
4582     }
4583 }
4584 \f
4585 /* Create a new label, named ID.  */
4586
4587 static tree
4588 make_label_decl (id, local_p)
4589      tree id;
4590      int local_p;
4591 {
4592   tree decl;
4593
4594   decl = build_decl (LABEL_DECL, id, void_type_node);
4595   if (expanding_p)
4596     /* Make sure every label has an rtx.  */
4597     label_rtx (decl);
4598
4599   DECL_CONTEXT (decl) = current_function_decl;
4600   DECL_MODE (decl) = VOIDmode;
4601   C_DECLARED_LABEL_FLAG (decl) = local_p;
4602
4603   /* Say where one reference is to the label, for the sake of the
4604      error if it is not defined.  */
4605   DECL_SOURCE_LINE (decl) = lineno;
4606   DECL_SOURCE_FILE (decl) = input_filename;
4607
4608   /* Record the fact that this identifier is bound to this label.  */
4609   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4610
4611   /* Record this label on the list of used labels so that we can check
4612      at the end of the function to see whether or not the label was
4613      actually defined.  */
4614   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4615       && (named_label_uses == NULL
4616           || named_label_uses->names_in_scope != current_binding_level->names
4617           || named_label_uses->label_decl != decl))
4618     {
4619       struct named_label_list *new_ent;
4620       new_ent
4621         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4622       new_ent->label_decl = decl;
4623       new_ent->names_in_scope = current_binding_level->names;
4624       new_ent->binding_level = current_binding_level;
4625       new_ent->lineno_o_goto = lineno;
4626       new_ent->filename_o_goto = input_filename;
4627       new_ent->next = named_label_uses;
4628       named_label_uses = new_ent;
4629     }
4630
4631   return decl;
4632 }
4633
4634 /* Look for a label named ID in the current function.  If one cannot
4635    be found, create one.  (We keep track of used, but undefined,
4636    labels, and complain about them at the end of a function.)  */
4637
4638 tree 
4639 lookup_label (id)
4640      tree id;
4641 {
4642   tree decl;
4643
4644   /* You can't use labels at global scope.  */
4645   if (current_function_decl == NULL_TREE)
4646     {
4647       error ("label `%s' referenced outside of any function",
4648              IDENTIFIER_POINTER (id));
4649       return NULL_TREE;
4650     }
4651   
4652   /* See if we've already got this label.  */
4653   decl = IDENTIFIER_LABEL_VALUE (id);
4654   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4655     return decl;
4656
4657   /* Record this label on the list of labels used in this function.
4658      We do this before calling make_label_decl so that we get the
4659      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4660   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4661                             named_labels);
4662   /* We need a new label.  */
4663   decl = make_label_decl (id, /*local_p=*/0);
4664   /* Now fill in the information we didn't have before.  */
4665   TREE_VALUE (named_labels) = decl;
4666
4667   return decl;
4668 }
4669
4670 /* Declare a local label named ID.  */
4671
4672 tree
4673 declare_local_label (id)
4674      tree id;
4675 {
4676   tree decl;
4677
4678   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4679      this scope we can restore the old value of
4680      IDENTIFIER_TYPE_VALUE.  */
4681   current_binding_level->shadowed_labels 
4682     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4683                  current_binding_level->shadowed_labels);
4684   /* Look for the label.  */
4685   decl = make_label_decl (id, /*local_p=*/1);
4686   /* Now fill in the information we didn't have before.  */
4687   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4688   
4689   return decl;
4690 }
4691
4692 /* Define a label, specifying the location in the source file.
4693    Return the LABEL_DECL node for the label, if the definition is valid.
4694    Otherwise return 0.  */
4695
4696 tree
4697 define_label (filename, line, name)
4698      char *filename;
4699      int line;
4700      tree name;
4701 {
4702   tree decl = lookup_label (name);
4703
4704   /* After labels, make any new cleanups go into their
4705      own new (temporary) binding contour.  */
4706   current_binding_level->more_cleanups_ok = 0;
4707
4708   if (name == get_identifier ("wchar_t"))
4709     cp_pedwarn ("label named wchar_t");
4710
4711   if (DECL_INITIAL (decl) != NULL_TREE)
4712     {
4713       cp_error ("duplicate label `%D'", decl);
4714       return 0;
4715     }
4716   else
4717     {
4718       struct named_label_list *uses, *prev;
4719       int identified = 0;
4720       int saw_eh = 0;
4721
4722       /* Mark label as having been defined.  */
4723       DECL_INITIAL (decl) = error_mark_node;
4724       /* Say where in the source.  */
4725       DECL_SOURCE_FILE (decl) = filename;
4726       DECL_SOURCE_LINE (decl) = line;
4727
4728       prev = NULL;
4729       uses = named_label_uses;
4730       while (uses != NULL)
4731         if (uses->label_decl == decl)
4732           {
4733             struct binding_level *b = current_binding_level;
4734             while (b)
4735               {
4736                 tree new_decls = b->names;
4737                 tree old_decls = (b == uses->binding_level)
4738                                   ? uses->names_in_scope : NULL_TREE;
4739                 while (new_decls != old_decls)
4740                   {
4741                     if (TREE_CODE (new_decls) == VAR_DECL
4742                         /* Don't complain about crossing initialization
4743                            of internal entities.  They can't be accessed,
4744                            and they should be cleaned up
4745                            by the time we get to the label.  */
4746                         && ! DECL_ARTIFICIAL (new_decls)
4747                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4748                              && pod_type_p (TREE_TYPE (new_decls))))
4749                       {
4750                         /* This is really only important if we're crossing
4751                            an initialization.  The POD stuff is just
4752                            pedantry; why should it matter if the class
4753                            contains a field of pointer to member type?  */
4754                         int problem = (DECL_INITIAL (new_decls)
4755                                        || (TYPE_NEEDS_CONSTRUCTING
4756                                            (TREE_TYPE (new_decls))));
4757
4758                         if (! identified)
4759                           {
4760                             if (problem)
4761                               {
4762                                 cp_error ("jump to label `%D'", decl);
4763                                 error_with_file_and_line
4764                                   (uses->filename_o_goto,
4765                                    uses->lineno_o_goto, "  from here");
4766                               }
4767                             else
4768                               {
4769                                 cp_pedwarn ("jump to label `%D'", decl);
4770                                 pedwarn_with_file_and_line
4771                                   (uses->filename_o_goto,
4772                                    uses->lineno_o_goto, "  from here");
4773                               }
4774                             identified = 1;
4775                           }
4776
4777                         if (problem)
4778                           cp_error_at ("  crosses initialization of `%#D'",
4779                                        new_decls);
4780                         else
4781                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4782                                          new_decls);
4783                       }
4784                     new_decls = TREE_CHAIN (new_decls);
4785                   }
4786                 if (b == uses->binding_level)
4787                   break;
4788                 if (b->eh_region && ! saw_eh)
4789                   {
4790                     if (! identified)
4791                       {
4792                         cp_error ("jump to label `%D'", decl);
4793                         error_with_file_and_line
4794                           (uses->filename_o_goto,
4795                            uses->lineno_o_goto, "  from here");
4796                         identified = 1;
4797                       }
4798                     error ("  enters exception handling block");
4799                     saw_eh = 1;
4800                   }
4801                 b = b->level_chain;
4802               }
4803
4804             if (prev != NULL)
4805               prev->next = uses->next;
4806             else
4807               named_label_uses = uses->next;
4808
4809             uses = uses->next;
4810           }
4811         else
4812           {
4813             prev = uses;
4814             uses = uses->next;
4815           }
4816       current_function_return_value = NULL_TREE;
4817       return decl;
4818     }
4819 }
4820
4821 struct cp_switch
4822 {
4823   struct binding_level *level;
4824   struct cp_switch *next;
4825 };
4826
4827 static struct cp_switch *switch_stack;
4828
4829 void
4830 push_switch ()
4831 {
4832   struct cp_switch *p
4833     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4834   p->level = current_binding_level;
4835   p->next = switch_stack;
4836   switch_stack = p;
4837 }
4838
4839 void
4840 pop_switch ()
4841 {
4842   switch_stack = switch_stack->next;
4843 }
4844
4845 /* Note that we've seen a definition of a case label, and complain if this
4846    is a bad place for one.  */
4847
4848 void
4849 define_case_label ()
4850 {
4851   tree cleanup = last_cleanup_this_contour ();
4852   struct binding_level *b = current_binding_level;
4853   int identified = 0;
4854
4855   if (! switch_stack)
4856     /* Don't crash; we'll complain in do_case.  */
4857     return;
4858   
4859   if (cleanup)
4860     {
4861       static int explained = 0;
4862       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4863       warning ("where case label appears here");
4864       if (!explained)
4865         {
4866           warning ("(enclose actions of previous case statements requiring");
4867           warning ("destructors in their own binding contours.)");
4868           explained = 1;
4869         }
4870     }
4871
4872   for (; b && b != switch_stack->level; b = b->level_chain)
4873     {
4874       tree new_decls = b->names;
4875       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4876         {
4877           if (TREE_CODE (new_decls) == VAR_DECL
4878               /* Don't complain about crossing initialization
4879                  of internal entities.  They can't be accessed,
4880                  and they should be cleaned up
4881                  by the time we get to the label.  */
4882               && ! DECL_ARTIFICIAL (new_decls)
4883               && ((DECL_INITIAL (new_decls) != NULL_TREE
4884                    && DECL_INITIAL (new_decls) != error_mark_node)
4885                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4886             {
4887               if (! identified)
4888                 error ("jump to case label");
4889               identified = 1;
4890               cp_error_at ("  crosses initialization of `%#D'",
4891                            new_decls);
4892             }
4893         }
4894     }
4895
4896   /* After labels, make any new cleanups go into their
4897      own new (temporary) binding contour.  */
4898
4899   current_binding_level->more_cleanups_ok = 0;
4900   current_function_return_value = NULL_TREE;
4901 }
4902 \f
4903 /* Return the list of declarations of the current level.
4904    Note that this list is in reverse order unless/until
4905    you nreverse it; and when you do nreverse it, you must
4906    store the result back using `storedecls' or you will lose.  */
4907
4908 tree
4909 getdecls ()
4910 {
4911   return current_binding_level->names;
4912 }
4913
4914 /* Return the list of type-tags (for structs, etc) of the current level.  */
4915
4916 tree
4917 gettags ()
4918 {
4919   return current_binding_level->tags;
4920 }
4921
4922 /* Store the list of declarations of the current level.
4923    This is done for the parameter declarations of a function being defined,
4924    after they are modified in the light of any missing parameters.  */
4925
4926 static void
4927 storedecls (decls)
4928      tree decls;
4929 {
4930   current_binding_level->names = decls;
4931 }
4932
4933 /* Similarly, store the list of tags of the current level.  */
4934
4935 void
4936 storetags (tags)
4937      tree tags;
4938 {
4939   current_binding_level->tags = tags;
4940 }
4941 \f
4942 /* Given NAME, an IDENTIFIER_NODE,
4943    return the structure (or union or enum) definition for that name.
4944    Searches binding levels from BINDING_LEVEL up to the global level.
4945    If THISLEVEL_ONLY is nonzero, searches only the specified context
4946    (but skips any tag-transparent contexts to find one that is
4947    meaningful for tags).
4948    FORM says which kind of type the caller wants;
4949    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4950    If the wrong kind of type is found, and it's not a template, an error is
4951    reported.  */
4952
4953 static tree
4954 lookup_tag (form, name, binding_level, thislevel_only)
4955      enum tree_code form;
4956      tree name;
4957      struct binding_level *binding_level;
4958      int thislevel_only;
4959 {
4960   register struct binding_level *level;
4961   /* Non-zero if, we should look past a pseudo-global level, even if
4962      THISLEVEL_ONLY.  */
4963   int allow_pseudo_global = 1;
4964
4965   for (level = binding_level; level; level = level->level_chain)
4966     {
4967       register tree tail;
4968       if (ANON_AGGRNAME_P (name))
4969         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4970           {
4971             /* There's no need for error checking here, because
4972                anon names are unique throughout the compilation.  */
4973             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4974               return TREE_VALUE (tail);
4975           }
4976       else if (level->namespace_p)
4977         /* Do namespace lookup. */
4978         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
4979           {
4980             tree old = binding_for_name (name, tail);
4981
4982             /* If we just skipped past a pseudo global level, even
4983                though THISLEVEL_ONLY, and we find a template class
4984                declaration, then we use the _TYPE node for the
4985                template.  See the example below.  */
4986             if (thislevel_only && !allow_pseudo_global
4987                 && old && BINDING_VALUE (old) 
4988                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
4989               old = TREE_TYPE (BINDING_VALUE (old));
4990             else 
4991               old = BINDING_TYPE (old);
4992
4993             /* If it has an original type, it is a typedef, and we
4994                should not return it.  */
4995             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
4996               old = NULL_TREE;
4997             if (old && TREE_CODE (old) != form
4998                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
4999               {
5000                 cp_error ("`%#D' redeclared as %C", old, form);
5001                 return NULL_TREE;
5002               }
5003             if (old)
5004               return old;
5005             if (thislevel_only || tail == global_namespace)
5006               return NULL_TREE;
5007           }
5008       else
5009         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5010           {
5011             if (TREE_PURPOSE (tail) == name)
5012               {
5013                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5014                 /* Should tighten this up; it'll probably permit
5015                    UNION_TYPE and a struct template, for example.  */
5016                 if (code != form
5017                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5018                   {
5019                     /* Definition isn't the kind we were looking for.  */
5020                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5021                               form);
5022                     return NULL_TREE;
5023                   }
5024                 return TREE_VALUE (tail);
5025               }
5026           }
5027       if (thislevel_only && ! level->tag_transparent)
5028         {
5029           if (level->pseudo_global && allow_pseudo_global)
5030             {
5031               /* We must deal with cases like this:
5032                  
5033                    template <class T> struct S;
5034                    template <class T> struct S {};
5035                    
5036                  When looking up `S', for the second declaration, we
5037                  would like to find the first declaration.  But, we
5038                  are in the pseudo-global level created for the
5039                  template parameters, rather than the (surrounding)
5040                  namespace level.  Thus, we keep going one more level,
5041                  even though THISLEVEL_ONLY is non-zero.  */
5042               allow_pseudo_global = 0;
5043               continue;
5044             }
5045           else
5046             return NULL_TREE;
5047         }
5048     }
5049   return NULL_TREE;
5050 }
5051
5052 #if 0
5053 void
5054 set_current_level_tags_transparency (tags_transparent)
5055      int tags_transparent;
5056 {
5057   current_binding_level->tag_transparent = tags_transparent;
5058 }
5059 #endif
5060
5061 /* Given a type, find the tag that was defined for it and return the tag name.
5062    Otherwise return 0.  However, the value can never be 0
5063    in the cases in which this is used.
5064
5065    C++: If NAME is non-zero, this is the new name to install.  This is
5066    done when replacing anonymous tags with real tag names.  */
5067
5068 static tree
5069 lookup_tag_reverse (type, name)
5070      tree type;
5071      tree name;
5072 {
5073   register struct binding_level *level;
5074
5075   for (level = current_binding_level; level; level = level->level_chain)
5076     {
5077       register tree tail;
5078       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5079         {
5080           if (TREE_VALUE (tail) == type)
5081             {
5082               if (name)
5083                 TREE_PURPOSE (tail) = name;
5084               return TREE_PURPOSE (tail);
5085             }
5086         }
5087     }
5088   return NULL_TREE;
5089 }
5090 \f
5091 /* Look up NAME in the NAMESPACE.  */
5092
5093 tree
5094 lookup_namespace_name (namespace, name)
5095      tree namespace, name;
5096 {
5097   tree val;
5098   tree template_id = NULL_TREE;
5099
5100   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5101
5102   if (TREE_CODE (name) == NAMESPACE_DECL)
5103     /* This happens for A::B<int> when B is a namespace. */
5104     return name;
5105   else if (TREE_CODE (name) == TEMPLATE_DECL)
5106     {
5107       /* This happens for A::B where B is a template, and there are no
5108          template arguments.  */
5109       cp_error ("invalid use of `%D'", name);
5110       return error_mark_node;
5111     }
5112
5113   namespace = ORIGINAL_NAMESPACE (namespace);
5114
5115   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5116     {
5117       template_id = name;
5118       name = TREE_OPERAND (name, 0);
5119       if (TREE_CODE (name) == OVERLOAD)
5120         name = DECL_NAME (OVL_CURRENT (name));
5121       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5122         name = DECL_NAME (name);
5123     }
5124
5125   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5126   
5127   val = make_node (CPLUS_BINDING);
5128   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5129     return error_mark_node;
5130
5131   if (BINDING_VALUE (val))
5132     {
5133       val = BINDING_VALUE (val);
5134
5135       if (template_id)
5136         {
5137           if (DECL_CLASS_TEMPLATE_P (val))
5138             val = lookup_template_class (val, 
5139                                          TREE_OPERAND (template_id, 1),
5140                                          /*in_decl=*/NULL_TREE,
5141                                          /*context=*/NULL_TREE,
5142                                          /*entering_scope=*/0);
5143           else if (DECL_FUNCTION_TEMPLATE_P (val)
5144                    || TREE_CODE (val) == OVERLOAD)
5145             val = lookup_template_function (val, 
5146                                             TREE_OPERAND (template_id, 1));
5147           else
5148             {
5149               cp_error ("`%D::%D' is not a template",
5150                         namespace, name);
5151               return error_mark_node;
5152             }
5153         }
5154
5155       /* If we have a single function from a using decl, pull it out.  */
5156       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5157         val = OVL_FUNCTION (val);
5158       return val;
5159     }
5160
5161   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5162   return error_mark_node;
5163 }
5164
5165 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5166
5167 static unsigned long
5168 typename_hash (k)
5169      hash_table_key k;
5170 {
5171   unsigned long hash;
5172   tree t;
5173
5174   t = (tree) k;
5175   hash = (((unsigned long) TYPE_CONTEXT (t))
5176           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5177
5178   return hash;
5179 }
5180
5181 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5182
5183 static boolean
5184 typename_compare (k1, k2)
5185      hash_table_key k1;
5186      hash_table_key k2;
5187 {
5188   tree t1;
5189   tree t2;
5190   tree d1;
5191   tree d2;
5192
5193   t1 = (tree) k1;
5194   t2 = (tree) k2;
5195   d1 = TYPE_NAME (t1);
5196   d2 = TYPE_NAME (t2);
5197   
5198   return (DECL_NAME (d1) == DECL_NAME (d2)
5199           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5200           && ((TREE_TYPE (t1) != NULL_TREE) 
5201               == (TREE_TYPE (t2) != NULL_TREE))
5202           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5203           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5204 }
5205
5206 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5207    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5208    is non-NULL, this type is being created by the implicit typename
5209    extension, and BASE_TYPE is a type named `t' in some base class of
5210    `T' which depends on template parameters.  
5211
5212    Returns the new TYPENAME_TYPE.  */
5213
5214 tree
5215 build_typename_type (context, name, fullname, base_type)
5216      tree context;
5217      tree name;
5218      tree fullname;
5219      tree base_type;
5220 {
5221   tree t;
5222   tree d;
5223   struct hash_entry* e;
5224
5225   static struct hash_table ht;
5226
5227   push_obstacks (&permanent_obstack, &permanent_obstack);
5228
5229   if (!ht.table)
5230     {
5231       static struct hash_table *h = &ht;
5232       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5233                             &typename_compare))
5234         fatal ("virtual memory exhausted");
5235       ggc_add_tree_hash_table_root (&h, 1);
5236     }
5237
5238   /* Build the TYPENAME_TYPE.  */
5239   t = make_lang_type (TYPENAME_TYPE);
5240   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5241   TYPENAME_TYPE_FULLNAME (t) = fullname;
5242   TREE_TYPE (t) = base_type;
5243
5244   /* Build the corresponding TYPE_DECL.  */
5245   d = build_decl (TYPE_DECL, name, t);
5246   TYPE_NAME (TREE_TYPE (d)) = d;
5247   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5248   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5249   DECL_ARTIFICIAL (d) = 1;
5250
5251   /* See if we already have this type.  */
5252   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5253   if (e)
5254     t = (tree) e->key;
5255   else
5256     /* Insert the type into the table.  */
5257     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5258
5259   pop_obstacks ();
5260
5261   return t;
5262 }
5263
5264 /* Resolve `typename CONTEXT::NAME'.  Returns an appropriate type,
5265    unless an error occurs, in which case error_mark_node is returned.
5266    If COMPLAIN zero, don't complain about any errors that occur.  */
5267
5268 tree
5269 make_typename_type (context, name, complain)
5270      tree context, name;
5271      int complain;
5272 {
5273   tree fullname;
5274
5275   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5276     {
5277       if (!(TYPE_LANG_SPECIFIC (name) 
5278             && (CLASSTYPE_IS_TEMPLATE (name) 
5279                 || CLASSTYPE_USE_TEMPLATE (name))))
5280         name = TYPE_IDENTIFIER (name);
5281       else
5282         /* Create a TEMPLATE_ID_EXPR for the type.  */
5283         name = build_nt (TEMPLATE_ID_EXPR,
5284                          CLASSTYPE_TI_TEMPLATE (name),
5285                          CLASSTYPE_TI_ARGS (name));
5286     }
5287   else if (TREE_CODE (name) == TYPE_DECL)
5288     name = DECL_NAME (name);
5289
5290   fullname = name;
5291
5292   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5293     {
5294       name = TREE_OPERAND (name, 0);
5295       if (TREE_CODE (name) == TEMPLATE_DECL)
5296         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5297     }
5298   if (TREE_CODE (name) != IDENTIFIER_NODE)
5299     my_friendly_abort (2000);
5300
5301   if (TREE_CODE (context) == NAMESPACE_DECL)
5302     {
5303       /* We can get here from typename_sub0 in the explicit_template_type
5304          expansion.  Just fail.  */
5305       if (complain)
5306         cp_error ("no class template named `%#T' in `%#T'",
5307                   name, context);
5308       return error_mark_node;
5309     }
5310
5311   if (! uses_template_parms (context)
5312       || currently_open_class (context))
5313     {
5314       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5315         {
5316           tree tmpl = NULL_TREE;
5317           if (IS_AGGR_TYPE (context))
5318             tmpl = lookup_field (context, name, 0, 0);
5319           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5320             {
5321               if (complain)
5322                 cp_error ("no class template named `%#T' in `%#T'",
5323                           name, context);
5324               return error_mark_node;
5325             }
5326
5327           return lookup_template_class (tmpl, 
5328                                         TREE_OPERAND (fullname, 1),
5329                                         NULL_TREE, context, 
5330                                         /*entering_scope=*/0);
5331         }
5332       else
5333         {
5334           tree t;
5335           
5336           if (!IS_AGGR_TYPE (context))
5337             {
5338               if (complain)
5339                 cp_error ("no type named `%#T' in `%#T'", name, context);
5340               return error_mark_node;
5341             }
5342
5343           t = lookup_field (context, name, 0, 1);
5344           if (t)
5345             return TREE_TYPE (t);
5346         }
5347     }
5348
5349   /* If the CONTEXT is not a template type, then either the field is
5350      there now or its never going to be.  */
5351   if (!uses_template_parms (context))
5352     {
5353       if (complain)
5354         cp_error ("no type named `%#T' in `%#T'", name, context);
5355       return error_mark_node;
5356     }
5357     
5358   
5359   return build_typename_type (context, name, fullname,  NULL_TREE);
5360 }
5361
5362 /* Select the right _DECL from multiple choices. */
5363
5364 static tree
5365 select_decl (binding, flags)
5366      tree binding;
5367      int flags;
5368 {
5369   tree val;
5370   val = BINDING_VALUE (binding);
5371   if (LOOKUP_NAMESPACES_ONLY (flags))
5372     {
5373       /* We are not interested in types. */
5374       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5375         return val;
5376       return NULL_TREE;
5377     }
5378   
5379   /* If we could have a type and
5380      we have nothing or we need a type and have none.  */
5381   if (BINDING_TYPE (binding)
5382       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5383                    && TREE_CODE (val) != TYPE_DECL)))
5384     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5385   /* Don't return non-types if we really prefer types. */
5386   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5387            && (TREE_CODE (val) != TEMPLATE_DECL
5388                || !DECL_CLASS_TEMPLATE_P (val)))
5389     val = NULL_TREE;
5390
5391   return val;
5392 }
5393
5394 /* Unscoped lookup of a global: iterate over current namespaces,
5395    considering using-directives.  If SPACESP is non-NULL, store a list
5396    of the namespaces we've considered in it.  */
5397
5398 tree
5399 unqualified_namespace_lookup (name, flags, spacesp)
5400      tree name;
5401      int flags;
5402      tree *spacesp;
5403 {
5404   tree b = make_node (CPLUS_BINDING);
5405   tree initial = current_decl_namespace();
5406   tree scope = initial;
5407   tree siter;
5408   struct binding_level *level;
5409   tree val = NULL_TREE;
5410
5411   if (spacesp)
5412     *spacesp = NULL_TREE;
5413
5414   for (; !val; scope = CP_DECL_CONTEXT (scope))
5415     {
5416       if (spacesp)
5417         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5418       val = binding_for_name (name, scope);
5419
5420       /* Initialize binding for this context. */
5421       BINDING_VALUE (b) = BINDING_VALUE (val);
5422       BINDING_TYPE (b) = BINDING_TYPE (val);
5423
5424       /* Add all _DECLs seen through local using-directives. */
5425       for (level = current_binding_level; 
5426            !level->namespace_p;
5427            level = level->level_chain)
5428         if (!lookup_using_namespace (name, b, level->using_directives,
5429                                      scope, flags, spacesp))
5430           /* Give up because of error. */
5431           return error_mark_node;
5432
5433       /* Add all _DECLs seen through global using-directives. */
5434       /* XXX local and global using lists should work equally. */
5435       siter = initial;
5436       while (1)
5437         {
5438           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5439                                        scope, flags, spacesp))
5440             /* Give up because of error. */
5441             return error_mark_node;
5442           if (siter == scope) break;
5443           siter = CP_DECL_CONTEXT (siter);
5444         }
5445
5446       val = select_decl (b, flags);
5447       if (scope == global_namespace)
5448         break;
5449     }
5450   return val;
5451 }
5452
5453 /* Combine prefer_type and namespaces_only into flags.  */
5454
5455 static int
5456 lookup_flags (prefer_type, namespaces_only)
5457   int prefer_type, namespaces_only;
5458 {
5459   if (namespaces_only)
5460     return LOOKUP_PREFER_NAMESPACES;
5461   if (prefer_type > 1)
5462     return LOOKUP_PREFER_TYPES;
5463   if (prefer_type > 0)
5464     return LOOKUP_PREFER_BOTH;
5465   return 0;
5466 }
5467
5468 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5469    ignore it or not.  Subroutine of lookup_name_real.  */
5470
5471 static tree
5472 qualify_lookup (val, flags)
5473      tree val;
5474      int flags;
5475 {
5476   if (val == NULL_TREE)
5477     return val;
5478   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5479     return val;
5480   if ((flags & LOOKUP_PREFER_TYPES)
5481       && (TREE_CODE (val) == TYPE_DECL
5482           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5483               && DECL_CLASS_TEMPLATE_P (val))))
5484     return val;
5485   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5486     return NULL_TREE;
5487   return val;
5488 }
5489
5490 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5491    that.  */
5492
5493 static void
5494 warn_about_implicit_typename_lookup (typename, binding)
5495      tree typename;
5496      tree binding;
5497 {
5498   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5499   tree name = DECL_NAME (typename);
5500
5501   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5502          && CLASSTYPE_TEMPLATE_INFO (subtype)
5503          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5504       && ! (TREE_CODE (binding) == TYPE_DECL
5505             && same_type_p (TREE_TYPE (binding), subtype)))
5506     {
5507       cp_warning ("lookup of `%D' finds `%#D'", 
5508                   name, binding);
5509       cp_warning ("  instead of `%D' from dependent base class",
5510                   typename);
5511       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5512                   constructor_name (current_class_type), name);
5513     }
5514 }
5515
5516 /* Look up NAME in the current binding level and its superiors in the
5517    namespace of variables, functions and typedefs.  Return a ..._DECL
5518    node of some kind representing its definition if there is only one
5519    such declaration, or return a TREE_LIST with all the overloaded
5520    definitions if there are many, or return 0 if it is undefined.
5521
5522    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5523    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5524    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5525    Otherwise we prefer non-TYPE_DECLs.  
5526
5527    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5528    using IDENTIFIER_CLASS_VALUE.  */
5529
5530 static tree
5531 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5532      tree name;
5533      int prefer_type, nonclass, namespaces_only;
5534 {
5535   tree t;
5536   tree val = NULL_TREE;
5537   int yylex = 0;
5538   tree from_obj = NULL_TREE;
5539   int flags;
5540   int val_is_implicit_typename = 0;
5541
5542   /* Hack: copy flag set by parser, if set. */
5543   if (only_namespace_names)
5544     namespaces_only = 1;
5545
5546   if (prefer_type == -2)
5547     {
5548       extern int looking_for_typename;
5549       tree type = NULL_TREE;
5550
5551       yylex = 1;
5552       prefer_type = looking_for_typename;
5553
5554       flags = lookup_flags (prefer_type, namespaces_only);
5555       /* If the next thing is '<', class templates are types. */
5556       if (looking_for_template)
5557         flags |= LOOKUP_TEMPLATES_EXPECTED;
5558
5559       /* std:: becomes :: for now.  */
5560       if (got_scope == std_node)
5561         got_scope = void_type_node;
5562
5563       if (got_scope)
5564         type = got_scope;
5565       else if (got_object != error_mark_node)
5566         type = got_object;
5567       
5568       if (type)
5569         {
5570           if (type == error_mark_node)
5571             return error_mark_node;
5572           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5573             type = TREE_TYPE (type);
5574
5575           if (TYPE_P (type))
5576             type = complete_type (type);
5577
5578           if (TREE_CODE (type) == VOID_TYPE)
5579             type = global_namespace;
5580           if (TREE_CODE (type) == NAMESPACE_DECL)
5581             {
5582               val = make_node (CPLUS_BINDING);
5583               flags |= LOOKUP_COMPLAIN;
5584               if (!qualified_lookup_using_namespace (name, type, val, flags))
5585                 return NULL_TREE;
5586               val = select_decl (val, flags);
5587             }
5588           else if (! IS_AGGR_TYPE (type)
5589                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5590                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5591                    || TREE_CODE (type) == TYPENAME_TYPE)
5592             /* Someone else will give an error about this if needed.  */
5593             val = NULL_TREE;
5594           else if (type == current_class_type)
5595             val = IDENTIFIER_CLASS_VALUE (name);
5596           else
5597             val = lookup_member (type, name, 0, prefer_type);
5598         }
5599       else
5600         val = NULL_TREE;
5601
5602       if (got_scope)
5603         goto done;
5604       else if (got_object && val)
5605         from_obj = val;
5606     }
5607   else
5608     {
5609       flags = lookup_flags (prefer_type, namespaces_only);
5610       /* If we're not parsing, we need to complain. */
5611       flags |= LOOKUP_COMPLAIN;
5612     }
5613
5614   /* First, look in non-namespace scopes.  */
5615
5616   if (current_class_type == NULL_TREE)
5617     nonclass = 1;
5618
5619   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5620     {
5621       tree binding;
5622
5623       if (!LOCAL_BINDING_P (t) && nonclass)
5624         /* We're not looking for class-scoped bindings, so keep going.  */
5625         continue;
5626       
5627       /* If this is the kind of thing we're looking for, we're done.  */
5628       if (qualify_lookup (BINDING_VALUE (t), flags))
5629         binding = BINDING_VALUE (t);
5630       else if ((flags & LOOKUP_PREFER_TYPES) 
5631                && qualify_lookup (BINDING_TYPE (t), flags))
5632         binding = BINDING_TYPE (t);
5633       else
5634         binding = NULL_TREE;
5635
5636       if (binding
5637           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5638         {
5639           if (val_is_implicit_typename && !yylex)
5640             warn_about_implicit_typename_lookup (val, binding);
5641           val = binding;
5642           val_is_implicit_typename 
5643             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5644           if (!val_is_implicit_typename)
5645             break;
5646         }
5647     }
5648
5649   /* Now lookup in namespace scopes.  */
5650   if (!val || val_is_implicit_typename)
5651     {
5652       t = unqualified_namespace_lookup (name, flags, 0);
5653       if (t)
5654         {
5655           if (val_is_implicit_typename && !yylex)
5656             warn_about_implicit_typename_lookup (val, t);
5657           val = t;
5658         }
5659     }
5660
5661  done:
5662   if (val)
5663     {
5664       /* This should only warn about types used in qualified-ids.  */
5665       if (from_obj && from_obj != val)
5666         {
5667           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5668               && TREE_CODE (val) == TYPE_DECL
5669               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5670             {
5671               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5672                           name, got_object, TREE_TYPE (from_obj));
5673               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5674                           TREE_TYPE (val));
5675             }
5676
5677           /* We don't change val to from_obj if got_object depends on
5678              template parms because that breaks implicit typename for
5679              destructor calls.  */
5680           if (! uses_template_parms (got_object))
5681             val = from_obj;
5682         }
5683
5684       /* If we have a single function from a using decl, pull it out.  */
5685       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5686         val = OVL_FUNCTION (val);
5687     }
5688   else if (from_obj)
5689     val = from_obj;
5690
5691   return val;
5692 }
5693
5694 tree
5695 lookup_name_nonclass (name)
5696      tree name;
5697 {
5698   return lookup_name_real (name, 0, 1, 0);
5699 }
5700
5701 tree
5702 lookup_function_nonclass (name, args)
5703      tree name;
5704      tree args;
5705 {
5706   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5707 }
5708
5709 tree
5710 lookup_name_namespace_only (name)
5711      tree name;
5712 {
5713   /* type-or-namespace, nonclass, namespace_only */
5714   return lookup_name_real (name, 1, 1, 1);
5715 }
5716
5717 tree
5718 lookup_name (name, prefer_type)
5719      tree name;
5720      int prefer_type;
5721 {
5722   return lookup_name_real (name, prefer_type, 0, 0);
5723 }
5724
5725 /* Similar to `lookup_name' but look only in the innermost non-class
5726    binding level.  */
5727
5728 tree
5729 lookup_name_current_level (name)
5730      tree name;
5731 {
5732   struct binding_level *b;
5733   tree t = NULL_TREE;
5734
5735   b = current_binding_level;
5736   while (b->parm_flag == 2)
5737     b = b->level_chain;
5738
5739   if (b->namespace_p)
5740     {
5741       t = IDENTIFIER_NAMESPACE_VALUE (name);
5742
5743       /* extern "C" function() */
5744       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5745         t = TREE_VALUE (t);
5746     }
5747   else if (IDENTIFIER_BINDING (name) 
5748            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5749     {
5750       while (1)
5751         {
5752           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5753             return IDENTIFIER_VALUE (name);
5754           
5755           if (b->keep == 2)
5756             b = b->level_chain;
5757           else
5758             break;
5759         }
5760     }
5761
5762   return t;
5763 }
5764
5765 /* Like lookup_name_current_level, but for types.  */
5766
5767 tree
5768 lookup_type_current_level (name)
5769      tree name;
5770 {
5771   register tree t = NULL_TREE;
5772
5773   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5774
5775   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5776       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5777     {
5778       struct binding_level *b = current_binding_level;
5779       while (1)
5780         {
5781           if (purpose_member (name, b->type_shadowed))
5782             return REAL_IDENTIFIER_TYPE_VALUE (name);
5783           if (b->keep == 2)
5784             b = b->level_chain;
5785           else
5786             break;
5787         }
5788     }
5789
5790   return t;
5791 }
5792
5793 void
5794 begin_only_namespace_names ()
5795 {
5796   only_namespace_names = 1;
5797 }
5798
5799 void
5800 end_only_namespace_names ()
5801 {
5802   only_namespace_names = 0;
5803 }
5804 \f
5805 /* Arrange for the user to get a source line number, even when the
5806    compiler is going down in flames, so that she at least has a
5807    chance of working around problems in the compiler.  We used to
5808    call error(), but that let the segmentation fault continue
5809    through; now, it's much more passive by asking them to send the
5810    maintainers mail about the problem.  */
5811
5812 static void
5813 signal_catch (sig)
5814      int sig ATTRIBUTE_UNUSED;
5815 {
5816   signal (SIGSEGV, SIG_DFL);
5817 #ifdef SIGIOT
5818   signal (SIGIOT, SIG_DFL);
5819 #endif
5820 #ifdef SIGILL
5821   signal (SIGILL, SIG_DFL);
5822 #endif
5823 #ifdef SIGABRT
5824   signal (SIGABRT, SIG_DFL);
5825 #endif
5826 #ifdef SIGBUS
5827   signal (SIGBUS, SIG_DFL);
5828 #endif
5829   my_friendly_abort (0);
5830 }
5831
5832 /* Push the declarations of builtin types into the namespace.
5833    RID_INDEX, if < RID_MAX is the index of the builtin type
5834    in the array RID_POINTERS.  NAME is the name used when looking
5835    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5836
5837 static void
5838 record_builtin_type (rid_index, name, type)
5839      enum rid rid_index;
5840      const char *name;
5841      tree type;
5842 {
5843   tree rname = NULL_TREE, tname = NULL_TREE;
5844   tree tdecl = NULL_TREE;
5845
5846   if ((int) rid_index < (int) RID_MAX)
5847     rname = ridpointers[(int) rid_index];
5848   if (name)
5849     tname = get_identifier (name);
5850
5851   TYPE_BUILT_IN (type) = 1;
5852   
5853   if (tname)
5854     {
5855       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5856       set_identifier_type_value (tname, NULL_TREE);
5857       if ((int) rid_index < (int) RID_MAX)
5858         /* Built-in types live in the global namespace. */
5859         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5860     }
5861   if (rname != NULL_TREE)
5862     {
5863       if (tname != NULL_TREE)
5864         {
5865           set_identifier_type_value (rname, NULL_TREE);
5866           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5867         }
5868       else
5869         {
5870           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5871           set_identifier_type_value (rname, NULL_TREE);
5872         }
5873     }
5874 }
5875
5876 /* Record one of the standard Java types.
5877  * Declare it as having the given NAME.
5878  * If SIZE > 0, it is the size of one of the integral types;
5879  * otherwise it is the negative of the size of one of the other types.  */
5880
5881 static tree
5882 record_builtin_java_type (name, size)
5883      const char *name;
5884      int size;
5885 {
5886   tree type, decl;
5887   if (size > 0)
5888     type = make_signed_type (size);
5889   else if (size > -32)
5890     { /* "__java_char" or ""__java_boolean". */
5891       type = make_unsigned_type (-size);
5892       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5893     }
5894   else
5895     { /* "__java_float" or ""__java_double". */
5896       type = make_node (REAL_TYPE);
5897       TYPE_PRECISION (type) = - size;
5898       layout_type (type);
5899     }
5900   record_builtin_type (RID_MAX, name, type);
5901   decl = TYPE_NAME (type);
5902
5903   /* Suppress generate debug symbol entries for these types,
5904      since for normal C++ they are just clutter.
5905      However, push_lang_context undoes this if extern "Java" is seen. */
5906   DECL_IGNORED_P (decl) = 1;
5907
5908   TYPE_FOR_JAVA (type) = 1;
5909   return type;
5910 }
5911
5912 /* Push a type into the namespace so that the back-ends ignore it. */
5913
5914 static void
5915 record_unknown_type (type, name)
5916      tree type;
5917      const char *name;
5918 {
5919   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5920   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5921   DECL_IGNORED_P (decl) = 1;
5922   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5923   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5924   TYPE_ALIGN (type) = 1;
5925   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5926
5927
5928 /* Push overloaded decl, in global scope, with one argument so it
5929    can be used as a callback from define_function.  */
5930
5931 static void
5932 push_overloaded_decl_1 (x)
5933      tree x;
5934 {
5935   pushdecl (x);
5936 }
5937
5938 inline tree
5939 auto_function (name, type)
5940      tree name, type;
5941 {
5942   return define_function
5943     (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5944      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5945                                               0)));
5946 }
5947
5948 /* Create the predefined scalar types of C,
5949    and some nodes representing standard constants (0, 1, (void *)0).
5950    Initialize the global binding level.
5951    Make definitions for built-in primitive functions.  */
5952
5953 void
5954 init_decl_processing ()
5955 {
5956   tree fields[20];
5957   int wchar_type_size;
5958   tree array_domain_type;
5959
5960   /* Have to make these distinct before we try using them.  */
5961   lang_name_cplusplus = get_identifier ("C++");
5962   lang_name_c = get_identifier ("C");
5963   lang_name_java = get_identifier ("Java");
5964
5965   /* Let the back-end now how to save and restore language-specific
5966      per-function globals.  */
5967   init_lang_status = &push_cp_function_context;
5968   free_lang_status = &pop_cp_function_context;
5969   mark_lang_status = &mark_cp_function_context;
5970
5971   cp_parse_init ();
5972   init_decl2 ();
5973   init_pt ();
5974
5975   /* Create the global variables.  */
5976   push_to_top_level ();
5977
5978   /* Enter the global namespace. */
5979   my_friendly_assert (global_namespace == NULL_TREE, 375);
5980   push_namespace (get_identifier ("::"));
5981   global_namespace = current_namespace;
5982   current_lang_name = NULL_TREE;
5983
5984   if (flag_strict_prototype == 2)
5985     flag_strict_prototype = pedantic;
5986   if (! flag_permissive && ! pedantic)
5987     flag_pedantic_errors = 1;
5988
5989   strict_prototypes_lang_c = flag_strict_prototype;
5990
5991   /* Initially, C.  */
5992   current_lang_name = lang_name_c;
5993
5994   current_function_decl = NULL_TREE;
5995   current_binding_level = NULL_BINDING_LEVEL;
5996   free_binding_level = NULL_BINDING_LEVEL;
5997
5998   /* Because most segmentation signals can be traced back into user
5999      code, catch them and at least give the user a chance of working
6000      around compiler bugs.  */
6001   signal (SIGSEGV, signal_catch);
6002
6003   /* We will also catch aborts in the back-end through signal_catch and
6004      give the user a chance to see where the error might be, and to defeat
6005      aborts in the back-end when there have been errors previously in their
6006      code.  */
6007 #ifdef SIGIOT
6008   signal (SIGIOT, signal_catch);
6009 #endif
6010 #ifdef SIGILL
6011   signal (SIGILL, signal_catch);
6012 #endif
6013 #ifdef SIGABRT
6014   signal (SIGABRT, signal_catch);
6015 #endif
6016 #ifdef SIGBUS
6017   signal (SIGBUS, signal_catch);
6018 #endif
6019
6020   build_common_tree_nodes (flag_signed_char);
6021
6022   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6023   TREE_TYPE (error_mark_list) = error_mark_node;
6024
6025   /* Make the binding_level structure for global names.  */
6026   pushlevel (0);
6027   global_binding_level = current_binding_level;
6028   /* The global level is the namespace level of ::.  */
6029   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6030   declare_namespace_level ();
6031
6032   this_identifier = get_identifier (THIS_NAME);
6033   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6034   ctor_identifier = get_identifier (CTOR_NAME);
6035   dtor_identifier = get_identifier (DTOR_NAME);
6036   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6037   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6038   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6039   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6040   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6041
6042   /* Define `int' and `char' first so that dbx will output them first.  */
6043   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6044   record_builtin_type (RID_CHAR, "char", char_type_node);
6045
6046   /* `signed' is the same as `int' */
6047   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6048   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6049   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6050   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6051   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6052   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6053   record_builtin_type (RID_MAX, "long long unsigned int",
6054                        long_long_unsigned_type_node);
6055   record_builtin_type (RID_MAX, "long long unsigned",
6056                        long_long_unsigned_type_node);
6057   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6058   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6059   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6060
6061   ptrdiff_type_node
6062     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6063
6064   /* Define both `signed char' and `unsigned char'.  */
6065   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6066   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6067
6068   /* `unsigned long' is the standard type for sizeof.
6069      Note that stddef.h uses `unsigned long',
6070      and this must agree, even if long and int are the same size.  */
6071   set_sizetype
6072     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6073
6074   /* Create the widest literal types. */
6075   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6076   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6077                         widest_integer_literal_type_node));
6078
6079   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6080   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6081                         widest_unsigned_literal_type_node));
6082
6083   /* These are types that type_for_size and type_for_mode use.  */
6084   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6085   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6086   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6087   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6088 #if HOST_BITS_PER_WIDE_INT >= 64
6089   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6090 #endif
6091   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6092   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6093   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6094   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6095 #if HOST_BITS_PER_WIDE_INT >= 64
6096   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6097 #endif
6098
6099   build_common_tree_nodes_2 (flag_short_double);
6100
6101   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6102   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6103   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6104   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6105   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6106   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6107   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6108   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6109
6110   integer_two_node = build_int_2 (2, 0);
6111   TREE_TYPE (integer_two_node) = integer_type_node;
6112   integer_three_node = build_int_2 (3, 0);
6113   TREE_TYPE (integer_three_node) = integer_type_node;
6114
6115   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6116   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6117   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6118   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6119   TYPE_PRECISION (boolean_type_node) = 1;
6120   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6121   boolean_false_node = build_int_2 (0, 0);
6122   TREE_TYPE (boolean_false_node) = boolean_type_node;
6123   boolean_true_node = build_int_2 (1, 0);
6124   TREE_TYPE (boolean_true_node) = boolean_type_node;
6125
6126   signed_size_zero_node = build_int_2 (0, 0);  record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6127   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6128   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6129
6130   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6131                         complex_integer_type_node));
6132   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6133                         complex_float_type_node));
6134   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6135                         complex_double_type_node));
6136   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6137                         complex_long_double_type_node));
6138
6139   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6140
6141   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6142   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6143   TREE_PARMLIST (void_list_node) = 1;
6144
6145   /* Used for expressions that do nothing, but are not errors.  */
6146   void_zero_node = build_int_2 (0, 0);
6147   TREE_TYPE (void_zero_node) = void_type_node;
6148
6149   string_type_node = build_pointer_type (char_type_node);
6150   const_string_type_node
6151     = build_pointer_type (build_qualified_type (char_type_node, 
6152                                                 TYPE_QUAL_CONST));
6153   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6154 #if 0
6155   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6156 #endif
6157
6158   /* Make a type to be the domain of a few array types
6159      whose domains don't really matter.
6160      200 is small enough that it always fits in size_t
6161      and large enough that it can hold most function names for the
6162      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6163   array_domain_type = build_index_type (build_int_2 (200, 0));
6164
6165   /* Make a type for arrays of characters.
6166      With luck nothing will ever really depend on the length of this
6167      array type.  */
6168   char_array_type_node
6169     = build_array_type (char_type_node, array_domain_type);
6170   /* Likewise for arrays of ints.  */
6171   int_array_type_node
6172     = build_array_type (integer_type_node, array_domain_type);
6173
6174   /* This is just some anonymous class type.  Nobody should ever
6175      need to look inside this envelope.  */
6176   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6177
6178   if (flag_huge_objects)
6179     delta_type_node = long_integer_type_node;
6180   else
6181     delta_type_node = short_integer_type_node;
6182
6183   default_function_type
6184     = build_function_type (integer_type_node, NULL_TREE);
6185
6186   ptr_type_node = build_pointer_type (void_type_node);
6187   const_ptr_type_node
6188     = build_pointer_type (build_qualified_type (void_type_node,
6189                                                 TYPE_QUAL_CONST));
6190   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6191   lang_type_promotes_to = convert_type_from_ellipsis;
6192
6193   void_ftype_ptr
6194     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6195
6196   /* C++ extensions */
6197
6198   unknown_type_node = make_node (UNKNOWN_TYPE);
6199   record_unknown_type (unknown_type_node, "unknown type");
6200
6201   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6202   TREE_TYPE (unknown_type_node) = unknown_type_node;
6203
6204   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6205
6206   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6207      result.  */
6208   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6209   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6210
6211   /* This is special for C++ so functions can be overloaded.  */
6212   wchar_type_node = get_identifier (flag_short_wchar
6213                                     ? "short unsigned int"
6214                                     : WCHAR_TYPE);
6215   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6216   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6217   signed_wchar_type_node = make_signed_type (wchar_type_size);
6218   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6219   wchar_type_node
6220     = TREE_UNSIGNED (wchar_type_node)
6221       ? unsigned_wchar_type_node
6222       : signed_wchar_type_node;
6223   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6224
6225   /* Artificial declaration of wchar_t -- can be bashed */
6226   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6227                                 wchar_type_node);
6228   pushdecl (wchar_decl_node);
6229
6230   /* This is for wide string constants.  */
6231   wchar_array_type_node
6232     = build_array_type (wchar_type_node, array_domain_type);
6233
6234   if (flag_vtable_thunks)
6235     {
6236       /* Make sure we get a unique function type, so we can give
6237          its pointer type a name.  (This wins for gdb.) */
6238       tree vfunc_type = make_node (FUNCTION_TYPE);
6239       TREE_TYPE (vfunc_type) = integer_type_node;
6240       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6241       layout_type (vfunc_type);
6242
6243       vtable_entry_type = build_pointer_type (vfunc_type);
6244     }
6245   else
6246     {
6247       vtable_entry_type = make_lang_type (RECORD_TYPE);
6248       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6249                                    delta_type_node);
6250       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6251                                    delta_type_node);
6252       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6253                                    ptr_type_node);
6254       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6255                            double_type_node);
6256
6257       /* Make this part of an invisible union.  */
6258       fields[3] = copy_node (fields[2]);
6259       TREE_TYPE (fields[3]) = delta_type_node;
6260       DECL_NAME (fields[3]) = delta2_identifier;
6261       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6262       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6263       TREE_UNSIGNED (fields[3]) = 0;
6264       TREE_CHAIN (fields[2]) = fields[3];
6265       vtable_entry_type = build_qualified_type (vtable_entry_type,
6266                                                 TYPE_QUAL_CONST);
6267     }
6268   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6269
6270   vtbl_type_node
6271     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6272   layout_type (vtbl_type_node);
6273   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6274   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6275   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6276   layout_type (vtbl_ptr_type_node);
6277   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6278
6279   std_node = build_decl (NAMESPACE_DECL, 
6280                          get_identifier (flag_honor_std ? "fake std":"std"),
6281                          void_type_node);
6282   pushdecl (std_node);
6283
6284   global_type_node = make_node (LANG_TYPE);
6285   record_unknown_type (global_type_node, "global type");
6286
6287   /* Now, C++.  */
6288   current_lang_name = lang_name_cplusplus;
6289
6290   {
6291     tree bad_alloc_type_node, newtype, deltype;
6292     if (flag_honor_std)
6293       push_namespace (get_identifier ("std"));
6294     bad_alloc_type_node = xref_tag
6295       (class_type_node, get_identifier ("bad_alloc"), 1);
6296     if (flag_honor_std)
6297       pop_namespace ();
6298     newtype = build_exception_variant
6299       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6300     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6301     auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6302     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6303     global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6304                                           deltype);
6305     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6306   }
6307
6308   abort_fndecl
6309     = define_function ("__pure_virtual", void_ftype, 0, 0);
6310
6311   /* Perform other language dependent initializations.  */
6312   init_class_processing ();
6313   init_init_processing ();
6314   init_search_processing ();
6315   init_rtti_processing ();
6316
6317   if (flag_exceptions)
6318     init_exception_processing ();
6319   if (flag_no_inline)
6320     {
6321       flag_inline_functions = 0;
6322     }
6323
6324   if (! supports_one_only ())
6325     flag_weak = 0;
6326
6327   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6328   declare_function_name ();
6329
6330   /* Prepare to check format strings against argument lists.  */
6331   init_function_format_info ();
6332
6333   /* Show we use EH for cleanups.  */
6334   using_eh_for_cleanups ();
6335
6336   print_error_function = lang_print_error_function;
6337   lang_get_alias_set = &c_get_alias_set;
6338   valid_lang_attribute = cp_valid_lang_attribute;
6339
6340   /* Maintain consistency.  Perhaps we should just complain if they
6341      say -fwritable-strings?  */
6342   if (flag_writable_strings)
6343     flag_const_strings = 0;
6344
6345   /* Add GC roots for all of our global variables.  */
6346   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6347   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6348   ggc_add_tree_root (&integer_three_node, 1);
6349   ggc_add_tree_root (&integer_two_node, 1);
6350   ggc_add_tree_root (&signed_size_zero_node, 1);
6351   ggc_add_tree_root (&size_one_node, 1);
6352   ggc_add_tree_root (&size_zero_node, 1);
6353   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6354                 mark_binding_level);
6355   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6356   ggc_add_tree_root (&static_ctors, 1);
6357   ggc_add_tree_root (&static_dtors, 1);
6358   ggc_add_tree_root (&lastiddecl, 1);
6359
6360   ggc_add_tree_root (&enum_next_value, 1);
6361   ggc_add_tree_root (&last_function_parm_tags, 1);
6362   ggc_add_tree_root (&current_function_return_value, 1);
6363   ggc_add_tree_root (&current_function_parms, 1);
6364   ggc_add_tree_root (&current_function_parm_tags, 1);
6365   ggc_add_tree_root (&last_function_parms, 1);
6366   ggc_add_tree_root (&error_mark_list, 1);
6367
6368   ggc_add_tree_root (&global_namespace, 1);
6369   ggc_add_tree_root (&global_type_node, 1);
6370   ggc_add_tree_root (&anonymous_namespace_name, 1);
6371
6372   ggc_add_tree_root (&got_object, 1);
6373   ggc_add_tree_root (&got_scope, 1);
6374
6375   ggc_add_tree_root (&current_lang_name, 1);
6376   ggc_add_tree_root (&static_aggregates, 1);
6377 }
6378
6379 /* Function to print any language-specific context for an error message.  */
6380
6381 static void
6382 lang_print_error_function (file)
6383      const char *file;
6384 {
6385   default_print_error_function (file);
6386   maybe_print_template_context ();
6387 }
6388
6389 /* Make a definition for a builtin function named NAME and whose data type
6390    is TYPE.  TYPE should be a function type with argument types.
6391
6392    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6393    the name to be called if we can't opencode the function.  */
6394
6395 tree
6396 define_function (name, type, pfn, library_name)
6397      const char *name;
6398      tree type;
6399      void (*pfn) PROTO((tree));
6400      const char *library_name;
6401 {
6402   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6403   DECL_EXTERNAL (decl) = 1;
6404   TREE_PUBLIC (decl) = 1;
6405   DECL_ARTIFICIAL (decl) = 1;
6406
6407   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6408   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6409
6410   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6411      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6412      function in the namespace.  */
6413   if (pfn) (*pfn) (decl);
6414   if (library_name)
6415     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6416   make_function_rtl (decl);
6417   return decl;
6418 }
6419
6420
6421 /* Wrapper around define_function, for the benefit of 
6422    c_common_nodes_and_builtins.
6423    FUNCTION_CODE tells later passes how to compile calls to this function.
6424    See tree.h for its possible values.  */
6425
6426 tree
6427 builtin_function (name, type, code, class, libname)
6428      const char *name;
6429      tree type;
6430      int code;
6431      enum built_in_class class;
6432      const char *libname;
6433 {
6434   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6435                                libname);
6436   DECL_BUILT_IN_CLASS (decl) = class;
6437   DECL_FUNCTION_CODE (decl) = code;
6438   return decl;
6439 }
6440 \f
6441 /* When we call finish_struct for an anonymous union, we create
6442    default copy constructors and such.  But, an anonymous union
6443    shouldn't have such things; this function undoes the damage to the
6444    anonymous union type T.
6445
6446    (The reason that we create the synthesized methods is that we don't
6447    distinguish `union { int i; }' from `typedef union { int i; } U'.
6448    The first is an anonymous union; the second is just an ordinary
6449    union type.)  */
6450
6451 void
6452 fixup_anonymous_aggr (t)
6453      tree t;
6454 {
6455   tree *q;
6456
6457   /* Wipe out memory of synthesized methods */
6458   TYPE_HAS_CONSTRUCTOR (t) = 0;
6459   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6460   TYPE_HAS_INIT_REF (t) = 0;
6461   TYPE_HAS_CONST_INIT_REF (t) = 0;
6462   TYPE_HAS_ASSIGN_REF (t) = 0;
6463   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6464
6465   /* Splice the implicitly generated functions out of the TYPE_METHODS
6466      list.  */
6467   q = &TYPE_METHODS (t);
6468   while (*q)
6469     {
6470       if (DECL_ARTIFICIAL (*q))
6471         *q = TREE_CHAIN (*q);
6472       else
6473         q = &TREE_CHAIN (*q);
6474     }
6475
6476   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6477      function members.  */
6478   if (TYPE_METHODS (t))
6479     error ("an anonymous union cannot have function members");
6480 }
6481
6482 /* Make sure that a declaration with no declarator is well-formed, i.e.
6483    just defines a tagged type or anonymous union.
6484
6485    Returns the type defined, if any.  */
6486
6487 tree
6488 check_tag_decl (declspecs)
6489      tree declspecs;
6490 {
6491   int found_type = 0;
6492   tree ob_modifier = NULL_TREE;
6493   register tree link;
6494   register tree t = NULL_TREE;
6495
6496   for (link = declspecs; link; link = TREE_CHAIN (link))
6497     {
6498       register tree value = TREE_VALUE (link);
6499
6500       if (TYPE_P (value))
6501         {
6502           ++found_type;
6503
6504           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6505             {
6506               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6507               t = value;
6508             }
6509         }
6510       else if (value == ridpointers[(int) RID_FRIEND])
6511         {
6512           if (current_class_type == NULL_TREE
6513               || current_scope () != current_class_type)
6514             ob_modifier = value;
6515         }
6516       else if (value == ridpointers[(int) RID_STATIC]
6517                || value == ridpointers[(int) RID_EXTERN]
6518                || value == ridpointers[(int) RID_AUTO]
6519                || value == ridpointers[(int) RID_REGISTER]
6520                || value == ridpointers[(int) RID_INLINE]
6521                || value == ridpointers[(int) RID_VIRTUAL]
6522                || value == ridpointers[(int) RID_CONST]
6523                || value == ridpointers[(int) RID_VOLATILE]
6524                || value == ridpointers[(int) RID_EXPLICIT])
6525         ob_modifier = value;
6526     }
6527
6528   if (found_type > 1)
6529     error ("multiple types in one declaration");
6530
6531   /* Inside a class, we might be in a friend or access declaration.
6532      Until we have a good way of detecting the latter, don't warn.  */
6533   if (t == NULL_TREE && ! current_class_type)
6534     pedwarn ("declaration does not declare anything");
6535
6536   /* Check for an anonymous union.  We're careful
6537      accessing TYPE_IDENTIFIER because some built-in types, like
6538      pointer-to-member types, do not have TYPE_NAME.  */
6539   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6540            && TYPE_NAME (t)
6541            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6542     {
6543       /* Anonymous unions are objects, so they can have specifiers.  */;
6544       SET_ANON_AGGR_TYPE_P (t);
6545
6546       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6547         pedwarn ("ISO C++ prohibits anonymous structs");
6548     }
6549
6550   else if (ob_modifier)
6551     {
6552       if (ob_modifier == ridpointers[(int) RID_INLINE]
6553           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6554         cp_error ("`%D' can only be specified for functions", ob_modifier);
6555       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6556         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6557       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6558         cp_error ("`%D' can only be specified for constructors",
6559                   ob_modifier);
6560       else
6561         cp_error ("`%D' can only be specified for objects and functions",
6562                   ob_modifier);
6563     }
6564
6565   return t;
6566 }
6567
6568 /* Called when a declaration is seen that contains no names to declare.
6569    If its type is a reference to a structure, union or enum inherited
6570    from a containing scope, shadow that tag name for the current scope
6571    with a forward reference.
6572    If its type defines a new named structure or union
6573    or defines an enum, it is valid but we need not do anything here.
6574    Otherwise, it is an error.
6575
6576    C++: may have to grok the declspecs to learn about static,
6577    complain for anonymous unions.  */
6578
6579 void
6580 shadow_tag (declspecs)
6581      tree declspecs;
6582 {
6583   tree t = check_tag_decl (declspecs);
6584
6585   if (t)
6586     maybe_process_partial_specialization (t);
6587
6588   /* This is where the variables in an anonymous union are
6589      declared.  An anonymous union declaration looks like:
6590      union { ... } ;
6591      because there is no declarator after the union, the parser
6592      sends that declaration here.  */
6593   if (t && ANON_AGGR_TYPE_P (t))
6594     {
6595       fixup_anonymous_aggr (t);
6596
6597       if (TYPE_FIELDS (t))
6598         {
6599           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6600                                       NULL_TREE);
6601           finish_anon_union (decl);
6602         }
6603     }
6604 }
6605 \f
6606 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6607
6608 tree
6609 groktypename (typename)
6610      tree typename;
6611 {
6612   if (TREE_CODE (typename) != TREE_LIST)
6613     return typename;
6614   return grokdeclarator (TREE_VALUE (typename),
6615                          TREE_PURPOSE (typename),
6616                          TYPENAME, 0, NULL_TREE);
6617 }
6618
6619 /* Decode a declarator in an ordinary declaration or data definition.
6620    This is called as soon as the type information and variable name
6621    have been parsed, before parsing the initializer if any.
6622    Here we create the ..._DECL node, fill in its type,
6623    and put it on the list of decls for the current context.
6624    The ..._DECL node is returned as the value.
6625
6626    Exception: for arrays where the length is not specified,
6627    the type is left null, to be filled in by `cp_finish_decl'.
6628
6629    Function definitions do not come here; they go to start_function
6630    instead.  However, external and forward declarations of functions
6631    do go through here.  Structure field declarations are done by
6632    grokfield and not through here.  */
6633
6634 /* Set this to zero to debug not using the temporary obstack
6635    to parse initializers.  */
6636 int debug_temp_inits = 1;
6637
6638 tree
6639 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6640      tree declarator, declspecs;
6641      int initialized;
6642      tree attributes, prefix_attributes;
6643 {
6644   register tree decl;
6645   register tree type, tem;
6646   tree context;
6647   extern int have_extern_spec;
6648   extern int used_extern_spec;
6649   tree attrlist;
6650
6651 #if 0
6652   /* See code below that used this.  */
6653   int init_written = initialized;
6654 #endif
6655
6656   /* This should only be done once on the top most decl.  */
6657   if (have_extern_spec && !used_extern_spec)
6658     {
6659       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6660                                   declspecs);
6661       used_extern_spec = 1;
6662     }
6663
6664   if (attributes || prefix_attributes)
6665     attrlist = build_scratch_list (attributes, prefix_attributes);
6666   else
6667     attrlist = NULL_TREE;
6668
6669   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6670                          attrlist);
6671                          
6672   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6673     return NULL_TREE;
6674
6675   type = TREE_TYPE (decl);
6676
6677   if (type == error_mark_node)
6678     return NULL_TREE;
6679
6680   context
6681     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6682       ? DECL_CLASS_CONTEXT (decl)
6683       : DECL_CONTEXT (decl);
6684
6685   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6686       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6687     {
6688       /* When parsing the initializer, lookup should use the object's
6689          namespace. */
6690       push_decl_namespace (context);
6691     }
6692
6693   /* We are only interested in class contexts, later. */
6694   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6695     context = NULL_TREE;
6696
6697   if (initialized)
6698     /* Is it valid for this decl to have an initializer at all?
6699        If not, set INITIALIZED to zero, which will indirectly
6700        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6701     switch (TREE_CODE (decl))
6702       {
6703       case TYPE_DECL:
6704         /* typedef foo = bar  means give foo the same type as bar.
6705            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6706            Any other case of an initialization in a TYPE_DECL is an error.  */
6707         if (pedantic || list_length (declspecs) > 1)
6708           {
6709             cp_error ("typedef `%D' is initialized", decl);
6710             initialized = 0;
6711           }
6712         break;
6713
6714       case FUNCTION_DECL:
6715         cp_error ("function `%#D' is initialized like a variable", decl);
6716         initialized = 0;
6717         break;
6718
6719       default:
6720         break;
6721       }
6722
6723   if (initialized)
6724     {
6725       if (! toplevel_bindings_p ()
6726           && DECL_EXTERNAL (decl))
6727         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6728                     decl);
6729       DECL_EXTERNAL (decl) = 0;
6730       if (toplevel_bindings_p ())
6731         TREE_STATIC (decl) = 1;
6732
6733       /* Tell `pushdecl' this is an initialized decl
6734          even though we don't yet have the initializer expression.
6735          Also tell `cp_finish_decl' it may store the real initializer.  */
6736       DECL_INITIAL (decl) = error_mark_node;
6737     }
6738
6739 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6740   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6741 #endif
6742   
6743   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6744   cplus_decl_attributes (decl, attributes, prefix_attributes);
6745
6746   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6747     {
6748       push_nested_class (context, 2);
6749
6750       if (TREE_CODE (decl) == VAR_DECL)
6751         {
6752           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6753           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6754             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6755           else
6756             {
6757               if (DECL_CONTEXT (field) != context)
6758                 {
6759                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6760                               DECL_CONTEXT (field), DECL_NAME (decl),
6761                               context, DECL_NAME (decl));
6762                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6763                 }
6764               /* Static data member are tricky; an in-class initialization
6765                  still doesn't provide a definition, so the in-class
6766                  declaration will have DECL_EXTERNAL set, but will have an
6767                  initialization.  Thus, duplicate_decls won't warn
6768                  about this situation, and so we check here.  */
6769               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6770                 cp_error ("duplicate initialization of %D", decl);
6771               if (duplicate_decls (decl, field))
6772                 decl = field;
6773             }
6774         }
6775       else
6776         {
6777           tree field = check_classfn (context, decl);
6778           if (field && duplicate_decls (decl, field))
6779             decl = field;
6780         }
6781
6782       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6783       DECL_IN_AGGR_P (decl) = 0;
6784       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6785           || CLASSTYPE_USE_TEMPLATE (context))
6786         {
6787           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6788           /* [temp.expl.spec] An explicit specialization of a static data
6789              member of a template is a definition if the declaration
6790              includes an initializer; otherwise, it is a declaration.
6791
6792              We check for processing_specialization so this only applies
6793              to the new specialization syntax.  */
6794           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6795             DECL_EXTERNAL (decl) = 1;
6796         }
6797
6798       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6799         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6800                     decl);
6801     }
6802
6803   /* Enter this declaration into the symbol table.  */
6804   tem = maybe_push_decl (decl);
6805
6806   if (processing_template_decl)
6807     {
6808       if (at_function_scope_p ())
6809         push_permanent_obstack ();
6810       tem = push_template_decl (tem);
6811       if (at_function_scope_p ())
6812         pop_obstacks ();
6813     }
6814
6815
6816 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6817   /* Tell the back-end to use or not use .common as appropriate.  If we say
6818      -fconserve-space, we want this to save .data space, at the expense of
6819      wrong semantics.  If we say -fno-conserve-space, we want this to
6820      produce errors about redefs; to do this we force variables into the
6821      data segment.  */
6822   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6823 #endif
6824   
6825   if (! processing_template_decl)
6826     start_decl_1 (tem);
6827
6828   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
6829   push_obstacks_nochange ();
6830
6831   return tem;
6832 }
6833
6834 void
6835 start_decl_1 (decl)
6836      tree decl;
6837 {
6838   tree type = TREE_TYPE (decl);
6839   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6840
6841   if (type == error_mark_node)
6842     return;
6843
6844   /* If this type of object needs a cleanup, but we're not allowed to
6845      add any more objects with cleanups to the current scope, create a
6846      new binding level.  */
6847   if (TYPE_NEEDS_DESTRUCTOR (type)
6848       && current_binding_level->more_cleanups_ok == 0)
6849     {
6850       keep_next_level (2);
6851       pushlevel (1);
6852       clear_last_expr ();
6853       add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
6854     }
6855
6856   if (initialized)
6857     /* Is it valid for this decl to have an initializer at all?
6858        If not, set INITIALIZED to zero, which will indirectly
6859        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6860     {
6861       /* Don't allow initializations for incomplete types except for
6862          arrays which might be completed by the initialization.  */
6863       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6864         ;                       /* A complete type is ok.  */
6865       else if (TREE_CODE (type) != ARRAY_TYPE)
6866         {
6867           cp_error ("variable `%#D' has initializer but incomplete type",
6868                     decl);
6869           initialized = 0;
6870           type = TREE_TYPE (decl) = error_mark_node;
6871         }
6872       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6873         {
6874           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6875             cp_error ("elements of array `%#D' have incomplete type", decl);
6876           /* else we already gave an error in start_decl.  */
6877           initialized = 0;
6878         }
6879     }
6880
6881   if (!initialized
6882       && TREE_CODE (decl) != TYPE_DECL
6883       && TREE_CODE (decl) != TEMPLATE_DECL
6884       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6885     {
6886       if ((! processing_template_decl || ! uses_template_parms (type))
6887           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6888         {
6889           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6890                  decl);
6891           /* Change the type so that assemble_variable will give
6892              DECL an rtl we can live with: (mem (const_int 0)).  */
6893           type = TREE_TYPE (decl) = error_mark_node;
6894         }
6895       else
6896         {
6897           /* If any base type in the hierarchy of TYPE needs a constructor,
6898              then we set initialized to 1.  This way any nodes which are
6899              created for the purposes of initializing this aggregate
6900              will live as long as it does.  This is necessary for global
6901              aggregates which do not have their initializers processed until
6902              the end of the file.  */
6903           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6904         }
6905     }
6906
6907   if (! initialized)
6908     DECL_INITIAL (decl) = NULL_TREE;
6909 }
6910
6911 /* Handle initialization of references.
6912    These three arguments are from `cp_finish_decl', and have the
6913    same meaning here that they do there.
6914
6915    Quotes on semantics can be found in ARM 8.4.3.  */
6916
6917 static void
6918 grok_reference_init (decl, type, init)
6919      tree decl, type, init;
6920 {
6921   tree tmp;
6922
6923   if (init == NULL_TREE)
6924     {
6925       if ((DECL_LANG_SPECIFIC (decl) == 0
6926            || DECL_IN_AGGR_P (decl) == 0)
6927           && ! DECL_THIS_EXTERN (decl))
6928         cp_error ("`%D' declared as reference but not initialized", decl);
6929       return;
6930     }
6931
6932   if (init == error_mark_node)
6933     return;
6934
6935   if (TREE_CODE (init) == CONSTRUCTOR)
6936     {
6937       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6938       return;
6939     }
6940
6941   if (TREE_CODE (init) == TREE_LIST)
6942     init = build_compound_expr (init);
6943
6944   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6945     init = convert_from_reference (init);
6946
6947   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6948       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6949     {
6950       /* Note: default conversion is only called in very special cases.  */
6951       init = default_conversion (init);
6952     }
6953   
6954   /* Convert INIT to the reference type TYPE.  This may involve the
6955      creation of a temporary, whose lifetime must be the same as that
6956      of the reference.  If so, a DECL_STMT for the temporary will be
6957      added just after the DECL_STMT for DECL.  That's why we don't set
6958      DECL_INITIAL for local references (instead assigning to them
6959      explicitly); we need to allow the temporary to be initialized
6960      first.  */
6961   tmp = convert_to_reference
6962     (type, init, CONV_IMPLICIT,
6963      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6964
6965   if (tmp == error_mark_node)
6966     return;
6967   else if (tmp != NULL_TREE)
6968     {
6969       init = tmp;
6970       tmp = save_expr (tmp);
6971       if (building_stmt_tree ())
6972         {
6973           /* Initialize the declaration.  */
6974           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
6975           finish_expr_stmt (tmp);
6976         }
6977       else
6978         DECL_INITIAL (decl) = tmp;
6979     }
6980   else
6981     {
6982       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6983       return;
6984     }
6985
6986   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
6987     {
6988       expand_static_init (decl, DECL_INITIAL (decl));
6989       DECL_INITIAL (decl) = NULL_TREE;
6990     }
6991   return;
6992 }
6993
6994 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
6995    mucking with forces it does not comprehend (i.e. initialization with a
6996    constructor).  If we are at global scope and won't go into COMMON, fill
6997    it in with a dummy CONSTRUCTOR to force the variable into .data;
6998    otherwise we can use error_mark_node.  */
6999
7000 static tree
7001 obscure_complex_init (decl, init)
7002      tree decl, init;
7003 {
7004   if (! flag_no_inline && TREE_STATIC (decl))
7005     {
7006       if (extract_init (decl, init))
7007         return NULL_TREE;
7008     }
7009
7010 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7011   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7012     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7013                                  NULL_TREE);
7014   else
7015 #endif
7016     DECL_INITIAL (decl) = error_mark_node;
7017
7018   return init;
7019 }
7020
7021 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7022    array until we finish parsing the initializer.  If that's the
7023    situation we're in, update DECL accordingly.  */
7024
7025 static void
7026 maybe_deduce_size_from_array_init (decl, init)
7027      tree decl;
7028      tree init;
7029 {
7030   tree type = TREE_TYPE (decl);
7031
7032   if (TREE_CODE (type) == ARRAY_TYPE
7033       && TYPE_DOMAIN (type) == NULL_TREE
7034       && TREE_CODE (decl) != TYPE_DECL)
7035     {
7036       int do_default
7037         = (TREE_STATIC (decl)
7038            /* Even if pedantic, an external linkage array
7039               may have incomplete type at first.  */
7040            ? pedantic && ! DECL_EXTERNAL (decl)
7041            : !DECL_EXTERNAL (decl));
7042       tree initializer = init ? init : DECL_INITIAL (decl);
7043       int failure = complete_array_type (type, initializer, do_default);
7044
7045       if (failure == 1)
7046         cp_error ("initializer fails to determine size of `%D'", decl);
7047
7048       if (failure == 2)
7049         {
7050           if (do_default)
7051             cp_error ("array size missing in `%D'", decl);
7052           /* If a `static' var's size isn't known, make it extern as
7053              well as static, so it does not get allocated.  If it's not
7054              `static', then don't mark it extern; finish_incomplete_decl
7055              will give it a default size and it will get allocated.  */
7056           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7057             DECL_EXTERNAL (decl) = 1;
7058         }
7059
7060       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7061           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7062                               integer_zero_node))
7063         cp_error ("zero-size array `%D'", decl);
7064
7065       layout_decl (decl, 0);
7066     }
7067 }
7068
7069 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7070    any appropriate error messages regarding the layout.  */
7071
7072 static void
7073 layout_var_decl (decl)
7074      tree decl;
7075 {
7076   tree type = TREE_TYPE (decl);
7077   tree ttype = target_type (type);
7078
7079   /* If we haven't already layed out this declaration, do so now.
7080      Note that we must not call complete type for an external object
7081      because it's type might involve templates that we are not
7082      supposed to isntantiate yet.  (And it's perfectly legal to say 
7083      `extern X x' for some incomplete type `X'.)  */
7084   if (!DECL_EXTERNAL (decl))
7085     complete_type (type);
7086   if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7087     layout_decl (decl, 0);
7088
7089   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7090     {
7091       /* An automatic variable with an incomplete type: that is an error.
7092          Don't talk about array types here, since we took care of that
7093          message in grokdeclarator.  */
7094       cp_error ("storage size of `%D' isn't known", decl);
7095       TREE_TYPE (decl) = error_mark_node;
7096     }
7097   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7098     /* Let debugger know it should output info for this type.  */
7099     note_debug_info_needed (ttype);
7100
7101   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7102     note_debug_info_needed (DECL_CONTEXT (decl));
7103
7104   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7105       && DECL_SIZE (decl) != NULL_TREE
7106       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7107     {
7108       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7109         constant_expression_warning (DECL_SIZE (decl));
7110       else
7111         cp_error ("storage size of `%D' isn't constant", decl);
7112     }
7113 }
7114
7115 /* If a local static variable is declared in an inline function, or if
7116    we have a weak definition, we must endeavor to create only one
7117    instance of the variable at link-time.  */
7118
7119 static void
7120 maybe_commonize_var (decl)
7121      tree decl;
7122 {
7123   /* Static data in a function with comdat linkage also has comdat
7124      linkage.  */
7125   if (TREE_STATIC (decl)
7126       /* Don't mess with __FUNCTION__.  */
7127       && ! TREE_ASM_WRITTEN (decl)
7128       && current_function_decl
7129       && DECL_CONTEXT (decl) == current_function_decl
7130       && (DECL_THIS_INLINE (current_function_decl)
7131           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7132       && TREE_PUBLIC (current_function_decl))
7133     {
7134       /* Rather than try to get this right with inlining, we suppress
7135          inlining of such functions.  */
7136       current_function_cannot_inline
7137         = "function with static variable cannot be inline";
7138
7139       /* If flag_weak, we don't need to mess with this, as we can just
7140          make the function weak, and let it refer to its unique local
7141          copy.  This works because we don't allow the function to be
7142          inlined.  */
7143       if (! flag_weak)
7144         {
7145           if (DECL_INTERFACE_KNOWN (current_function_decl))
7146             {
7147               TREE_PUBLIC (decl) = 1;
7148               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7149             }
7150           else if (DECL_INITIAL (decl) == NULL_TREE
7151                    || DECL_INITIAL (decl) == error_mark_node)
7152             {
7153               TREE_PUBLIC (decl) = 1;
7154               DECL_COMMON (decl) = 1;
7155             }
7156           /* else we lose. We can only do this if we can use common,
7157              which we can't if it has been initialized.  */
7158
7159           if (TREE_PUBLIC (decl))
7160             DECL_ASSEMBLER_NAME (decl)
7161               = build_static_name (current_function_decl, DECL_NAME (decl));
7162           else if (! DECL_ARTIFICIAL (decl))
7163             {
7164               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7165               cp_warning_at ("  you can work around this by removing the initializer", decl);
7166             }
7167         }
7168     }
7169   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7170     /* Set it up again; we might have set DECL_INITIAL since the last
7171        time.  */
7172     comdat_linkage (decl);
7173 }
7174
7175 /* Issue an error message if DECL is an uninitialized const variable.  */
7176
7177 static void
7178 check_for_uninitialized_const_var (decl)
7179      tree decl;
7180 {
7181   tree type = TREE_TYPE (decl);
7182
7183   /* ``Unless explicitly declared extern, a const object does not have
7184      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7185      7.1.6 */
7186   if (TREE_CODE (decl) == VAR_DECL
7187       && TREE_CODE (type) != REFERENCE_TYPE
7188       && CP_TYPE_CONST_P (type)
7189       && !TYPE_NEEDS_CONSTRUCTING (type)
7190       && !DECL_INITIAL (decl))
7191     cp_error ("uninitialized const `%D'", decl);
7192 }
7193
7194 /* Verify INIT (the initializer for DECL), and record the
7195    initialization in DECL_INITIAL, if appropriate.  Returns a new
7196    value for INIT.  */
7197
7198 static tree
7199 check_initializer (decl, init)
7200      tree decl;
7201      tree init;
7202 {
7203   tree type;
7204
7205   if (TREE_CODE (decl) == FIELD_DECL)
7206     return init;
7207
7208   type = TREE_TYPE (decl);
7209
7210   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7211   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7212     init = NULL_TREE;
7213
7214   /* Check the initializer.  */
7215   if (init)
7216     {
7217       /* Things that are going to be initialized need to have complete
7218          type.  */
7219       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7220
7221       if (type == error_mark_node)
7222         /* We will have already complained.  */
7223         init = NULL_TREE;
7224       else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7225         {
7226           cp_error ("variable-sized object `%D' may not be initialized", decl);
7227           init = NULL_TREE;
7228         }
7229       else if (TREE_CODE (type) == ARRAY_TYPE
7230                && !TYPE_SIZE (TREE_TYPE (type)))
7231         {
7232           cp_error ("elements of array `%#D' have incomplete type", decl);
7233           init = NULL_TREE;
7234         }
7235       else if (!TYPE_SIZE (type))
7236         {
7237           cp_error ("`%D' has incomplete type", decl);
7238           TREE_TYPE (decl) = error_mark_node;
7239           init = NULL_TREE;
7240         }
7241     }
7242
7243   if (TREE_CODE (decl) == CONST_DECL)
7244     {
7245       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7246
7247       DECL_INITIAL (decl) = init;
7248
7249       /* This will keep us from needing to worry about our obstacks.  */
7250       my_friendly_assert (init != NULL_TREE, 149);
7251       init = NULL_TREE;
7252     }
7253   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7254     {
7255       if (TREE_STATIC (decl))
7256         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7257       grok_reference_init (decl, type, init);
7258       init = NULL_TREE;
7259     }
7260   else if (init)
7261     {
7262       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7263         {
7264           if (TREE_CODE (type) == ARRAY_TYPE)
7265             init = digest_init (type, init, (tree *) 0);
7266           else if (TREE_CODE (init) == CONSTRUCTOR
7267                    && TREE_HAS_CONSTRUCTOR (init))
7268             {
7269               if (TYPE_NON_AGGREGATE_CLASS (type))
7270                 {
7271                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7272                             decl);
7273                   init = error_mark_node;
7274                 }
7275               else
7276                 goto dont_use_constructor;
7277             }
7278         }
7279       else
7280         {
7281         dont_use_constructor:
7282           if (TREE_CODE (init) != TREE_VEC)
7283             init = store_init_value (decl, init);
7284         }
7285
7286       if (init)
7287         /* We must hide the initializer so that expand_decl
7288            won't try to do something it does not understand.  */
7289         init = obscure_complex_init (decl, init);
7290     }
7291   else if (DECL_EXTERNAL (decl))
7292     ;
7293   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7294            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7295     {
7296       tree core_type = strip_array_types (type);
7297
7298       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7299         {
7300           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7301             cp_error ("structure `%D' with uninitialized const members", decl);
7302           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7303             cp_error ("structure `%D' with uninitialized reference members",
7304                       decl);
7305         }
7306
7307       check_for_uninitialized_const_var (decl);
7308
7309       if (TYPE_SIZE (type) != NULL_TREE
7310           && TYPE_NEEDS_CONSTRUCTING (type))
7311         init = obscure_complex_init (decl, NULL_TREE);
7312
7313     }
7314   else
7315     check_for_uninitialized_const_var (decl);
7316   
7317   return init;
7318 }
7319
7320 /* If DECL is not a local variable, give it RTL.  */
7321
7322 static void
7323 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7324      tree decl;
7325      tree init;
7326      const char *asmspec;
7327 {
7328   int toplev;
7329   tree type;
7330
7331   type = TREE_TYPE (decl);
7332   toplev = toplevel_bindings_p ();
7333
7334   /* Handle non-variables up front.  */
7335   if (TREE_CODE (decl) != VAR_DECL)
7336     {
7337       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7338       return;
7339     }
7340
7341   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7342   if (asmspec)
7343     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7344
7345   if (DECL_VIRTUAL_P (decl))
7346     make_decl_rtl (decl, NULL_PTR, toplev);
7347   else if (TREE_READONLY (decl)
7348            && DECL_INITIAL (decl) != NULL_TREE
7349            && DECL_INITIAL (decl) != error_mark_node
7350            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7351     {
7352       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7353
7354       if (toplev && ! TREE_PUBLIC (decl))
7355         {
7356           /* If this is a static const, change its apparent linkage
7357              if it belongs to a #pragma interface.  */
7358           if (!interface_unknown)
7359             {
7360               TREE_PUBLIC (decl) = 1;
7361               DECL_EXTERNAL (decl) = interface_only;
7362             }
7363           make_decl_rtl (decl, asmspec, toplev);
7364         }
7365       else if (toplev)
7366         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7367     }
7368   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7369     {
7370       my_friendly_assert (TREE_STATIC (decl), 19990828);
7371
7372       if (init == NULL_TREE
7373 #ifdef DEFAULT_STATIC_DEFS
7374           /* If this code is dead, then users must
7375              explicitly declare static member variables
7376              outside the class def'n as well.  */
7377           && TYPE_NEEDS_CONSTRUCTING (type)
7378 #endif
7379           )
7380         {
7381           DECL_EXTERNAL (decl) = 1;
7382           make_decl_rtl (decl, asmspec, 1);
7383         }
7384       else
7385         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7386     }
7387   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7388            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7389     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7390 }
7391
7392 /* Create RTL for the local static variable DECL.  */
7393
7394 void
7395 make_rtl_for_local_static (decl)
7396      tree decl;
7397 {
7398   tree type = TREE_TYPE (decl);
7399   const char *asmspec = NULL;
7400
7401   if (TREE_READONLY (decl)
7402       && DECL_INITIAL (decl) != NULL_TREE
7403       && DECL_INITIAL (decl) != error_mark_node
7404       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
7405       && ! TREE_SIDE_EFFECTS (decl)
7406       && ! TREE_PUBLIC (decl)
7407       && ! DECL_EXTERNAL (decl)
7408       && ! TYPE_NEEDS_DESTRUCTOR (type)
7409       && ! TREE_ADDRESSABLE (decl)
7410       && DECL_MODE (decl) != BLKmode)
7411     {
7412       /* As an optimization, we try to put register-sized static
7413          constants in a register, rather than writing them out.  If we
7414          take the address of the constant later, we'll make RTL for it
7415          at that point.  */
7416       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7417       store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7418       TREE_ASM_WRITTEN (decl) = 1;
7419       return;
7420     }
7421
7422   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7423     {
7424       /* The only way this situaton can occur is if the
7425          user specified a name for this DECL using the
7426          `attribute' syntax.  */
7427       asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7428       DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7429     }
7430
7431   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7432 }
7433
7434 /* The old ARM scoping rules injected variables declared in the
7435    initialization statement of a for-statement into the surrounding
7436    scope.  We support this usage, in order to be backward-compatible.
7437    DECL is a just-declared VAR_DECL; if necessary inject its
7438    declaration into the surrounding scope.  */
7439
7440 void
7441 maybe_inject_for_scope_var (decl)
7442      tree decl;
7443 {
7444   if (current_binding_level->is_for_scope)
7445     {
7446       struct binding_level *outer 
7447         = current_binding_level->level_chain;
7448
7449       /* Check to see if the same name is already bound at the outer
7450          level, either because it was directly declared, or because a
7451          dead for-decl got preserved.  In either case, the code would
7452          not have been valid under the ARM scope rules, so clear
7453          is_for_scope for the current_binding_level.
7454
7455          Otherwise, we need to preserve the temp slot for decl to last
7456          into the outer binding level.  */
7457
7458       tree outer_binding 
7459         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7460               
7461       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7462           && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7463               == VAR_DECL)
7464           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7465         {
7466           BINDING_VALUE (outer_binding)
7467             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7468           current_binding_level->is_for_scope = 0;
7469         }
7470       else if (DECL_IN_MEMORY_P (decl))
7471         preserve_temp_slots (DECL_RTL (decl));
7472     }
7473 }
7474
7475 /* Generate code to initialize DECL (a local variable).  */
7476
7477 void
7478 initialize_local_var (decl, init, flags)
7479      tree decl;
7480      tree init;
7481      int flags;
7482 {
7483   tree type = TREE_TYPE (decl);
7484
7485   /* If the type is bogus, don't bother initializing the variable.  */
7486   if (type == error_mark_node)
7487     return;
7488
7489   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7490     {
7491       /* If we used it already as memory, it must stay in memory.  */
7492       DECL_INITIAL (decl) = NULL_TREE;
7493       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7494     }
7495
7496   /* Local statics are handled differently from ordinary automatic
7497      variables.  */
7498   if (TREE_STATIC (decl))
7499     {
7500       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7501           || TYPE_NEEDS_DESTRUCTOR (type))
7502         expand_static_init (decl, init);
7503       return;
7504     }
7505
7506   if (DECL_SIZE (decl) && type != error_mark_node)
7507     {
7508       int already_used;
7509   
7510       /* Compute and store the initial value.  */
7511       already_used = TREE_USED (decl) || TREE_USED (type);
7512
7513       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7514         {
7515           int saved_stmts_are_full_exprs_p;
7516
7517           emit_line_note (DECL_SOURCE_FILE (decl),
7518                           DECL_SOURCE_LINE (decl));
7519           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7520           stmts_are_full_exprs_p = 1;
7521           finish_expr_stmt (build_aggr_init (decl, init, flags));
7522           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7523         }
7524
7525       /* Set this to 0 so we can tell whether an aggregate which was
7526          initialized was ever used.  Don't do this if it has a
7527          destructor, so we don't complain about the 'resource
7528          allocation is initialization' idiom.  Now set
7529          attribute((unused)) on types so decls of that type will be
7530          marked used. (see TREE_USED, above.)  */
7531       if (TYPE_NEEDS_CONSTRUCTING (type)
7532           && ! already_used
7533           && !TYPE_NEEDS_DESTRUCTOR (type) 
7534           && DECL_NAME (decl))
7535         TREE_USED (decl) = 0;
7536       else if (already_used)
7537         TREE_USED (decl) = 1;
7538     }
7539 }
7540
7541 /* Generate code to destroy DECL (a local variable).  */
7542
7543 void 
7544 destroy_local_var (decl)
7545      tree decl;
7546 {
7547   tree type = TREE_TYPE (decl);
7548   tree cleanup;
7549
7550   /* Only variables get cleaned up.  */
7551   if (TREE_CODE (decl) != VAR_DECL)
7552     return;
7553   
7554   /* And only things with destructors need cleaning up.  */
7555   if (!TYPE_NEEDS_DESTRUCTOR (type))
7556     return;
7557
7558   if (TREE_CODE (decl) == VAR_DECL &&
7559       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7560     /* We don't clean up things that aren't defined in this
7561        translation unit, or that need a static cleanup.  The latter
7562        are handled by finish_file.  */
7563     return;
7564   
7565   /* Compute the cleanup.  */
7566   cleanup = maybe_build_cleanup (decl);
7567
7568   /* Record the cleanup required for this declaration.  */
7569   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7570       && cleanup)
7571     finish_decl_cleanup (decl, cleanup);
7572 }
7573
7574 /* Let the back-end know about DECL.  */
7575
7576 void
7577 emit_local_var (decl)
7578      tree decl;
7579 {
7580   /* Create RTL for this variable.  */
7581   if (DECL_RTL (decl))
7582     /* Only a RESULT_DECL should have non-NULL RTL when
7583                      arriving here.  All other local variables are
7584                      assigned RTL in this function.  */
7585     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 
7586                         19990828);
7587   else
7588     {
7589       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7590         /* The user must have specified an assembler name for this
7591            variable.  Set that up now.  */
7592         rest_of_decl_compilation 
7593           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7594            /*top_level=*/0, /*at_end=*/0);
7595       else
7596         expand_decl (decl);
7597     }
7598
7599   /* Actually do the initialization.  */
7600   expand_start_target_temps ();
7601   expand_decl_init (decl);
7602   expand_end_target_temps ();
7603 }
7604
7605 /* Finish processing of a declaration;
7606    install its line number and initial value.
7607    If the length of an array type is not known before,
7608    it must be determined now, from the initial value, or it is an error.
7609
7610    Call `pop_obstacks' iff NEED_POP is nonzero.
7611
7612    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7613    for aggregates that have constructors alive on the permanent obstack,
7614    so that the global initializing functions can be written at the end.
7615
7616    INIT0 holds the value of an initializer that should be allowed to escape
7617    the normal rules.
7618
7619    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7620    if the (init) syntax was used.
7621
7622    For functions that take default parameters, DECL points to its
7623    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7624    subsequently lower and lower forms of instantiation, checking for
7625    ambiguity as it goes.  This can be sped up later.  */
7626
7627 void
7628 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7629      tree decl, init;
7630      tree asmspec_tree;
7631      int need_pop;
7632      int flags;
7633 {
7634   register tree type;
7635   tree ttype = NULL_TREE;
7636   int temporary = allocation_temporary_p ();
7637   const char *asmspec = NULL;
7638   int was_readonly = 0;
7639
7640   /* If this is 0, then we did not change obstacks.  */
7641   if (! decl)
7642     {
7643       if (init)
7644         error ("assignment (not initialization) in declaration");
7645       return;
7646     }
7647
7648   /* If a name was specified, get the string.  */
7649   if (asmspec_tree)
7650       asmspec = TREE_STRING_POINTER (asmspec_tree);
7651
7652   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7653     {
7654       cp_error ("Cannot initialize `%D' to namespace `%D'",
7655                 decl, init);
7656       init = NULL_TREE;
7657     }
7658
7659   if (current_class_type
7660       && DECL_REAL_CONTEXT (decl) == current_class_type
7661       && TYPE_BEING_DEFINED (current_class_type)
7662       && (DECL_INITIAL (decl) || init))
7663     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7664
7665   if (TREE_CODE (decl) == VAR_DECL 
7666       && DECL_CONTEXT (decl)
7667       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7668       && DECL_CONTEXT (decl) != current_namespace
7669       && init)
7670     {
7671       /* Leave the namespace of the object. */
7672       pop_decl_namespace ();
7673     }
7674
7675   type = TREE_TYPE (decl);
7676
7677   if (type == error_mark_node)
7678     {
7679       if (toplevel_bindings_p () && temporary)
7680         end_temporary_allocation ();
7681
7682       return;
7683     }
7684
7685   /* Add this declaration to the statement-tree.  */
7686   if (building_stmt_tree () 
7687       && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7688     add_decl_stmt (decl);
7689
7690   if (TYPE_HAS_MUTABLE_P (type))
7691     TREE_READONLY (decl) = 0;
7692
7693   if (processing_template_decl)
7694     {
7695       if (init && DECL_INITIAL (decl))
7696         DECL_INITIAL (decl) = init;
7697       goto finish_end0;
7698     }
7699
7700   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7701   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7702
7703   /* Take care of TYPE_DECLs up front.  */
7704   if (TREE_CODE (decl) == TYPE_DECL)
7705     {
7706       if (init && DECL_INITIAL (decl))
7707         {
7708           /* typedef foo = bar; store the type of bar as the type of foo.  */
7709           TREE_TYPE (decl) = type = TREE_TYPE (init);
7710           DECL_INITIAL (decl) = init = NULL_TREE;
7711         }
7712       if (type != error_mark_node
7713           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7714         {
7715           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7716             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7717           set_identifier_type_value (DECL_NAME (decl), type);
7718           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7719         }
7720       GNU_xref_decl (current_function_decl, decl);
7721
7722       /* If we have installed this as the canonical typedef for this
7723          type, and that type has not been defined yet, delay emitting
7724          the debug information for it, as we will emit it later.  */
7725       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7726           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7727         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7728
7729       rest_of_decl_compilation (decl, NULL_PTR,
7730                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7731       goto finish_end;
7732     }
7733
7734   if (TREE_CODE (decl) != FUNCTION_DECL)
7735     ttype = target_type (type);
7736
7737   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7738       && TYPE_NEEDS_CONSTRUCTING (type))
7739     {
7740       /* Currently, GNU C++ puts constants in text space, making them
7741          impossible to initialize.  In the future, one would hope for
7742          an operating system which understood the difference between
7743          initialization and the running of a program.  */
7744       was_readonly = 1;
7745       TREE_READONLY (decl) = 0;
7746     }
7747
7748   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7749     {
7750       /* This must override the asm specifier which was placed by
7751          grokclassfn.  Lay this out fresh.  */
7752       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7753       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7754       make_decl_rtl (decl, asmspec, 0);
7755     }
7756
7757   /* Deduce size of array from initialization, if not already known.  */
7758   maybe_deduce_size_from_array_init (decl, init);
7759   init = check_initializer (decl, init);
7760
7761   GNU_xref_decl (current_function_decl, decl);
7762
7763   /* For top-level declaration, the initial value was read in
7764      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7765      must go in the permanent obstack; but don't discard the
7766      temporary data yet.  */
7767
7768   if (toplevel_bindings_p () && temporary)
7769     end_temporary_allocation ();
7770
7771   if (TREE_CODE (decl) == VAR_DECL)
7772     layout_var_decl (decl);
7773
7774   /* Output the assembler code and/or RTL code for variables and functions,
7775      unless the type is an undefined structure or union.
7776      If not, it will get done when the type is completed.  */
7777   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7778       || TREE_CODE (decl) == RESULT_DECL)
7779     {
7780       if (TREE_CODE (decl) == VAR_DECL)
7781         maybe_commonize_var (decl);
7782
7783       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7784
7785       if (TREE_CODE (type) == FUNCTION_TYPE 
7786           || TREE_CODE (type) == METHOD_TYPE)
7787         abstract_virtuals_error (decl, 
7788                                  strip_array_types (TREE_TYPE (type)));
7789       else 
7790         abstract_virtuals_error (decl, strip_array_types (type));
7791
7792       if (TREE_CODE (decl) == FUNCTION_DECL)
7793         ;
7794       else if (DECL_EXTERNAL (decl)
7795                && ! (DECL_LANG_SPECIFIC (decl)
7796                      && DECL_NOT_REALLY_EXTERN (decl)))
7797         {
7798           if (init)
7799             DECL_INITIAL (decl) = init;
7800         }
7801       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7802         {
7803           /* This is a local declaration.  */
7804           if (doing_semantic_analysis_p ())
7805             maybe_inject_for_scope_var (decl);
7806           /* Initialize the local variable.  But, if we're building a
7807              statement-tree, we'll do the initialization when we
7808              expand the tree.  */
7809           if (processing_template_decl)
7810             {
7811               if (init || DECL_INITIAL (decl) == error_mark_node)
7812                 DECL_INITIAL (decl) = init;
7813             }
7814           else
7815             {
7816               /* If we're not building RTL, then we need to do so
7817                  now.  */
7818               if (!building_stmt_tree ())
7819                 emit_local_var (decl);
7820               /* Initialize the variable.  */
7821               initialize_local_var (decl, init, flags);
7822               /* Clean up the variable.  */
7823               destroy_local_var (decl);
7824             }
7825         }
7826       else if (TREE_STATIC (decl) && type != error_mark_node)
7827         {
7828           /* Cleanups for static variables are handled by `finish_file'.  */
7829           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7830               || TYPE_NEEDS_DESTRUCTOR (type))
7831             expand_static_init (decl, init);
7832         }
7833     finish_end0:
7834
7835       /* Undo call to `pushclass' that was done in `start_decl'
7836          due to initialization of qualified member variable.
7837          I.e., Foo::x = 10;  */
7838       {
7839         tree context = DECL_REAL_CONTEXT (decl);
7840         if (context
7841             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7842             && (TREE_CODE (decl) == VAR_DECL
7843                 /* We also have a pushclass done that we need to undo here
7844                    if we're at top level and declare a method.  */
7845                 || TREE_CODE (decl) == FUNCTION_DECL)
7846             /* If size hasn't been set, we're still defining it,
7847                and therefore inside the class body; don't pop
7848                the binding level..  */
7849             && TYPE_SIZE (context) != NULL_TREE
7850             && context == current_class_type)
7851           pop_nested_class ();
7852       }
7853     }
7854
7855  finish_end:
7856
7857   /* If requested, warn about definitions of large data objects.  */
7858
7859   if (warn_larger_than
7860       && ! processing_template_decl
7861       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7862       && !DECL_EXTERNAL (decl))
7863     {
7864       register tree decl_size = DECL_SIZE (decl);
7865
7866       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7867         {
7868           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7869
7870           if (units > larger_than_size)
7871             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7872         }
7873     }
7874
7875   if (need_pop)
7876     /* Resume permanent allocation, if not within a function.  The
7877        corresponding push_obstacks_nochange is in start_decl,
7878        start_method, groktypename, and in grokfield.  */
7879     pop_obstacks ();
7880
7881   if (was_readonly)
7882     TREE_READONLY (decl) = 1;
7883 }
7884
7885 /* This is here for a midend callback from c-common.c */
7886
7887 void
7888 finish_decl (decl, init, asmspec_tree)
7889      tree decl, init;
7890      tree asmspec_tree;
7891 {
7892   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7893 }
7894
7895 /* Generate code to handle the destruction of the function-scoped
7896    static variable DECL.  */
7897
7898 static void
7899 destroy_local_static (decl)
7900      tree decl;
7901 {
7902   tree cleanup, fcall;
7903   tree compound_stmt;
7904   int saved_flag_access_control;
7905
7906   if (atexit_node == 0)
7907     {
7908       tree atexit_fndecl, PFV, pfvlist;
7909       /* Remember this information until end of file.  */
7910       push_obstacks (&permanent_obstack, &permanent_obstack);
7911       PFV = build_pointer_type (build_function_type
7912                                 (void_type_node, void_list_node));
7913
7914       pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7915
7916       push_lang_context (lang_name_c);
7917       /* Note that we do not call pushdecl for this function;
7918          there's no reason that this declaration should be
7919          accessible to anyone.  */
7920       atexit_fndecl
7921         = define_function ("atexit",
7922                            build_function_type (void_type_node,
7923                                                 pfvlist),
7924                            /*pfn=*/0, NULL_PTR);
7925       mark_used (atexit_fndecl);
7926       atexit_node = default_conversion (atexit_fndecl);
7927       pop_lang_context ();
7928       pop_obstacks ();
7929     }
7930               
7931   /* Call build_cleanup before we enter the anonymous function so that
7932      any access checks will be done relative to the current scope,
7933      rather than the scope of the anonymous function.  */
7934   build_cleanup (decl);
7935
7936   /* Now start the function.  */
7937   cleanup = start_anon_func ();
7938
7939   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7940      to the original function, rather than the anonymous one.  That
7941      will make the back-end think that nested functions are in use,
7942      which causes confusion.  */
7943   saved_flag_access_control = flag_access_control;
7944   flag_access_control = 0;
7945   fcall = build_cleanup (decl);
7946   flag_access_control = saved_flag_access_control;
7947
7948   /* Create the body of the anonymous function.  */
7949   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7950   finish_expr_stmt (fcall);
7951   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7952   end_anon_func ();
7953
7954   /* Call atexit with the cleanup function.  */
7955   mark_addressable (cleanup);
7956   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7957   fcall = build_function_call (atexit_node,
7958                                tree_cons (NULL_TREE, 
7959                                           cleanup, 
7960                                           NULL_TREE));
7961   finish_expr_stmt (fcall);
7962 }
7963
7964 void
7965 expand_static_init (decl, init)
7966      tree decl;
7967      tree init;
7968 {
7969   tree oldstatic = value_member (decl, static_aggregates);
7970
7971   if (oldstatic)
7972     {
7973       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7974         cp_error ("multiple initializations given for `%D'", decl);
7975     }
7976   else if (! toplevel_bindings_p ())
7977     {
7978       /* Emit code to perform this initialization but once.  */
7979       tree temp;
7980       tree if_stmt;
7981       tree then_clause;
7982       tree assignment;
7983       tree temp_init;
7984
7985       /* Remember this information until end of file.  */
7986       push_obstacks (&permanent_obstack, &permanent_obstack);
7987
7988       /* Emit code to perform this initialization but once.  This code
7989          looks like:
7990
7991            static int temp = 0;
7992            if (!temp) {
7993              // Do initialization.
7994              temp = 1;
7995              // Register variable for destruction at end of program.
7996            }
7997
7998          Note that the `temp' variable is only set to 1 *after* the
7999          initialization is complete.  This ensures that an exception,
8000          thrown during the construction, will cause the variable to
8001          reinitialized when we pass through this code again, as per:
8002          
8003            [stmt.dcl]
8004
8005            If the initialization exits by throwing an exception, the
8006            initialization is not complete, so it will be tried again
8007            the next time control enters the declaration.
8008
8009          In theory, this process should be thread-safe, too; multiple
8010          threads should not be able to initialize the variable more
8011          than once.  We don't yet attempt to ensure thread-safety.  */
8012       temp = get_temp_name (integer_type_node, 1);
8013       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8014
8015       /* Begin the conditional initialization.  */
8016       if_stmt = begin_if_stmt ();
8017       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8018                                             integer_zero_node), 
8019                            if_stmt);
8020       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8021
8022       /* Do the initialization itself.  */
8023       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8024           || (init && TREE_CODE (init) == TREE_LIST))
8025         assignment = build_aggr_init (decl, init, 0);
8026       else if (init)
8027         /* The initialization we're doing here is just a bitwise
8028            copy.  */
8029         assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8030       else
8031         assignment = NULL_TREE;
8032
8033       /* Once the assignment is complete, set TEMP to 1.  Since the
8034          construction of the static object is complete at this point,
8035          we want to make sure TEMP is set to 1 even if a temporary
8036          constructed during the initialization throws an exception
8037          when it is destroyed.  So, we combine the initialization and
8038          the assignment to TEMP into a single expression, ensuring
8039          that when we call finish_expr_stmt the cleanups will not be
8040          run until after TEMP is set to 1.  */
8041       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8042       if (assignment)
8043         {
8044           assignment = tree_cons (NULL_TREE, assignment,
8045                                   build_tree_list (NULL_TREE, 
8046                                                    temp_init));
8047           assignment = build_compound_expr (assignment);
8048         }
8049       else
8050         assignment = temp_init;
8051       finish_expr_stmt (assignment);
8052
8053       /* Use atexit to register a function for destroying this static
8054          variable.  */
8055       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8056         destroy_local_static (decl);
8057
8058       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8059       finish_then_clause (if_stmt);
8060       finish_if_stmt ();
8061
8062       /* Resume old (possibly temporary) allocation.  */
8063       pop_obstacks ();
8064     }
8065   else
8066     {
8067       /* This code takes into account memory allocation policy of
8068          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8069          hold for this object, then we must make permanent the storage
8070          currently in the temporary obstack.  */
8071       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8072         preserve_initializer ();
8073       static_aggregates = tree_cons (init, decl, static_aggregates);
8074     }
8075 }
8076
8077 /* Finish the declaration of a catch-parameter.  */
8078
8079 tree
8080 start_handler_parms (declspecs, declarator)
8081      tree declspecs;
8082      tree declarator;
8083 {
8084   tree decl;
8085   if (declspecs)
8086     {
8087       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8088                              1, NULL_TREE);
8089       if (decl == NULL_TREE)
8090         error ("invalid catch parameter");
8091     }
8092   else
8093     decl = NULL_TREE;
8094
8095   return decl;
8096 }
8097
8098 \f
8099 /* Make TYPE a complete type based on INITIAL_VALUE.
8100    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8101    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8102
8103 int
8104 complete_array_type (type, initial_value, do_default)
8105      tree type, initial_value;
8106      int do_default;
8107 {
8108   register tree maxindex = NULL_TREE;
8109   int value = 0;
8110   
8111   /* Allocate on the same obstack as TYPE.  */
8112   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8113   
8114   if (initial_value)
8115     {
8116       /* Note MAXINDEX  is really the maximum index,
8117          one less than the size.  */
8118       if (TREE_CODE (initial_value) == STRING_CST)
8119         {
8120           int eltsize
8121             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8122           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8123                                    / eltsize) - 1, 0);
8124         }
8125       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8126         {
8127           tree elts = CONSTRUCTOR_ELTS (initial_value);
8128           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8129           for (; elts; elts = TREE_CHAIN (elts))
8130             {
8131               if (TREE_PURPOSE (elts))
8132                 maxindex = TREE_PURPOSE (elts);
8133               else
8134                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8135             }
8136           maxindex = copy_node (maxindex);
8137         }
8138       else
8139         {
8140           /* Make an error message unless that happened already.  */
8141           if (initial_value != error_mark_node)
8142             value = 1;
8143           else
8144             initial_value = NULL_TREE;
8145
8146           /* Prevent further error messages.  */
8147           maxindex = build_int_2 (0, 0);
8148         }
8149     }
8150
8151   if (!maxindex)
8152     {
8153       if (do_default)
8154         maxindex = build_int_2 (0, 0);
8155       value = 2;
8156     }
8157
8158   if (maxindex)
8159     {
8160       tree itype;
8161       tree domain;
8162
8163       domain = build_index_type (maxindex);
8164       TYPE_DOMAIN (type) = domain;
8165
8166       if (! TREE_TYPE (maxindex))
8167         TREE_TYPE (maxindex) = domain;
8168       if (initial_value)
8169         itype = TREE_TYPE (initial_value);
8170       else
8171         itype = NULL;
8172       if (itype && !TYPE_DOMAIN (itype))
8173         TYPE_DOMAIN (itype) = domain;
8174       /* The type of the main variant should never be used for arrays
8175          of different sizes.  It should only ever be completed with the
8176          size of the array.  */
8177       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8178         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8179     }
8180
8181   pop_obstacks();
8182   
8183   /* Lay out the type now that we can get the real answer.  */
8184
8185   layout_type (type);
8186
8187   return value;
8188 }
8189 \f
8190 /* Return zero if something is declared to be a member of type
8191    CTYPE when in the context of CUR_TYPE.  STRING is the error
8192    message to print in that case.  Otherwise, quietly return 1.  */
8193
8194 static int
8195 member_function_or_else (ctype, cur_type, string)
8196      tree ctype, cur_type;
8197      const char *string;
8198 {
8199   if (ctype && ctype != cur_type)
8200     {
8201       error (string, TYPE_NAME_STRING (ctype));
8202       return 0;
8203     }
8204   return 1;
8205 }
8206 \f
8207 /* Subroutine of `grokdeclarator'.  */
8208
8209 /* Generate errors possibly applicable for a given set of specifiers.
8210    This is for ARM $7.1.2.  */
8211
8212 static void
8213 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8214      tree object;
8215      const char *type;
8216      int virtualp, quals, friendp, raises, inlinep;
8217 {
8218   if (virtualp)
8219     cp_error ("`%D' declared as a `virtual' %s", object, type);
8220   if (inlinep)
8221     cp_error ("`%D' declared as an `inline' %s", object, type);
8222   if (quals)
8223     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8224               object, type);
8225   if (friendp)
8226     cp_error_at ("`%D' declared as a friend", object);
8227   if (raises)
8228     cp_error_at ("`%D' declared with an exception specification", object);
8229 }
8230
8231 /* CTYPE is class type, or null if non-class.
8232    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8233    or METHOD_TYPE.
8234    DECLARATOR is the function's name.
8235    VIRTUALP is truthvalue of whether the function is virtual or not.
8236    FLAGS are to be passed through to `grokclassfn'.
8237    QUALS are qualifiers indicating whether the function is `const'
8238    or `volatile'.
8239    RAISES is a list of exceptions that this function can raise.
8240    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8241    not look, and -1 if we should not call `grokclassfn' at all.  
8242
8243    Returns `NULL_TREE' if something goes wrong, after issuing
8244    applicable error messages.  */
8245
8246 static tree
8247 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8248             raises, check, friendp, publicp, inlinep, funcdef_flag,
8249             template_count, in_namespace)
8250      tree ctype, type;
8251      tree declarator;
8252      tree orig_declarator;
8253      int virtualp;
8254      enum overload_flags flags;
8255      tree quals, raises;
8256      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8257      tree in_namespace;
8258 {
8259   tree cname, decl;
8260   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8261   int has_default_arg = 0;
8262   tree t;
8263
8264   if (ctype)
8265     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8266       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8267   else
8268     cname = NULL_TREE;
8269
8270   if (raises)
8271     {
8272       type = build_exception_variant (type, raises);
8273     }
8274
8275   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8276   /* Propagate volatile out from type to decl. */
8277   if (TYPE_VOLATILE (type))
8278     TREE_THIS_VOLATILE (decl) = 1;
8279
8280   /* If this decl has namespace scope, set that up.  */
8281   if (in_namespace)
8282     set_decl_namespace (decl, in_namespace, friendp);
8283   else if (publicp && ! ctype)
8284     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8285
8286   /* `main' and builtins have implicit 'C' linkage.  */
8287   if ((MAIN_NAME_P (declarator)
8288        || (IDENTIFIER_LENGTH (declarator) > 10
8289            && IDENTIFIER_POINTER (declarator)[0] == '_'
8290            && IDENTIFIER_POINTER (declarator)[1] == '_'
8291            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8292       && current_lang_name == lang_name_cplusplus
8293       && ctype == NULL_TREE
8294       /* NULL_TREE means global namespace.  */
8295       && DECL_CONTEXT (decl) == NULL_TREE)
8296     DECL_LANGUAGE (decl) = lang_c;
8297
8298   /* Should probably propagate const out from type to decl I bet (mrs).  */
8299   if (staticp)
8300     {
8301       DECL_STATIC_FUNCTION_P (decl) = 1;
8302       DECL_CONTEXT (decl) = ctype;
8303     }
8304
8305   if (ctype)
8306     DECL_CLASS_CONTEXT (decl) = ctype;
8307
8308   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8309     {
8310       if (processing_template_decl)
8311         error ("cannot declare `main' to be a template");
8312       if (inlinep)
8313         error ("cannot declare `main' to be inline");
8314       else if (! publicp)
8315         error ("cannot declare `main' to be static");
8316       inlinep = 0;
8317       publicp = 1;
8318     }
8319
8320   /* Members of anonymous types and local classes have no linkage; make
8321      them internal.  */
8322   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8323                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8324     publicp = 0;
8325
8326   if (publicp)
8327     {
8328       /* [basic.link]: A name with no linkage (notably, the name of a class
8329          or enumeration declared in a local scope) shall not be used to
8330          declare an entity with linkage.
8331
8332          Only check this for public decls for now.  */
8333       t = no_linkage_check (TREE_TYPE (decl));
8334       if (t)
8335         {
8336           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8337             {
8338               if (DECL_LANGUAGE (decl) == lang_c)
8339                 /* Allow this; it's pretty common in C.  */;
8340               else
8341                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8342                             decl);
8343             }
8344           else
8345             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8346                         decl, t);
8347         }
8348     }
8349
8350   TREE_PUBLIC (decl) = publicp;
8351   if (! publicp)
8352     {
8353       DECL_INTERFACE_KNOWN (decl) = 1;
8354       DECL_NOT_REALLY_EXTERN (decl) = 1;
8355     }
8356
8357   if (inlinep)
8358     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8359
8360   DECL_EXTERNAL (decl) = 1;
8361   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8362     {
8363       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8364                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8365       quals = NULL_TREE;
8366     }
8367
8368   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8369     grok_op_properties (decl, virtualp, check < 0);
8370
8371   if (ctype && hack_decl_function_context (decl))
8372     DECL_NO_STATIC_CHAIN (decl) = 1;
8373
8374   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8375     if (TREE_PURPOSE (t)
8376         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8377       {
8378         has_default_arg = 1;
8379         break;
8380       }
8381
8382   if (friendp
8383       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8384     {
8385       if (funcdef_flag)
8386         cp_error
8387           ("defining explicit specialization `%D' in friend declaration",
8388            orig_declarator);
8389       else
8390         {
8391           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8392             {
8393               /* Something like `template <class T> friend void f<T>()'.  */
8394               cp_error ("template-id `%D' in declaration of primary template", 
8395                         orig_declarator);
8396               return NULL_TREE;
8397             }
8398
8399
8400           /* A friend declaration of the form friend void f<>().  Record
8401              the information in the TEMPLATE_ID_EXPR.  */
8402           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8403           DECL_TEMPLATE_INFO (decl)
8404             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8405                          TREE_OPERAND (orig_declarator, 1),
8406                          NULL_TREE);
8407
8408           if (has_default_arg)
8409             {
8410               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8411                         decl);
8412               return NULL_TREE;
8413             }
8414
8415           if (inlinep)
8416             {
8417               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8418                         decl);
8419               return NULL_TREE;
8420             }
8421         }
8422     }
8423
8424   if (has_default_arg)
8425     add_defarg_fn (decl);
8426
8427   /* Plain overloading: will not be grok'd by grokclassfn.  */
8428   if (! ctype && ! processing_template_decl
8429       && DECL_LANGUAGE (decl) != lang_c
8430       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8431     set_mangled_name_for_decl (decl);
8432
8433   if (funcdef_flag)
8434     /* Make the init_value nonzero so pushdecl knows this is not
8435        tentative.  error_mark_node is replaced later with the BLOCK.  */
8436     DECL_INITIAL (decl) = error_mark_node;
8437
8438   /* Caller will do the rest of this.  */
8439   if (check < 0)
8440     return decl;
8441
8442   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8443     {
8444       tree tmp;
8445       /* Just handle constructors here.  We could do this
8446          inside the following if stmt, but I think
8447          that the code is more legible by breaking this
8448          case out.  See comments below for what each of
8449          the following calls is supposed to do.  */
8450       DECL_CONSTRUCTOR_P (decl) = 1;
8451
8452       grokclassfn (ctype, decl, flags, quals);
8453
8454       decl = check_explicit_specialization (orig_declarator, decl,
8455                                             template_count, 
8456                                             2 * (funcdef_flag != 0) + 
8457                                             4 * (friendp != 0));
8458       if (decl == error_mark_node)
8459         return NULL_TREE;
8460
8461       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8462           && check)
8463         {
8464           tmp = check_classfn (ctype, decl);
8465
8466           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8467             tmp = DECL_TEMPLATE_RESULT(tmp);
8468
8469           if (tmp && DECL_ARTIFICIAL (tmp))
8470             cp_error ("definition of implicitly-declared `%D'", tmp);
8471           if (tmp && duplicate_decls (decl, tmp))
8472             return tmp;
8473         }
8474       if (! grok_ctor_properties (ctype, decl))
8475         return NULL_TREE;
8476     }
8477   else
8478     {
8479       tree tmp;
8480
8481       /* Function gets the ugly name, field gets the nice one.
8482          This call may change the type of the function (because
8483          of default parameters)!  */
8484       if (ctype != NULL_TREE)
8485         grokclassfn (ctype, decl, flags, quals);
8486
8487       decl = check_explicit_specialization (orig_declarator, decl,
8488                                             template_count, 
8489                                             2 * (funcdef_flag != 0) + 
8490                                             4 * (friendp != 0));
8491       if (decl == error_mark_node)
8492         return NULL_TREE;
8493
8494       if (ctype != NULL_TREE
8495           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8496           && check)
8497         {
8498           tmp = check_classfn (ctype, decl);
8499
8500           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8501             tmp = DECL_TEMPLATE_RESULT (tmp);
8502               
8503           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8504               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8505             {
8506               /* Remove the `this' parm added by grokclassfn.
8507                  XXX Isn't this done in start_function, too?  */
8508               revert_static_member_fn (&decl, NULL, NULL);
8509               last_function_parms = TREE_CHAIN (last_function_parms);
8510             }
8511           if (tmp && DECL_ARTIFICIAL (tmp))
8512             cp_error ("definition of implicitly-declared `%D'", tmp);
8513           if (tmp)
8514             {
8515               /* Attempt to merge the declarations.  This can fail, in
8516                  the case of some illegal specialization declarations.  */
8517               if (!duplicate_decls (decl, tmp))
8518                 cp_error ("no `%#D' member function declared in class `%T'",
8519                           decl, ctype);
8520               return tmp;
8521             }
8522         }
8523
8524       if (ctype == NULL_TREE || check)
8525         return decl;
8526
8527       if (virtualp)
8528         {
8529           DECL_VIRTUAL_P (decl) = 1;
8530           if (DECL_VINDEX (decl) == NULL_TREE)
8531             DECL_VINDEX (decl) = error_mark_node;
8532           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8533         }
8534     }
8535   return decl;
8536 }
8537
8538 static tree
8539 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8540      tree type;
8541      tree declarator;
8542      RID_BIT_TYPE *specbits_in;
8543      int initialized;
8544      int constp;
8545      tree in_namespace;
8546 {
8547   tree decl;
8548   RID_BIT_TYPE specbits;
8549
8550   specbits = *specbits_in;
8551
8552   if (TREE_CODE (type) == OFFSET_TYPE)
8553     {
8554       /* If you declare a static member so that it
8555          can be initialized, the code will reach here.  */
8556       tree basetype = TYPE_OFFSET_BASETYPE (type);
8557       type = TREE_TYPE (type);
8558       decl = build_lang_decl (VAR_DECL, declarator, type);
8559       DECL_CONTEXT (decl) = basetype;
8560       DECL_CLASS_CONTEXT (decl) = basetype;
8561       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8562     }
8563   else
8564     {
8565       tree context;
8566
8567       if (in_namespace)
8568         context = in_namespace;
8569       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8570         context = current_namespace;
8571       else
8572         context = NULL_TREE;
8573
8574       if (processing_template_decl) 
8575         {
8576           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8577              we can call push_template_decl.  */
8578           push_permanent_obstack ();
8579           decl = build_lang_decl (VAR_DECL, declarator, type);
8580           pop_obstacks ();
8581         }
8582       else
8583         decl = build_decl (VAR_DECL, declarator, type);
8584
8585       if (context)
8586         set_decl_namespace (decl, context, 0);
8587
8588       context = DECL_CONTEXT (decl);
8589       if (declarator && context && current_lang_name != lang_name_c)
8590         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8591     }
8592
8593   if (in_namespace)
8594     set_decl_namespace (decl, in_namespace, 0);
8595
8596   if (RIDBIT_SETP (RID_EXTERN, specbits))
8597     {
8598       DECL_THIS_EXTERN (decl) = 1;
8599       DECL_EXTERNAL (decl) = !initialized;
8600     }
8601
8602   /* In class context, static means one per class,
8603      public access, and static storage.  */
8604   if (DECL_CLASS_SCOPE_P (decl))
8605     {
8606       TREE_PUBLIC (decl) = 1;
8607       TREE_STATIC (decl) = 1;
8608       DECL_EXTERNAL (decl) = 0;
8609     }
8610   /* At top level, either `static' or no s.c. makes a definition
8611      (perhaps tentative), and absence of `static' makes it public.  */
8612   else if (toplevel_bindings_p ())
8613     {
8614       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8615                             && (DECL_THIS_EXTERN (decl) || ! constp));
8616       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8617     }
8618   /* Not at top level, only `static' makes a static definition.  */
8619   else
8620     {
8621       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8622       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8623     }
8624
8625   if (TREE_PUBLIC (decl))
8626     {
8627       /* [basic.link]: A name with no linkage (notably, the name of a class
8628          or enumeration declared in a local scope) shall not be used to
8629          declare an entity with linkage.
8630
8631          Only check this for public decls for now.  */
8632       tree t = no_linkage_check (TREE_TYPE (decl));
8633       if (t)
8634         {
8635           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8636             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8637           else
8638             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8639                         decl, t);
8640         }
8641     }
8642
8643   return decl;
8644 }
8645
8646 /* Create and return a canonical pointer to member function type, for
8647    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8648
8649 tree
8650 build_ptrmemfunc_type (type)
8651      tree type;
8652 {
8653   tree fields[4];
8654   tree t;
8655   tree u;
8656   tree unqualified_variant = NULL_TREE;
8657
8658   /* If a canonical type already exists for this type, use it.  We use
8659      this method instead of type_hash_canon, because it only does a
8660      simple equality check on the list of field members.  */
8661
8662   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8663     return t;
8664
8665   /* Make sure that we always have the unqualified pointer-to-member
8666      type first.  */
8667   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8668     unqualified_variant 
8669       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8670
8671   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8672
8673   u = make_lang_type (UNION_TYPE);
8674   SET_IS_AGGR_TYPE (u, 0);
8675   fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8676   fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8677                                delta_type_node);
8678   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8679   TYPE_NAME (u) = NULL_TREE;
8680
8681   t = make_lang_type (RECORD_TYPE);
8682
8683   /* Let the front-end know this is a pointer to member function...  */
8684   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8685   /* ... and not really an aggregate.  */
8686   SET_IS_AGGR_TYPE (t, 0);
8687
8688   fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8689                                delta_type_node);
8690   fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8691                                delta_type_node);
8692   fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8693   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8694
8695   pop_obstacks ();
8696
8697   /* Zap out the name so that the back-end will give us the debugging
8698      information for this anonymous RECORD_TYPE.  */
8699   TYPE_NAME (t) = NULL_TREE;
8700
8701   /* If this is not the unqualified form of this pointer-to-member
8702      type, set the TYPE_MAIN_VARIANT for this type to be the
8703      unqualified type.  Since they are actually RECORD_TYPEs that are
8704      not variants of each other, we must do this manually.  */
8705   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8706     {
8707       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8708       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8709       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8710       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8711     }
8712
8713   /* Cache this pointer-to-member type so that we can find it again
8714      later.  */
8715   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8716
8717   /* Seems to be wanted.  */
8718   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8719
8720   return t;
8721 }
8722
8723 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8724    Check to see that the definition is valid.  Issue appropriate error
8725    messages.  Return 1 if the definition is particularly bad, or 0
8726    otherwise.  */
8727
8728 int
8729 check_static_variable_definition (decl, type)
8730      tree decl;
8731      tree type;
8732 {
8733   /* Motion 10 at San Diego: If a static const integral data member is
8734      initialized with an integral constant expression, the initializer
8735      may appear either in the declaration (within the class), or in
8736      the definition, but not both.  If it appears in the class, the
8737      member is a member constant.  The file-scope definition is always
8738      required.  */
8739   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8740     {
8741       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8742                 type);
8743       /* If we just return the declaration, crashes will sometimes
8744          occur.  We therefore return void_type_node, as if this was a
8745          friend declaration, to cause callers to completely ignore
8746          this declaration.  */
8747       return 1;
8748     }
8749   else if (!CP_TYPE_CONST_P (type))
8750     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8751               decl);
8752   else if (pedantic && !INTEGRAL_TYPE_P (type))
8753     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8754
8755   return 0;
8756 }
8757
8758 /* Given declspecs and a declarator,
8759    determine the name and type of the object declared
8760    and construct a ..._DECL node for it.
8761    (In one case we can return a ..._TYPE node instead.
8762     For invalid input we sometimes return 0.)
8763
8764    DECLSPECS is a chain of tree_list nodes whose value fields
8765     are the storage classes and type specifiers.
8766
8767    DECL_CONTEXT says which syntactic context this declaration is in:
8768      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8769      FUNCDEF for a function definition.  Like NORMAL but a few different
8770       error messages in each case.  Return value may be zero meaning
8771       this definition is too screwy to try to parse.
8772      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8773       handle member functions (which have FIELD context).
8774       Return value may be zero meaning this definition is too screwy to
8775       try to parse.
8776      PARM for a parameter declaration (either within a function prototype
8777       or before a function body).  Make a PARM_DECL, or return void_type_node.
8778      CATCHPARM for a parameter declaration before a catch clause.
8779      TYPENAME if for a typename (in a cast or sizeof).
8780       Don't make a DECL node; just return the ..._TYPE node.
8781      FIELD for a struct or union field; make a FIELD_DECL.
8782      BITFIELD for a field with specified width.
8783    INITIALIZED is 1 if the decl has an initializer.
8784
8785    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8786    normal attributes in TREE_PURPOSE, or NULL_TREE.
8787
8788    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8789    It may also be so in the PARM case, for a prototype where the
8790    argument type is specified but not the name.
8791
8792    This function is where the complicated C meanings of `static'
8793    and `extern' are interpreted.
8794
8795    For C++, if there is any monkey business to do, the function which
8796    calls this one must do it, i.e., prepending instance variables,
8797    renaming overloaded function names, etc.
8798
8799    Note that for this C++, it is an error to define a method within a class
8800    which does not belong to that class.
8801
8802    Except in the case where SCOPE_REFs are implicitly known (such as
8803    methods within a class being redundantly qualified),
8804    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8805    (class_name::decl_name).  The caller must also deal with this.
8806
8807    If a constructor or destructor is seen, and the context is FIELD,
8808    then the type gains the attribute TREE_HAS_x.  If such a declaration
8809    is erroneous, NULL_TREE is returned.
8810
8811    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8812    function, these are the qualifiers to give to the `this' pointer.
8813
8814    May return void_type_node if the declarator turned out to be a friend.
8815    See grokfield for details.  */
8816
8817 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8818
8819 tree
8820 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8821      tree declspecs;
8822      tree declarator;
8823      enum decl_context decl_context;
8824      int initialized;
8825      tree attrlist;
8826 {
8827   RID_BIT_TYPE specbits;
8828   int nclasses = 0;
8829   tree spec;
8830   tree type = NULL_TREE;
8831   int longlong = 0;
8832   int constp;
8833   int restrictp;
8834   int volatilep;
8835   int type_quals;
8836   int virtualp, explicitp, friendp, inlinep, staticp;
8837   int explicit_int = 0;
8838   int explicit_char = 0;
8839   int defaulted_int = 0;
8840   tree typedef_decl = NULL_TREE;
8841   const char *name;
8842   tree typedef_type = NULL_TREE;
8843   int funcdef_flag = 0;
8844   enum tree_code innermost_code = ERROR_MARK;
8845   int bitfield = 0;
8846 #if 0
8847   /* See the code below that used this.  */
8848   tree decl_machine_attr = NULL_TREE;
8849 #endif
8850   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8851      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8852   tree init = NULL_TREE;
8853
8854   /* Keep track of what sort of function is being processed
8855      so that we can warn about default return values, or explicit
8856      return values which do not match prescribed defaults.  */
8857   enum return_types return_type = return_normal;
8858
8859   tree dname = NULL_TREE;
8860   tree ctype = current_class_type;
8861   tree ctor_return_type = NULL_TREE;
8862   enum overload_flags flags = NO_SPECIAL;
8863   tree quals = NULL_TREE;
8864   tree raises = NULL_TREE;
8865   int template_count = 0;
8866   tree in_namespace = NULL_TREE;
8867   tree inner_attrs;
8868   int ignore_attrs;
8869
8870   RIDBIT_RESET_ALL (specbits);
8871   if (decl_context == FUNCDEF)
8872     funcdef_flag = 1, decl_context = NORMAL;
8873   else if (decl_context == MEMFUNCDEF)
8874     funcdef_flag = -1, decl_context = FIELD;
8875   else if (decl_context == BITFIELD)
8876     bitfield = 1, decl_context = FIELD;
8877
8878   /* Look inside a declarator for the name being declared
8879      and get it as a string, for an error message.  */
8880   {
8881     tree *next = &declarator;
8882     register tree decl;
8883     name = NULL;
8884
8885     while (next && *next)
8886       {
8887         decl = *next;
8888         switch (TREE_CODE (decl))
8889           {
8890           case TREE_LIST:
8891             /* For attributes.  */
8892             next = &TREE_VALUE (decl);
8893             break;
8894
8895           case COND_EXPR:
8896             ctype = NULL_TREE;
8897             next = &TREE_OPERAND (decl, 0);
8898             break;
8899
8900           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8901             {
8902               tree name = TREE_OPERAND (decl, 0);
8903               tree rename = NULL_TREE;
8904
8905               my_friendly_assert (flags == NO_SPECIAL, 152);
8906               flags = DTOR_FLAG;
8907               return_type = return_dtor;
8908               if (TREE_CODE (name) == TYPE_DECL)
8909                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8910               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8911               if (ctype == NULL_TREE)
8912                 {
8913                   if (current_class_type == NULL_TREE)
8914                     {
8915                       error ("destructors must be member functions");
8916                       flags = NO_SPECIAL;
8917                     }
8918                   else
8919                     {
8920                       tree t = constructor_name (current_class_name);
8921                       if (t != name)
8922                         rename = t;
8923                     }
8924                 }
8925               else
8926                 {
8927                   tree t = constructor_name (ctype);
8928                   if (t != name)
8929                     rename = t;
8930                 }
8931
8932               if (rename)
8933                 {
8934                   cp_error ("destructor `%T' must match class name `%T'",
8935                             name, rename);
8936                   TREE_OPERAND (decl, 0) = rename;
8937                 }
8938               next = &name;
8939             }
8940             break;
8941
8942           case ADDR_EXPR:       /* C++ reference declaration */
8943             /* Fall through. */
8944           case ARRAY_REF:
8945           case INDIRECT_REF:
8946             ctype = NULL_TREE;
8947             innermost_code = TREE_CODE (decl);
8948             next = &TREE_OPERAND (decl, 0);
8949             break;
8950
8951           case CALL_EXPR:
8952             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8953               {
8954                 /* This is actually a variable declaration using
8955                    constructor syntax.  We need to call start_decl and
8956                    cp_finish_decl so we can get the variable
8957                    initialized...  */
8958
8959                 tree attributes, prefix_attributes;
8960
8961                 *next = TREE_OPERAND (decl, 0);
8962                 init = CALL_DECLARATOR_PARMS (decl);
8963
8964                 if (attrlist)
8965                   {
8966                     attributes = TREE_PURPOSE (attrlist);
8967                     prefix_attributes = TREE_VALUE (attrlist);
8968                   }
8969                 else
8970                   {
8971                     attributes = NULL_TREE;
8972                     prefix_attributes = NULL_TREE;
8973                   }
8974
8975                 decl = start_decl (declarator, declspecs, 1,
8976                                    attributes, prefix_attributes);
8977                 if (decl)
8978                   {
8979                     /* Look for __unused__ attribute */
8980                     if (TREE_USED (TREE_TYPE (decl)))
8981                       TREE_USED (decl) = 1;
8982                     finish_decl (decl, init, NULL_TREE);
8983                   }
8984                 else
8985                   cp_error ("invalid declarator");
8986                 return 0;
8987               }
8988             innermost_code = TREE_CODE (decl);
8989             if (decl_context == FIELD && ctype == NULL_TREE)
8990               ctype = current_class_type;
8991             if (ctype
8992                 && TREE_OPERAND (decl, 0)
8993                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8994                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
8995                          == constructor_name_full (ctype))
8996                         || (DECL_NAME (TREE_OPERAND (decl, 0))
8997                             == constructor_name (ctype)))))
8998               TREE_OPERAND (decl, 0) = constructor_name (ctype);
8999             next = &TREE_OPERAND (decl, 0);
9000             decl = *next;
9001             if (ctype != NULL_TREE
9002                 && decl != NULL_TREE && flags != DTOR_FLAG
9003                 && decl == constructor_name (ctype))
9004               {
9005                 return_type = return_ctor;
9006                 ctor_return_type = ctype;
9007               }
9008             ctype = NULL_TREE;
9009             break;
9010             
9011           case TEMPLATE_ID_EXPR:
9012               {
9013                 tree fns = TREE_OPERAND (decl, 0);
9014
9015                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9016                   fns = TREE_OPERAND (fns, 0);
9017
9018                 dname = fns;
9019                 if (TREE_CODE (dname) == COMPONENT_REF)
9020                   dname = TREE_OPERAND (dname, 1);
9021                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9022                   {
9023                     my_friendly_assert (is_overloaded_fn (dname),
9024                                         19990331);
9025                     dname = DECL_NAME (get_first_fn (dname));
9026                   }
9027               }
9028           /* Fall through. */
9029
9030           case IDENTIFIER_NODE:
9031             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9032               dname = decl;
9033
9034             next = 0;
9035
9036             if (is_rid (dname))
9037               {
9038                 cp_error ("declarator-id missing; using reserved word `%D'",
9039                           dname);
9040                 name = IDENTIFIER_POINTER (dname);
9041               }
9042             if (! IDENTIFIER_OPNAME_P (dname)
9043                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9044                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9045               name = IDENTIFIER_POINTER (dname);
9046             else
9047               {
9048                 if (IDENTIFIER_TYPENAME_P (dname))
9049                   {
9050                     my_friendly_assert (flags == NO_SPECIAL, 154);
9051                     flags = TYPENAME_FLAG;
9052                     ctor_return_type = TREE_TYPE (dname);
9053                     return_type = return_conversion;
9054                   }
9055                 name = operator_name_string (dname);
9056               }
9057             break;
9058
9059             /* C++ extension */
9060           case SCOPE_REF:
9061             {
9062               /* Perform error checking, and decide on a ctype.  */
9063               tree cname = TREE_OPERAND (decl, 0);
9064               if (cname == NULL_TREE)
9065                 ctype = NULL_TREE;
9066               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9067                 {
9068                   ctype = NULL_TREE;
9069                   in_namespace = TREE_OPERAND (decl, 0);
9070                   TREE_OPERAND (decl, 0) = NULL_TREE;
9071                 }
9072               else if (! is_aggr_type (cname, 1))
9073                 TREE_OPERAND (decl, 0) = NULL_TREE;
9074               /* Must test TREE_OPERAND (decl, 1), in case user gives
9075                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9076               else if (TREE_OPERAND (decl, 1)
9077                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9078                 ctype = cname;
9079               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9080                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9081                 {
9082                   cp_error ("`%T::%D' is not a valid declarator", cname,
9083                             TREE_OPERAND (decl, 1));
9084                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9085                             cname, TREE_OPERAND (decl, 1));
9086                   return void_type_node;
9087                 }
9088               else if (ctype == NULL_TREE)
9089                 ctype = cname;
9090               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9091                 TREE_OPERAND (decl, 0) = ctype;
9092               else
9093                 {
9094                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9095                     {
9096                       cp_error ("type `%T' is not derived from type `%T'",
9097                                 cname, ctype);
9098                       TREE_OPERAND (decl, 0) = NULL_TREE;
9099                     }
9100                   else
9101                     ctype = cname;
9102                 }
9103
9104               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9105                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9106                        == constructor_name_full (ctype))
9107                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9108                           == constructor_name (ctype))))
9109                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9110               next = &TREE_OPERAND (decl, 1);
9111               decl = *next;
9112               if (ctype)
9113                 {
9114                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9115                       && constructor_name (ctype) == decl)
9116                     {
9117                       return_type = return_ctor;
9118                       ctor_return_type = ctype;
9119                     }
9120                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9121                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9122                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9123                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9124                     {
9125                       return_type = return_dtor;
9126                       ctor_return_type = ctype;
9127                       flags = DTOR_FLAG;
9128                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9129                       next = &TREE_OPERAND (decl, 0);
9130                     }
9131                 }
9132             }
9133             break;
9134
9135           case ERROR_MARK:
9136             next = 0;
9137             break;
9138
9139           case TYPE_DECL:
9140             /* Parse error puts this typespec where
9141                a declarator should go.  */
9142             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9143             if (TREE_TYPE (decl) == current_class_type)
9144               cp_error ("  perhaps you want `%T' for a constructor",
9145                         current_class_name);
9146             dname = DECL_NAME (decl);
9147             name = IDENTIFIER_POINTER (dname);
9148
9149             /* Avoid giving two errors for this.  */
9150             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9151
9152             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9153                                         declspecs);
9154             *next = dname;
9155             next = 0;
9156             break;
9157
9158           default:
9159             cp_compiler_error ("`%D' as declarator", decl);
9160             return 0; /* We used to do a 155 abort here.  */
9161           }
9162       }
9163   }
9164
9165   /* A function definition's declarator must have the form of
9166      a function declarator.  */
9167
9168   if (funcdef_flag && innermost_code != CALL_EXPR)
9169     return 0;
9170
9171   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9172       && innermost_code != CALL_EXPR
9173       && ! (ctype && declspecs == NULL_TREE))
9174     {
9175       cp_error ("declaration of `%D' as non-function", dname);
9176       return void_type_node;
9177     }
9178
9179   /* Anything declared one level down from the top level
9180      must be one of the parameters of a function
9181      (because the body is at least two levels down).  */
9182
9183   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9184      by not allowing C++ class definitions to specify their parameters
9185      with xdecls (must be spec.d in the parmlist).
9186
9187      Since we now wait to push a class scope until we are sure that
9188      we are in a legitimate method context, we must set oldcname
9189      explicitly (since current_class_name is not yet alive).
9190
9191      We also want to avoid calling this a PARM if it is in a namespace.  */
9192
9193   if (decl_context == NORMAL && !toplevel_bindings_p ())
9194     {
9195       struct binding_level *b = current_binding_level;
9196       current_binding_level = b->level_chain;
9197       if (current_binding_level != 0 && toplevel_bindings_p ())
9198         decl_context = PARM;
9199       current_binding_level = b;
9200     }
9201
9202   if (name == NULL)
9203     name = decl_context == PARM ? "parameter" : "type name";
9204   
9205   /* Look through the decl specs and record which ones appear.
9206      Some typespecs are defined as built-in typenames.
9207      Others, the ones that are modifiers of other types,
9208      are represented by bits in SPECBITS: set the bits for
9209      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9210
9211      If there is a typedef name or a type, store the type in TYPE.
9212      This includes builtin typedefs such as `int'.
9213
9214      Set EXPLICIT_INT if the type is `int' or `char' and did not
9215      come from a user typedef.
9216
9217      Set LONGLONG if `long' is mentioned twice.
9218
9219      For C++, constructors and destructors have their own fast treatment.  */
9220
9221   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9222     {
9223       register int i;
9224       register tree id;
9225
9226       /* Certain parse errors slip through.  For example,
9227          `int class;' is not caught by the parser. Try
9228          weakly to recover here.  */
9229       if (TREE_CODE (spec) != TREE_LIST)
9230         return 0;
9231
9232       id = TREE_VALUE (spec);
9233
9234       if (TREE_CODE (id) == IDENTIFIER_NODE)
9235         {
9236           if (id == ridpointers[(int) RID_INT]
9237               || id == ridpointers[(int) RID_CHAR]
9238               || id == ridpointers[(int) RID_BOOL]
9239               || id == ridpointers[(int) RID_WCHAR])
9240             {
9241               if (type)
9242                 {
9243                   if (id == ridpointers[(int) RID_BOOL])
9244                     error ("`bool' is now a keyword");
9245                   else
9246                     cp_error ("extraneous `%T' ignored", id);
9247                 }
9248               else
9249                 {
9250                   if (id == ridpointers[(int) RID_INT])
9251                     explicit_int = 1;
9252                   else if (id == ridpointers[(int) RID_CHAR])
9253                     explicit_char = 1;
9254                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9255                 }
9256               goto found;
9257             }
9258           /* C++ aggregate types.  */
9259           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9260             {
9261               if (type)
9262                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9263               else
9264                 type = IDENTIFIER_TYPE_VALUE (id);
9265               goto found;
9266             }
9267
9268           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9269             {
9270               if (ridpointers[i] == id)
9271                 {
9272                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9273                     {
9274                       if (pedantic && ! in_system_header && warn_long_long)
9275                         pedwarn ("ANSI C++ does not support `long long'");
9276                       if (longlong)
9277                         error ("`long long long' is too long for GCC");
9278                       else
9279                         longlong = 1;
9280                     }
9281                   else if (RIDBIT_SETP (i, specbits))
9282                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9283                   RIDBIT_SET (i, specbits);
9284                   goto found;
9285                 }
9286             }
9287         }
9288       /* C++ aggregate types.  */
9289       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9290         {
9291           if (type)
9292             cp_error ("multiple declarations `%T' and `%T'", type,
9293                       TREE_TYPE (id));
9294           else
9295             {
9296               type = TREE_TYPE (id);
9297               TREE_VALUE (spec) = type;
9298             }
9299           goto found;
9300         }
9301       if (type)
9302         error ("two or more data types in declaration of `%s'", name);
9303       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9304         {
9305           register tree t = lookup_name (id, 1);
9306           if (!t || TREE_CODE (t) != TYPE_DECL)
9307             error ("`%s' fails to be a typedef or built in type",
9308                    IDENTIFIER_POINTER (id));
9309           else
9310             {
9311               type = TREE_TYPE (t);
9312 #if 0
9313               /* See the code below that used this.  */
9314               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9315 #endif
9316               typedef_decl = t;
9317             }
9318         }
9319       else if (id != error_mark_node)
9320         /* Can't change CLASS nodes into RECORD nodes here!  */
9321         type = id;
9322
9323     found: ;
9324     }
9325
9326   typedef_type = type;
9327
9328   /* No type at all: default to `int', and set DEFAULTED_INT
9329      because it was not a user-defined typedef.  */
9330
9331   if (type == NULL_TREE
9332       && (RIDBIT_SETP (RID_SIGNED, specbits)
9333           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9334           || RIDBIT_SETP (RID_LONG, specbits)
9335           || RIDBIT_SETP (RID_SHORT, specbits)))
9336     {
9337       /* These imply 'int'.  */
9338       type = integer_type_node;
9339       defaulted_int = 1;
9340     }
9341
9342   if (type == NULL_TREE)
9343     {
9344       explicit_int = -1;
9345       if (return_type == return_dtor)
9346         type = void_type_node;
9347       else if (return_type == return_ctor)
9348         type = build_pointer_type (ctor_return_type);
9349       else if (return_type == return_conversion)
9350         type = ctor_return_type;
9351       else
9352         {
9353           /* We handle `main' specially here, because 'main () { }' is so
9354              common.  With no options, it is allowed.  With -Wreturn-type,
9355              it is a warning.  It is only an error with -pedantic-errors.  */
9356           int is_main = (funcdef_flag
9357                          && MAIN_NAME_P (dname)
9358                          && ctype == NULL_TREE
9359                          && in_namespace == NULL_TREE
9360                          && current_namespace == global_namespace);
9361
9362           if (in_system_header || flag_ms_extensions)
9363             /* Allow it, sigh.  */;
9364           else if (pedantic || ! is_main)
9365             cp_pedwarn ("ANSI C++ forbids declaration of `%s' with no type",
9366                         name);
9367           else if (warn_return_type)
9368             cp_warning ("ANSI C++ forbids declaration of `%s' with no type",
9369                         name);
9370
9371           type = integer_type_node;
9372         }
9373     }
9374   else if (return_type == return_dtor)
9375     {
9376       error ("return type specification for destructor invalid");
9377       type = void_type_node;
9378     }
9379   else if (return_type == return_ctor)
9380     {
9381       error ("return type specification for constructor invalid");
9382       type = build_pointer_type (ctor_return_type);
9383     }
9384   else if (return_type == return_conversion)
9385     {
9386       if (!same_type_p (type, ctor_return_type))
9387         cp_error ("operator `%T' declared to return `%T'",
9388                   ctor_return_type, type);
9389       else
9390         cp_pedwarn ("return type specified for `operator %T'",
9391                     ctor_return_type);
9392
9393       type = ctor_return_type;
9394     }
9395
9396   ctype = NULL_TREE;
9397
9398   /* Now process the modifiers that were specified
9399      and check for invalid combinations.  */
9400
9401   /* Long double is a special combination.  */
9402
9403   if (RIDBIT_SETP (RID_LONG, specbits)
9404       && TYPE_MAIN_VARIANT (type) == double_type_node)
9405     {
9406       RIDBIT_RESET (RID_LONG, specbits);
9407       type = build_qualified_type (long_double_type_node, 
9408                                    CP_TYPE_QUALS (type));
9409     }
9410
9411   /* Check all other uses of type modifiers.  */
9412
9413   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9414       || RIDBIT_SETP (RID_SIGNED, specbits)
9415       || RIDBIT_SETP (RID_LONG, specbits)
9416       || RIDBIT_SETP (RID_SHORT, specbits))
9417     {
9418       int ok = 0;
9419
9420       if (TREE_CODE (type) == REAL_TYPE)
9421         error ("short, signed or unsigned invalid for `%s'", name);
9422       else if (TREE_CODE (type) != INTEGER_TYPE)
9423         error ("long, short, signed or unsigned invalid for `%s'", name);
9424       else if (RIDBIT_SETP (RID_LONG, specbits)
9425                && RIDBIT_SETP (RID_SHORT, specbits))
9426         error ("long and short specified together for `%s'", name);
9427       else if ((RIDBIT_SETP (RID_LONG, specbits)
9428                 || RIDBIT_SETP (RID_SHORT, specbits))
9429                && explicit_char)
9430         error ("long or short specified with char for `%s'", name);
9431       else if ((RIDBIT_SETP (RID_LONG, specbits)
9432                 || RIDBIT_SETP (RID_SHORT, specbits))
9433                && TREE_CODE (type) == REAL_TYPE)
9434         error ("long or short specified with floating type for `%s'", name);
9435       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9436                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9437         error ("signed and unsigned given together for `%s'", name);
9438       else
9439         {
9440           ok = 1;
9441           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9442             {
9443               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9444                        name);
9445               if (flag_pedantic_errors)
9446                 ok = 0;
9447             }
9448         }
9449
9450       /* Discard the type modifiers if they are invalid.  */
9451       if (! ok)
9452         {
9453           RIDBIT_RESET (RID_UNSIGNED, specbits);
9454           RIDBIT_RESET (RID_SIGNED, specbits);
9455           RIDBIT_RESET (RID_LONG, specbits);
9456           RIDBIT_RESET (RID_SHORT, specbits);
9457           longlong = 0;
9458         }
9459     }
9460
9461   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9462       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9463     {
9464       error ("complex invalid for `%s'", name);
9465       RIDBIT_RESET (RID_COMPLEX, specbits);
9466     }
9467
9468   /* Decide whether an integer type is signed or not.
9469      Optionally treat bitfields as signed by default.  */
9470   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9471       /* [class.bit]
9472
9473          It is implementation-defined whether a plain (neither
9474          explicitly signed or unsigned) char, short, int, or long
9475          bit-field is signed or unsigned.
9476              
9477          Naturally, we extend this to long long as well.  Note that
9478          this does not include wchar_t.  */
9479       || (bitfield && !flag_signed_bitfields
9480           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9481           /* A typedef for plain `int' without `signed' can be
9482              controlled just like plain `int', but a typedef for
9483              `signed int' cannot be so controlled.  */
9484           && !(typedef_decl 
9485                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9486           && (TREE_CODE (type) == INTEGER_TYPE
9487               || TREE_CODE (type) == CHAR_TYPE)
9488           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9489     {
9490       if (longlong)
9491         type = long_long_unsigned_type_node;
9492       else if (RIDBIT_SETP (RID_LONG, specbits))
9493         type = long_unsigned_type_node;
9494       else if (RIDBIT_SETP (RID_SHORT, specbits))
9495         type = short_unsigned_type_node;
9496       else if (type == char_type_node)
9497         type = unsigned_char_type_node;
9498       else if (typedef_decl)
9499         type = unsigned_type (type);
9500       else
9501         type = unsigned_type_node;
9502     }
9503   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9504            && type == char_type_node)
9505     type = signed_char_type_node;
9506   else if (longlong)
9507     type = long_long_integer_type_node;
9508   else if (RIDBIT_SETP (RID_LONG, specbits))
9509     type = long_integer_type_node;
9510   else if (RIDBIT_SETP (RID_SHORT, specbits))
9511     type = short_integer_type_node;
9512
9513   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9514     {
9515       /* If we just have "complex", it is equivalent to
9516          "complex double", but if any modifiers at all are specified it is
9517          the complex form of TYPE.  E.g, "complex short" is
9518          "complex short int".  */
9519
9520       if (defaulted_int && ! longlong
9521           && ! (RIDBIT_SETP (RID_LONG, specbits)
9522                 || RIDBIT_SETP (RID_SHORT, specbits)
9523                 || RIDBIT_SETP (RID_SIGNED, specbits)
9524                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9525         type = complex_double_type_node;
9526       else if (type == integer_type_node)
9527         type = complex_integer_type_node;
9528       else if (type == float_type_node)
9529         type = complex_float_type_node;
9530       else if (type == double_type_node)
9531         type = complex_double_type_node;
9532       else if (type == long_double_type_node)
9533         type = complex_long_double_type_node;
9534       else
9535         type = build_complex_type (type);
9536     }
9537
9538   if (return_type == return_conversion 
9539       && (RIDBIT_SETP (RID_CONST, specbits)
9540           || RIDBIT_SETP (RID_VOLATILE, specbits)
9541           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9542     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9543               ctor_return_type);
9544
9545   /* Set CONSTP if this declaration is `const', whether by
9546      explicit specification or via a typedef.
9547      Likewise for VOLATILEP.  */
9548
9549   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9550   restrictp = 
9551     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9552   volatilep = 
9553     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9554   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9555                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9556                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9557   type = cp_build_qualified_type (type, type_quals);
9558   staticp = 0;
9559   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9560   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9561   RIDBIT_RESET (RID_VIRTUAL, specbits);
9562   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9563   RIDBIT_RESET (RID_EXPLICIT, specbits);
9564
9565   if (RIDBIT_SETP (RID_STATIC, specbits))
9566     staticp = 1 + (decl_context == FIELD);
9567
9568   if (virtualp && staticp == 2)
9569     {
9570       cp_error ("member `%D' cannot be declared both virtual and static",
9571                 dname);
9572       staticp = 0;
9573     }
9574   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9575   RIDBIT_RESET (RID_FRIEND, specbits);
9576
9577   /* Warn if two storage classes are given. Default to `auto'.  */
9578
9579   if (RIDBIT_ANY_SET (specbits))
9580     {
9581       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9582       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9583       if (decl_context == PARM && nclasses > 0)
9584         error ("storage class specifiers invalid in parameter declarations");
9585       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9586         {
9587           if (decl_context == PARM)
9588             error ("typedef declaration invalid in parameter declaration");
9589           nclasses++;
9590         }
9591       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9592       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9593     }
9594
9595   /* Give error if `virtual' is used outside of class declaration.  */
9596   if (virtualp
9597       && (current_class_name == NULL_TREE || decl_context != FIELD))
9598     {
9599       error ("virtual outside class declaration");
9600       virtualp = 0;
9601     }
9602
9603   /* Static anonymous unions are dealt with here.  */
9604   if (staticp && decl_context == TYPENAME
9605       && TREE_CODE (declspecs) == TREE_LIST
9606       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9607     decl_context = FIELD;
9608
9609   /* Warn about storage classes that are invalid for certain
9610      kinds of declarations (parameters, typenames, etc.).  */
9611
9612   if (nclasses > 1)
9613     error ("multiple storage classes in declaration of `%s'", name);
9614   else if (decl_context != NORMAL && nclasses > 0)
9615     {
9616       if ((decl_context == PARM || decl_context == CATCHPARM)
9617           && (RIDBIT_SETP (RID_REGISTER, specbits)
9618               || RIDBIT_SETP (RID_AUTO, specbits)))
9619         ;
9620       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9621         ;
9622       else if (decl_context == FIELD
9623                /* C++ allows static class elements  */
9624                && RIDBIT_SETP (RID_STATIC, specbits))
9625         /* C++ also allows inlines and signed and unsigned elements,
9626            but in those cases we don't come in here.  */
9627         ;
9628       else
9629         {
9630           if (decl_context == FIELD)
9631             {
9632               tree tmp = NULL_TREE;
9633               register int op = 0;
9634
9635               if (declarator)
9636                 {
9637                   /* Avoid trying to get an operand off an identifier node.  */ 
9638                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9639                     tmp = declarator;
9640                   else
9641                     tmp = TREE_OPERAND (declarator, 0);
9642                   op = IDENTIFIER_OPNAME_P (tmp);
9643                 }
9644               error ("storage class specified for %s `%s'",
9645                      op ? "member operator" : "field",
9646                      op ? operator_name_string (tmp) : name);
9647             }
9648           else
9649             error (((decl_context == PARM || decl_context == CATCHPARM)
9650                     ? "storage class specified for parameter `%s'"
9651                     : "storage class specified for typename"), name);
9652           RIDBIT_RESET (RID_REGISTER, specbits);
9653           RIDBIT_RESET (RID_AUTO, specbits);
9654           RIDBIT_RESET (RID_EXTERN, specbits);
9655         }
9656     }
9657   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9658     {
9659       if (toplevel_bindings_p ())
9660         {
9661           /* It's common practice (and completely valid) to have a const
9662              be initialized and declared extern.  */
9663           if (!(type_quals & TYPE_QUAL_CONST))
9664             warning ("`%s' initialized and declared `extern'", name);
9665         }
9666       else
9667         error ("`%s' has both `extern' and initializer", name);
9668     }
9669   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9670            && ! toplevel_bindings_p ())
9671     error ("nested function `%s' declared `extern'", name);
9672   else if (toplevel_bindings_p ())
9673     {
9674       if (RIDBIT_SETP (RID_AUTO, specbits))
9675         error ("top-level declaration of `%s' specifies `auto'", name);
9676     }
9677
9678   if (nclasses > 0 && friendp)
9679     error ("storage class specifiers invalid in friend function declarations");
9680
9681   /* Now figure out the structure of the declarator proper.
9682      Descend through it, creating more complex types, until we reach
9683      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9684
9685   inner_attrs = NULL_TREE;
9686   ignore_attrs = 0;  
9687
9688   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9689          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9690     {
9691       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9692          an INDIRECT_REF (for *...),
9693          a CALL_EXPR (for ...(...)),
9694          an identifier (for the name being declared)
9695          or a null pointer (for the place in an absolute declarator
9696          where the name was omitted).
9697          For the last two cases, we have just exited the loop.
9698
9699          For C++ it could also be
9700          a SCOPE_REF (for class :: ...).  In this case, we have converted
9701          sensible names to types, and those are the values we use to
9702          qualify the member name.
9703          an ADDR_EXPR (for &...),
9704          a BIT_NOT_EXPR (for destructors)
9705
9706          At this point, TYPE is the type of elements of an array,
9707          or for a function to return, or for a pointer to point to.
9708          After this sequence of ifs, TYPE is the type of the
9709          array or function or pointer, and DECLARATOR has had its
9710          outermost layer removed.  */
9711
9712       if (type == error_mark_node)
9713         {
9714           if (TREE_CODE (declarator) == SCOPE_REF)
9715             declarator = TREE_OPERAND (declarator, 1);
9716           else
9717             declarator = TREE_OPERAND (declarator, 0);
9718           continue;
9719         }
9720       if (quals != NULL_TREE
9721           && (declarator == NULL_TREE
9722               || TREE_CODE (declarator) != SCOPE_REF))
9723         {
9724           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9725             ctype = TYPE_METHOD_BASETYPE (type);
9726           if (ctype != NULL_TREE)
9727             {
9728               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9729               ctype = grok_method_quals (ctype, dummy, quals);
9730               type = TREE_TYPE (dummy);
9731               quals = NULL_TREE;
9732             }
9733         }
9734
9735       /* See the comment for the TREE_LIST case, below.  */
9736       if (ignore_attrs)
9737         ignore_attrs = 0;
9738       else if (inner_attrs)
9739         {
9740           decl_attributes (type, inner_attrs, NULL_TREE);
9741           inner_attrs = NULL_TREE;
9742         }
9743
9744       switch (TREE_CODE (declarator))
9745         {
9746         case TREE_LIST:
9747           {
9748             /* We encode a declarator with embedded attributes using
9749                a TREE_LIST.  The attributes apply to the declarator
9750                directly inside them, so we have to skip an iteration
9751                before applying them to the type.  If the declarator just
9752                inside is the declarator-id, we apply the attrs to the
9753                decl itself.  */
9754             inner_attrs = TREE_PURPOSE (declarator);
9755             ignore_attrs = 1;
9756             declarator = TREE_VALUE (declarator);
9757           }
9758           break;
9759
9760         case ARRAY_REF:
9761           {
9762             register tree itype = NULL_TREE;
9763             register tree size = TREE_OPERAND (declarator, 1);
9764             /* The index is a signed object `sizetype' bits wide.  */
9765             tree index_type = signed_type (sizetype);
9766
9767             declarator = TREE_OPERAND (declarator, 0);
9768
9769             /* Check for some types that there cannot be arrays of.  */
9770
9771             if (TREE_CODE (type) == VOID_TYPE)
9772               {
9773                 cp_error ("declaration of `%D' as array of voids", dname);
9774                 type = error_mark_node;
9775               }
9776
9777             if (TREE_CODE (type) == FUNCTION_TYPE)
9778               {
9779                 cp_error ("declaration of `%D' as array of functions", dname);
9780                 type = error_mark_node;
9781               }
9782
9783             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9784                you can't have arrays of references.  If we allowed them,
9785                then we'd be saying x[i] is valid for an array x, but
9786                then you'd have to ask: what does `*(x + i)' mean?  */
9787             if (TREE_CODE (type) == REFERENCE_TYPE)
9788               {
9789                 if (decl_context == TYPENAME)
9790                   cp_error ("cannot make arrays of references");
9791                 else
9792                   cp_error ("declaration of `%D' as array of references",
9793                             dname);
9794                 type = error_mark_node;
9795               }
9796
9797             if (TREE_CODE (type) == OFFSET_TYPE)
9798               {
9799                   cp_error ("declaration of `%D' as array of data members",
9800                             dname);
9801                 type = error_mark_node;
9802               }
9803
9804             if (TREE_CODE (type) == METHOD_TYPE)
9805               {
9806                 cp_error ("declaration of `%D' as array of function members",
9807                           dname);
9808                 type = error_mark_node;
9809               }
9810
9811             if (size == error_mark_node)
9812               type = error_mark_node;
9813             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9814               {
9815                 /* [dcl.array]
9816
9817                    the constant expressions that specify the bounds of
9818                    the arrays can be omitted only for the first member
9819                    of the sequence.  */
9820                 cp_error ("declaration of `%D' as multidimensional array",
9821                           dname);
9822                 cp_error ("must have bounds for all dimensions except the first");
9823                 type = error_mark_node;
9824               }
9825
9826             if (type == error_mark_node)
9827               continue;
9828
9829             /* VC++ spells a zero-sized array with [].  */
9830             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9831                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9832               size = integer_zero_node;
9833
9834             if (size)
9835               {
9836                 /* Might be a cast. */
9837                 if (TREE_CODE (size) == NOP_EXPR
9838                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9839                   size = TREE_OPERAND (size, 0);
9840                 if (TREE_READONLY_DECL_P (size))
9841                   size = decl_constant_value (size);
9842
9843                 /* If this involves a template parameter, it will be a
9844                    constant at instantiation time, but we don't know
9845                    what the value is yet.  Even if no template
9846                    parameters are involved, we may an expression that
9847                    is not a constant; we don't even simplify `1 + 2'
9848                    when processing a template.  */
9849                 if (processing_template_decl)
9850                   {
9851                     /* Resolve a qualified reference to an enumerator or
9852                        static const data member of ours.  */
9853                     if (TREE_CODE (size) == SCOPE_REF
9854                         && TREE_OPERAND (size, 0) == current_class_type)
9855                       {
9856                         tree t = lookup_field (current_class_type,
9857                                                TREE_OPERAND (size, 1), 0, 0);
9858                         if (t)
9859                           size = t;
9860                       }
9861
9862                     itype = build_index_type (build_min
9863                       (MINUS_EXPR, sizetype, size, integer_one_node));
9864                     goto dont_grok_size;
9865                   }
9866
9867                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9868                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9869                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9870                   {
9871                     cp_error ("size of array `%D' has non-integer type",
9872                               dname);
9873                     size = integer_one_node;
9874                   }
9875                 if (pedantic && !in_system_header && integer_zerop (size))
9876                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9877                 if (TREE_CONSTANT (size))
9878                   {
9879                     int old_flag_pedantic_errors = flag_pedantic_errors;
9880                     int old_pedantic = pedantic;
9881                     pedantic = flag_pedantic_errors = 1;
9882                     /* Always give overflow errors on array subscripts.  */
9883                     constant_expression_warning (size);
9884                     pedantic = old_pedantic;
9885                     flag_pedantic_errors = old_flag_pedantic_errors;
9886                     if (INT_CST_LT (size, integer_zero_node))
9887                       {
9888                         cp_error ("size of array `%D' is negative", dname);
9889                         size = integer_one_node;
9890                       }
9891                   }
9892                 else
9893                   {
9894                     if (pedantic)
9895                       {
9896                         if (dname)
9897                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9898                                       dname);
9899                         else
9900                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9901                       }
9902                   }
9903
9904                 itype
9905                   = fold (build_binary_op (MINUS_EXPR,
9906                                            cp_convert (index_type, size),
9907                                            cp_convert (index_type,
9908                                                        integer_one_node)));
9909                 if (! TREE_CONSTANT (itype))
9910                   itype = variable_size (itype);
9911                 else if (TREE_OVERFLOW (itype))
9912                   {
9913                     error ("overflow in array dimension");
9914                     TREE_OVERFLOW (itype) = 0;
9915                   }
9916
9917                 itype = build_index_type (itype);
9918               }
9919
9920           dont_grok_size:
9921             type = build_cplus_array_type (type, itype);
9922             ctype = NULL_TREE;
9923           }
9924           break;
9925
9926         case CALL_EXPR:
9927           {
9928             tree arg_types;
9929             int funcdecl_p;
9930             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9931             tree inner_decl = TREE_OPERAND (declarator, 0);
9932
9933             /* Declaring a function type.
9934                Make sure we have a valid type for the function to return.  */
9935
9936             /* We now know that the TYPE_QUALS don't apply to the
9937                decl, but to its return type.  */
9938             type_quals = TYPE_UNQUALIFIED;
9939
9940             /* Warn about some types functions can't return.  */
9941
9942             if (TREE_CODE (type) == FUNCTION_TYPE)
9943               {
9944                 error ("`%s' declared as function returning a function", name);
9945                 type = integer_type_node;
9946               }
9947             if (TREE_CODE (type) == ARRAY_TYPE)
9948               {
9949                 error ("`%s' declared as function returning an array", name);
9950                 type = integer_type_node;
9951               }
9952
9953             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9954               inner_decl = TREE_OPERAND (inner_decl, 1);
9955
9956             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
9957               inner_decl = dname;
9958
9959             /* Pick up type qualifiers which should be applied to `this'.  */
9960             quals = CALL_DECLARATOR_QUALS (declarator);
9961
9962             /* Pick up the exception specifications.  */
9963             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9964
9965             /* Say it's a definition only for the CALL_EXPR
9966                closest to the identifier.  */
9967             funcdecl_p
9968               = inner_decl 
9969               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9970                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
9971                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9972             
9973             if (ctype == NULL_TREE
9974                 && decl_context == FIELD
9975                 && funcdecl_p
9976                 && (friendp == 0 || dname == current_class_name))
9977               ctype = current_class_type;
9978
9979             if (ctype && return_type == return_conversion)
9980               TYPE_HAS_CONVERSION (ctype) = 1;
9981             if (ctype && constructor_name (ctype) == dname)
9982               {
9983                 /* We are within a class's scope. If our declarator name
9984                    is the same as the class name, and we are defining
9985                    a function, then it is a constructor/destructor, and
9986                    therefore returns a void type.  */
9987
9988                 if (flags == DTOR_FLAG)
9989                   {
9990                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
9991                        not be declared const or volatile.  A destructor
9992                        may not be static.  */
9993                     if (staticp == 2)
9994                       error ("destructor cannot be static member function");
9995                     if (quals)
9996                       {
9997                         cp_error ("destructors may not be `%s'",
9998                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
9999                         quals = NULL_TREE;
10000                       }
10001                     if (decl_context == FIELD)
10002                       {
10003                         if (! member_function_or_else (ctype, current_class_type,
10004                                                        "destructor for alien class `%s' cannot be a member"))
10005                           return void_type_node;
10006                       }
10007                   }
10008                 else            /* It's a constructor.  */
10009                   {
10010                     if (explicitp == 1)
10011                       explicitp = 2;
10012                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10013                        not be declared const or volatile.  A constructor may
10014                        not be virtual.  A constructor may not be static.  */
10015                     if (staticp == 2)
10016                       error ("constructor cannot be static member function");
10017                     if (virtualp)
10018                       {
10019                         pedwarn ("constructors cannot be declared virtual");
10020                         virtualp = 0;
10021                       }
10022                     if (quals)
10023                       {
10024                         cp_error ("constructors may not be `%s'",
10025                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10026                         quals = NULL_TREE;
10027                       }
10028                     {
10029                       RID_BIT_TYPE tmp_bits;
10030                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10031                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10032                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10033                       if (RIDBIT_ANY_SET (tmp_bits))
10034                         error ("return value type specifier for constructor ignored");
10035                     }
10036                     type = build_pointer_type (ctype);
10037                     if (decl_context == FIELD)
10038                       {
10039                         if (! member_function_or_else (ctype, current_class_type,
10040                                                        "constructor for alien class `%s' cannot be member"))
10041                           return void_type_node;
10042                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10043                         if (return_type != return_ctor)
10044                           return NULL_TREE;
10045                       }
10046                   }
10047                 if (decl_context == FIELD)
10048                   staticp = 0;
10049               }
10050             else if (friendp)
10051               {
10052                 if (initialized)
10053                   error ("can't initialize friend function `%s'", name);
10054                 if (virtualp)
10055                   {
10056                     /* Cannot be both friend and virtual.  */
10057                     error ("virtual functions cannot be friends");
10058                     RIDBIT_RESET (RID_FRIEND, specbits);
10059                     friendp = 0;
10060                   }
10061                 if (decl_context == NORMAL)
10062                   error ("friend declaration not in class definition");
10063                 if (current_function_decl && funcdef_flag)
10064                   cp_error ("can't define friend function `%s' in a local class definition",
10065                             name);
10066               }
10067
10068             /* Construct the function type and go to the next
10069                inner layer of declarator.  */
10070
10071             declarator = TREE_OPERAND (declarator, 0);
10072
10073             /* FIXME: This is where default args should be fully
10074                processed.  */
10075
10076             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10077
10078             if (declarator && flags == DTOR_FLAG)
10079               {
10080                 /* A destructor declared in the body of a class will
10081                    be represented as a BIT_NOT_EXPR.  But, we just
10082                    want the underlying IDENTIFIER.  */
10083                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10084                   declarator = TREE_OPERAND (declarator, 0);
10085                 
10086                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10087                   arg_types = void_list_node;
10088                 else if (arg_types == NULL_TREE
10089                          || arg_types != void_list_node)
10090                   {
10091                     cp_error ("destructors may not have parameters");
10092                     arg_types = void_list_node;
10093                     last_function_parms = NULL_TREE;
10094                   }
10095               }
10096
10097             /* ANSI says that `const int foo ();'
10098                does not make the function foo const.  */
10099             type = build_function_type (type, arg_types);
10100
10101             {
10102               tree t;
10103               for (t = arg_types; t; t = TREE_CHAIN (t))
10104                 if (TREE_PURPOSE (t)
10105                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10106                   {
10107                     add_defarg_fn (type);
10108                     break;
10109                   }
10110             }
10111           }
10112           break;
10113
10114         case ADDR_EXPR:
10115         case INDIRECT_REF:
10116           /* Filter out pointers-to-references and references-to-references.
10117              We can get these if a TYPE_DECL is used.  */
10118
10119           if (TREE_CODE (type) == REFERENCE_TYPE)
10120             {
10121               error ("cannot declare %s to references",
10122                      TREE_CODE (declarator) == ADDR_EXPR
10123                      ? "references" : "pointers");
10124               declarator = TREE_OPERAND (declarator, 0);
10125               continue;
10126             }
10127
10128           if (TREE_CODE (type) == OFFSET_TYPE
10129               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10130                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10131             {
10132               cp_error ("cannot declare pointer to `%#T' member",
10133                         TREE_TYPE (type));
10134               type = TREE_TYPE (type);
10135             }
10136
10137           /* Merge any constancy or volatility into the target type
10138              for the pointer.  */
10139
10140           /* We now know that the TYPE_QUALS don't apply to the decl,
10141              but to the target of the pointer.  */
10142           type_quals = TYPE_UNQUALIFIED;
10143
10144           if (TREE_CODE (declarator) == ADDR_EXPR)
10145             {
10146               if (TREE_CODE (type) == VOID_TYPE)
10147                 error ("invalid type: `void &'");
10148               else
10149                 type = build_reference_type (type);
10150             }
10151           else if (TREE_CODE (type) == METHOD_TYPE)
10152             type = build_ptrmemfunc_type (build_pointer_type (type));
10153           else
10154             type = build_pointer_type (type);
10155
10156           /* Process a list of type modifier keywords (such as
10157              const or volatile) that were given inside the `*' or `&'.  */
10158
10159           if (TREE_TYPE (declarator))
10160             {
10161               register tree typemodlist;
10162               int erred = 0;
10163
10164               constp = 0;
10165               volatilep = 0;
10166               restrictp = 0;
10167               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10168                    typemodlist = TREE_CHAIN (typemodlist))
10169                 {
10170                   tree qualifier = TREE_VALUE (typemodlist);
10171
10172                   if (qualifier == ridpointers[(int) RID_CONST])
10173                     constp++;
10174                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10175                     volatilep++;
10176                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10177                     restrictp++;
10178                   else if (!erred)
10179                     {
10180                       erred = 1;
10181                       error ("invalid type modifier within pointer declarator");
10182                     }
10183                 }
10184               if (constp > 1)
10185                 pedwarn ("duplicate `const'");
10186               if (volatilep > 1)
10187                 pedwarn ("duplicate `volatile'");
10188               if (restrictp > 1)
10189                 pedwarn ("duplicate `restrict'");
10190
10191               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10192                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10193                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10194               if (TREE_CODE (declarator) == ADDR_EXPR
10195                   && (constp || volatilep))
10196                 {
10197                   if (constp)
10198                     pedwarn ("discarding `const' applied to a reference");
10199                   if (volatilep)
10200                     pedwarn ("discarding `volatile' applied to a reference");
10201                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10202                 }
10203               type = cp_build_qualified_type (type, type_quals);
10204             }
10205           declarator = TREE_OPERAND (declarator, 0);
10206           ctype = NULL_TREE;
10207           break;
10208
10209         case SCOPE_REF:
10210           {
10211             /* We have converted type names to NULL_TREE if the
10212                name was bogus, or to a _TYPE node, if not.
10213
10214                The variable CTYPE holds the type we will ultimately
10215                resolve to.  The code here just needs to build
10216                up appropriate member types.  */
10217             tree sname = TREE_OPERAND (declarator, 1);
10218             tree t;
10219
10220             /* Destructors can have their visibilities changed as well.  */
10221             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10222               sname = TREE_OPERAND (sname, 0);
10223
10224             if (TREE_COMPLEXITY (declarator) == 0)
10225               /* This needs to be here, in case we are called
10226                  multiple times.  */ ;
10227             else if (TREE_COMPLEXITY (declarator) == -1)
10228               /* Namespace member. */
10229               pop_decl_namespace ();
10230             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10231               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10232             else if (! IS_AGGR_TYPE_CODE
10233                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10234               ;
10235             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10236               {
10237                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10238                    that refer to ctype.  They couldn't be resolved earlier
10239                    because we hadn't pushed into the class yet.
10240                    Example: resolve 'B<T>::type' in
10241                    'B<typename B<T>::type> B<T>::f () { }'.  */
10242                 if (current_template_parms
10243                     && uses_template_parms (type)
10244                     && uses_template_parms (current_class_type))
10245                   {
10246                     tree args = current_template_args ();
10247                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10248                   }
10249
10250                 /* This pop_nested_class corresponds to the
10251                    push_nested_class used to push into class scope for
10252                    parsing the argument list of a function decl, in
10253                    qualified_id.  */
10254                 pop_nested_class ();
10255                 TREE_COMPLEXITY (declarator) = current_class_depth;
10256               }
10257             else
10258               my_friendly_abort (16);
10259
10260             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10261               {
10262                 /* We had a reference to a global decl, or
10263                    perhaps we were given a non-aggregate typedef,
10264                    in which case we cleared this out, and should just
10265                    keep going as though it wasn't there.  */
10266                 declarator = sname;
10267                 continue;
10268               }
10269             ctype = TREE_OPERAND (declarator, 0);
10270
10271             t = ctype;
10272             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10273               {
10274                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10275                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10276                   template_count += 1;
10277                 t = TYPE_MAIN_DECL (t);
10278                 if (DECL_LANG_SPECIFIC (t))
10279                   t = DECL_CLASS_CONTEXT (t);
10280                 else
10281                   t = NULL_TREE;
10282               }
10283
10284             if (sname == NULL_TREE)
10285               goto done_scoping;
10286
10287             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10288               {
10289                 /* This is the `standard' use of the scoping operator:
10290                    basetype :: member .  */
10291
10292                 if (ctype == current_class_type)
10293                   {
10294                     /* class A {
10295                          void A::f ();
10296                        };
10297
10298                        Is this ill-formed?  */
10299
10300                     if (pedantic)
10301                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10302                                   ctype, name);
10303                   }
10304                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10305                   {
10306                     if (current_class_type == NULL_TREE
10307                         || friendp)
10308                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10309                                                       TYPE_ARG_TYPES (type));
10310                     else
10311                       {
10312                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10313                                   ctype, name, current_class_type);
10314                         return void_type_node;
10315                       }
10316                   }
10317                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10318                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10319                   {
10320                     /* Have to move this code elsewhere in this function.
10321                        this code is used for i.e., typedef int A::M; M *pm;
10322
10323                        It is?  How? jason 10/2/94 */
10324
10325                     if (current_class_type)
10326                       {
10327                         cp_error ("cannot declare member `%T::%s' within `%T'",
10328                                   ctype, name, current_class_type);
10329                         return void_type_node;
10330                       }
10331                     type = build_offset_type (ctype, type);
10332                   }
10333                 else if (uses_template_parms (ctype))
10334                   {
10335                     if (TREE_CODE (type) == FUNCTION_TYPE)
10336                       type
10337                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10338                                                    TYPE_ARG_TYPES (type));
10339                   }
10340                 else
10341                   {
10342                     cp_error ("structure `%T' not yet defined", ctype);
10343                     return error_mark_node;
10344                   }
10345
10346                 declarator = sname;
10347               }
10348             else if (TREE_CODE (sname) == SCOPE_REF)
10349               my_friendly_abort (17);
10350             else
10351               {
10352               done_scoping:
10353                 declarator = TREE_OPERAND (declarator, 1);
10354                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10355                   /* In this case, we will deal with it later.  */
10356                   ;
10357                 else
10358                   {
10359                     if (TREE_CODE (type) == FUNCTION_TYPE)
10360                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10361                                                       TYPE_ARG_TYPES (type));
10362                     else
10363                       type = build_offset_type (ctype, type);
10364                   }
10365               }
10366           }
10367           break;
10368
10369         case BIT_NOT_EXPR:
10370           declarator = TREE_OPERAND (declarator, 0);
10371           break;
10372
10373         case RECORD_TYPE:
10374         case UNION_TYPE:
10375         case ENUMERAL_TYPE:
10376           declarator = NULL_TREE;
10377           break;
10378
10379         case ERROR_MARK:
10380           declarator = NULL_TREE;
10381           break;
10382
10383         default:
10384           my_friendly_abort (158);
10385         }
10386     }
10387
10388   /* See the comment for the TREE_LIST case, above.  */
10389   if (inner_attrs)
10390     {
10391       if (! ignore_attrs)
10392         decl_attributes (type, inner_attrs, NULL_TREE);
10393       else if (attrlist)
10394         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10395       else
10396         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10397     }
10398
10399   /* Now TYPE has the actual type.  */
10400
10401   if (explicitp == 1 || (explicitp && friendp))
10402     {
10403       /* [dcl.fct.spec] The explicit specifier shall only be used in
10404          declarations of constructors within a class definition.  */
10405       error ("only declarations of constructors can be `explicit'");
10406       explicitp = 0;
10407     }
10408
10409   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10410     {
10411       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10412         {
10413           error ("non-member `%s' cannot be declared `mutable'", name);
10414           RIDBIT_RESET (RID_MUTABLE, specbits);
10415         }
10416       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10417         {
10418           error ("non-object member `%s' cannot be declared `mutable'", name);
10419           RIDBIT_RESET (RID_MUTABLE, specbits);
10420         }
10421       else if (TREE_CODE (type) == FUNCTION_TYPE
10422                || TREE_CODE (type) == METHOD_TYPE)
10423         {
10424           error ("function `%s' cannot be declared `mutable'", name);
10425           RIDBIT_RESET (RID_MUTABLE, specbits);
10426         }
10427       else if (staticp)
10428         {
10429           error ("static `%s' cannot be declared `mutable'", name);
10430           RIDBIT_RESET (RID_MUTABLE, specbits);
10431         }
10432       else if (type_quals & TYPE_QUAL_CONST)
10433         {
10434           error ("const `%s' cannot be declared `mutable'", name);
10435           RIDBIT_RESET (RID_MUTABLE, specbits);
10436         }
10437     }
10438
10439   if (declarator == NULL_TREE
10440       || TREE_CODE (declarator) == IDENTIFIER_NODE
10441       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10442           && (TREE_CODE (type) == FUNCTION_TYPE
10443               || TREE_CODE (type) == METHOD_TYPE)))
10444     /* OK */;
10445   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10446     {
10447       cp_error ("template-id `%D' used as a declarator", declarator);
10448       declarator = dname;
10449     }
10450   else
10451     /* Unexpected declarator format.  */
10452     my_friendly_abort (990210);
10453
10454   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10455
10456   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10457     {
10458       tree decl;
10459
10460       /* Note that the grammar rejects storage classes
10461          in typenames, fields or parameters.  */
10462       if (current_lang_name == lang_name_java)
10463         TYPE_FOR_JAVA (type) = 1;
10464
10465       if (decl_context == FIELD)
10466         {
10467           if (declarator == constructor_name (current_class_type))
10468             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10469                         declarator);
10470           decl = build_lang_decl (TYPE_DECL, declarator, type);
10471         }
10472       else
10473         {
10474           /* Make sure this typedef lives as long as its type,
10475              since it might be used as a template parameter. */
10476           if (type != error_mark_node)
10477             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10478           if (processing_template_decl)
10479             decl = build_lang_decl (TYPE_DECL, declarator, type);
10480           else
10481             decl = build_decl (TYPE_DECL, declarator, type);
10482           if (type != error_mark_node)
10483             pop_obstacks ();
10484         }
10485
10486       /* If the user declares "typedef struct {...} foo" then the
10487          struct will have an anonymous name.  Fill that name in now.
10488          Nothing can refer to it, so nothing needs know about the name
10489          change.  */
10490       if (type != error_mark_node
10491           && TYPE_NAME (type)
10492           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10493           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10494           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10495         {
10496           tree oldname = TYPE_NAME (type);
10497           tree t;
10498
10499           /* Replace the anonymous name with the real name everywhere.  */
10500           lookup_tag_reverse (type, declarator);
10501           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10502             if (TYPE_NAME (t) == oldname)
10503               TYPE_NAME (t) = decl;
10504
10505           if (TYPE_LANG_SPECIFIC (type))
10506             TYPE_WAS_ANONYMOUS (type) = 1;
10507
10508           /* If this is a typedef within a template class, the nested
10509              type is a (non-primary) template.  The name for the
10510              template needs updating as well.  */
10511           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10512             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10513               = TYPE_IDENTIFIER (type);
10514
10515           /* XXX Temporarily set the scope. 
10516              When returning, start_decl expects it as NULL_TREE,
10517              and will then then set it using pushdecl. */
10518           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10519           if (current_class_type)
10520             DECL_CONTEXT (decl) = current_class_type;
10521           else
10522             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10523
10524           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10525           DECL_ASSEMBLER_NAME (decl)
10526             = get_identifier (build_overload_name (type, 1, 1));
10527           DECL_CONTEXT (decl) = NULL_TREE;
10528
10529           /* FIXME remangle member functions; member functions of a
10530              type with external linkage have external linkage.  */
10531         }
10532
10533       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10534         {
10535           cp_error_at ("typedef name may not be class-qualified", decl);
10536           return NULL_TREE;
10537         }
10538       else if (quals)
10539         {
10540           if (ctype == NULL_TREE)
10541             {
10542               if (TREE_CODE (type) != METHOD_TYPE)
10543                 cp_error_at ("invalid type qualifier for non-method type", decl);
10544               else
10545                 ctype = TYPE_METHOD_BASETYPE (type);
10546             }
10547           if (ctype != NULL_TREE)
10548             grok_method_quals (ctype, decl, quals);
10549         }
10550
10551       if (RIDBIT_SETP (RID_SIGNED, specbits)
10552           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10553         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10554
10555       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10556                       inlinep, friendp, raises != NULL_TREE);
10557
10558       if (initialized)
10559         error ("typedef declaration includes an initializer");
10560
10561       return decl;
10562     }
10563
10564   /* Detect the case of an array type of unspecified size
10565      which came, as such, direct from a typedef name.
10566      We must copy the type, so that each identifier gets
10567      a distinct type, so that each identifier's size can be
10568      controlled separately by its own initializer.  */
10569
10570   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10571       && TYPE_DOMAIN (type) == NULL_TREE)
10572     {
10573       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10574     }
10575
10576   /* If this is a type name (such as, in a cast or sizeof),
10577      compute the type and return it now.  */
10578
10579   if (decl_context == TYPENAME)
10580     {
10581       /* Note that the grammar rejects storage classes
10582          in typenames, fields or parameters.  */
10583       if (type_quals != TYPE_UNQUALIFIED)
10584         type_quals = TYPE_UNQUALIFIED;
10585
10586       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10587       if (friendp)
10588         {
10589           if (type_quals != TYPE_UNQUALIFIED)
10590             {
10591               cp_error ("type qualifiers specified for friend class declaration");
10592               type_quals = TYPE_UNQUALIFIED;
10593             }
10594           if (inlinep)
10595             {
10596               cp_error ("`inline' specified for friend class declaration");
10597               inlinep = 0;
10598             }
10599
10600           /* Only try to do this stuff if we didn't already give up.  */
10601           if (type != integer_type_node)
10602             {
10603               /* A friendly class?  */
10604               if (current_class_type)
10605                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10606               else
10607                 error ("trying to make class `%s' a friend of global scope",
10608                        TYPE_NAME_STRING (type));
10609               type = void_type_node;
10610             }
10611         }
10612       else if (quals)
10613         {
10614           tree dummy = build_decl (TYPE_DECL, declarator, type);
10615           if (ctype == NULL_TREE)
10616             {
10617               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10618               ctype = TYPE_METHOD_BASETYPE (type);
10619             }
10620           grok_method_quals (ctype, dummy, quals);
10621           type = TREE_TYPE (dummy);
10622         }
10623
10624       return type;
10625     }
10626   else if (declarator == NULL_TREE && decl_context != PARM
10627            && decl_context != CATCHPARM
10628            && TREE_CODE (type) != UNION_TYPE
10629            && ! bitfield)
10630     {
10631       cp_error ("abstract declarator `%T' used as declaration", type);
10632       declarator = make_anon_name ();
10633     }
10634
10635   /* `void' at top level (not within pointer)
10636      is allowed only in typedefs or type names.
10637      We don't complain about parms either, but that is because
10638      a better error message can be made later.  */
10639
10640   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10641     {
10642       if (! declarator)
10643         error ("unnamed variable or field declared void");
10644       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10645         {
10646           if (IDENTIFIER_OPNAME_P (declarator))
10647             my_friendly_abort (356);
10648           else
10649             error ("variable or field `%s' declared void", name);
10650         }
10651       else
10652         error ("variable or field declared void");
10653       type = integer_type_node;
10654     }
10655
10656   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10657      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10658
10659   if (decl_context == PARM || decl_context == CATCHPARM)
10660     {
10661       if (ctype || in_namespace)
10662         error ("cannot use `::' in parameter declaration");
10663
10664       /* A parameter declared as an array of T is really a pointer to T.
10665          One declared as a function is really a pointer to a function.
10666          One declared as a member is really a pointer to member.  */
10667
10668       if (TREE_CODE (type) == ARRAY_TYPE)
10669         {
10670           /* Transfer const-ness of array into that of type pointed to.  */
10671           type = build_pointer_type (TREE_TYPE (type));
10672           type_quals = TYPE_UNQUALIFIED;
10673         }
10674       else if (TREE_CODE (type) == FUNCTION_TYPE)
10675         type = build_pointer_type (type);
10676       else if (TREE_CODE (type) == OFFSET_TYPE)
10677         type = build_pointer_type (type);
10678       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10679         {
10680           error ("declaration of `%s' as void", name);
10681           return NULL_TREE;
10682         }
10683     }
10684   
10685   {
10686     register tree decl;
10687
10688     if (decl_context == PARM)
10689       {
10690         decl = build_decl (PARM_DECL, declarator, type);
10691
10692         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10693                         inlinep, friendp, raises != NULL_TREE);
10694
10695         /* Compute the type actually passed in the parmlist,
10696            for the case where there is no prototype.
10697            (For example, shorts and chars are passed as ints.)
10698            When there is a prototype, this is overridden later.  */
10699
10700         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10701       }
10702     else if (decl_context == FIELD)
10703       {
10704         if (type == error_mark_node)
10705           {
10706             /* Happens when declaring arrays of sizes which
10707                are error_mark_node, for example.  */
10708             decl = NULL_TREE;
10709           }
10710         else if (in_namespace && !friendp)
10711           {
10712             /* Something like struct S { int N::j; };  */
10713             cp_error ("invalid use of `::'");
10714             decl = NULL_TREE;
10715           }
10716         else if (TREE_CODE (type) == FUNCTION_TYPE)
10717           {
10718             int publicp = 0;
10719             tree function_context;
10720
10721             /* We catch the others as conflicts with the builtin
10722                typedefs.  */
10723             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10724               {
10725                 cp_error ("function `%D' cannot be declared friend",
10726                           declarator);
10727                 friendp = 0;
10728               }
10729
10730             if (friendp == 0)
10731               {
10732                 if (ctype == NULL_TREE)
10733                   ctype = current_class_type;
10734
10735                 if (ctype == NULL_TREE)
10736                   {
10737                     cp_error ("can't make `%D' into a method -- not in a class",
10738                               declarator);
10739                     return void_type_node;
10740                   }
10741
10742                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10743                    ARM 9.5 */
10744                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10745                   {
10746                     cp_error ("function `%D' declared virtual inside a union",
10747                               declarator);
10748                     return void_type_node;
10749                   }
10750
10751                 if (declarator == ansi_opname[(int) NEW_EXPR]
10752                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10753                     || declarator == ansi_opname[(int) DELETE_EXPR]
10754                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10755                   {
10756                     if (virtualp)
10757                       {
10758                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10759                                   declarator);
10760                         virtualp = 0;
10761                       }
10762                   }
10763                 else if (staticp < 2)
10764                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10765                                                   TYPE_ARG_TYPES (type));
10766               }
10767
10768             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10769             function_context = (ctype != NULL_TREE) ? 
10770               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10771             publicp = (! friendp || ! staticp)
10772               && function_context == NULL_TREE;
10773             decl = grokfndecl (ctype, type, 
10774                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10775                                ? declarator : dname,
10776                                declarator,
10777                                virtualp, flags, quals, raises,
10778                                friendp ? -1 : 0, friendp, publicp, inlinep,
10779                                funcdef_flag, template_count, in_namespace);
10780             if (decl == NULL_TREE)
10781               return decl;
10782 #if 0
10783             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10784             /* The decl and setting of decl_machine_attr is also turned off.  */
10785             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10786 #endif
10787
10788             /* [class.conv.ctor]
10789
10790                A constructor declared without the function-specifier
10791                explicit that can be called with a single parameter
10792                specifies a conversion from the type of its first
10793                parameter to the type of its class.  Such a constructor
10794                is called a converting constructor.  */
10795             if (explicitp == 2)
10796               DECL_NONCONVERTING_P (decl) = 1;
10797             else if (DECL_CONSTRUCTOR_P (decl))
10798               {
10799                 /* The constructor can be called with exactly one
10800                    parameter if there is at least one parameter, and
10801                    any subsequent parameters have default arguments.
10802                    We don't look at the first parameter, which is
10803                    really just the `this' parameter for the new
10804                    object.  */
10805                 tree arg_types = 
10806                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10807
10808                 /* Skip the `in_chrg' argument too, if present.  */
10809                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10810                   arg_types = TREE_CHAIN (arg_types);
10811
10812                 if (arg_types == void_list_node
10813                     || (arg_types 
10814                         && TREE_CHAIN (arg_types) 
10815                         && TREE_CHAIN (arg_types) != void_list_node
10816                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10817                   DECL_NONCONVERTING_P (decl) = 1;
10818               }
10819           }
10820         else if (TREE_CODE (type) == METHOD_TYPE)
10821           {
10822             /* We only get here for friend declarations of
10823                members of other classes.  */
10824             /* All method decls are public, so tell grokfndecl to set
10825                TREE_PUBLIC, also.  */
10826             decl = grokfndecl (ctype, type, declarator, declarator,
10827                                virtualp, flags, quals, raises,
10828                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10829                                template_count, in_namespace);
10830             if (decl == NULL_TREE)
10831               return NULL_TREE;
10832           }
10833         else if (!staticp && ! processing_template_decl
10834                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10835                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10836           {
10837             if (declarator)
10838               cp_error ("field `%D' has incomplete type", declarator);
10839             else
10840               cp_error ("name `%T' has incomplete type", type);
10841
10842             /* If we're instantiating a template, tell them which
10843                instantiation made the field's type be incomplete.  */
10844             if (current_class_type
10845                 && TYPE_NAME (current_class_type)
10846                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10847                 && declspecs && TREE_VALUE (declspecs)
10848                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10849               cp_error ("  in instantiation of template `%T'",
10850                         current_class_type);
10851
10852             type = error_mark_node;
10853             decl = NULL_TREE;
10854           }
10855         else
10856           {
10857             if (friendp)
10858               {
10859                 error ("`%s' is neither function nor method; cannot be declared friend",
10860                        IDENTIFIER_POINTER (declarator));
10861                 friendp = 0;
10862               }
10863             decl = NULL_TREE;
10864           }
10865
10866         if (friendp)
10867           {
10868             /* Friends are treated specially.  */
10869             if (ctype == current_class_type)
10870               warning ("member functions are implicitly friends of their class");
10871             else
10872               {
10873                 tree t = NULL_TREE;
10874                 if (decl && DECL_NAME (decl))
10875                   {
10876                     if (template_class_depth (current_class_type) == 0)
10877                       {
10878                         decl 
10879                           = check_explicit_specialization 
10880                           (declarator, decl,
10881                            template_count, 2 * (funcdef_flag != 0) + 4);
10882                         if (decl == error_mark_node)
10883                           return error_mark_node;
10884                       }
10885
10886                     t = do_friend (ctype, declarator, decl,
10887                                    last_function_parms, attrlist, flags, quals,
10888                                    funcdef_flag);
10889                   }
10890                 if (t && funcdef_flag)
10891                   return t;
10892                 
10893                 return void_type_node;
10894               }
10895           }
10896
10897         /* Structure field.  It may not be a function, except for C++ */
10898
10899         if (decl == NULL_TREE)
10900           {
10901             if (initialized)
10902               {
10903                 if (!staticp)
10904                   {
10905                     /* An attempt is being made to initialize a non-static
10906                        member.  But, from [class.mem]:
10907                        
10908                        4 A member-declarator can contain a
10909                        constant-initializer only if it declares a static
10910                        member (_class.static_) of integral or enumeration
10911                        type, see _class.static.data_.  
10912
10913                        This used to be relatively common practice, but
10914                        the rest of the compiler does not correctly
10915                        handle the initialization unless the member is
10916                        static so we make it static below.  */
10917                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10918                                 declarator);
10919                     cp_pedwarn ("making `%D' static", declarator);
10920                     staticp = 1;
10921                   }
10922
10923                 if (uses_template_parms (type))
10924                   /* We'll check at instantiation time.  */
10925                   ;
10926                 else if (check_static_variable_definition (declarator,
10927                                                            type))
10928                   /* If we just return the declaration, crashes
10929                      will sometimes occur.  We therefore return
10930                      void_type_node, as if this was a friend
10931                      declaration, to cause callers to completely
10932                      ignore this declaration.  */
10933                   return void_type_node;
10934               }
10935
10936             /* 9.2p13 [class.mem] */
10937             if (declarator == constructor_name (current_class_type)
10938                 /* Divergence from the standard:  In extern "C", we
10939                    allow non-static data members here, because C does
10940                    and /usr/include/netinet/in.h uses that.  */
10941                 && (staticp || ! in_system_header))
10942               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10943                           declarator);
10944
10945             if (staticp)
10946               {
10947                 /* C++ allows static class members.  All other work
10948                    for this is done by grokfield.  */
10949                 decl = build_lang_decl (VAR_DECL, declarator, type);
10950                 TREE_STATIC (decl) = 1;
10951                 /* In class context, 'static' means public access.  */
10952                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10953               }
10954             else
10955               {
10956                 decl = build_lang_decl (FIELD_DECL, declarator, type);
10957                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10958                   {
10959                     DECL_MUTABLE_P (decl) = 1;
10960                     RIDBIT_RESET (RID_MUTABLE, specbits);
10961                   }
10962               }
10963
10964             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10965                             inlinep, friendp, raises != NULL_TREE);
10966           }
10967       }
10968     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10969       {
10970         tree original_name;
10971         int publicp = 0;
10972
10973         if (! declarator)
10974           return NULL_TREE;
10975
10976         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10977           original_name = dname;
10978         else
10979           original_name = declarator;
10980
10981         if (RIDBIT_SETP (RID_AUTO, specbits))
10982           error ("storage class `auto' invalid for function `%s'", name);
10983         else if (RIDBIT_SETP (RID_REGISTER, specbits))
10984           error ("storage class `register' invalid for function `%s'", name);
10985
10986         /* Function declaration not at top level.
10987            Storage classes other than `extern' are not allowed
10988            and `extern' makes no difference.  */
10989         if (! toplevel_bindings_p ()
10990             && (RIDBIT_SETP (RID_STATIC, specbits)
10991                 || RIDBIT_SETP (RID_INLINE, specbits))
10992             && pedantic)
10993           {
10994             if (RIDBIT_SETP (RID_STATIC, specbits))
10995               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
10996             else
10997               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
10998           }
10999         
11000         if (ctype == NULL_TREE)
11001           {
11002             if (virtualp)
11003               {
11004                 error ("virtual non-class function `%s'", name);
11005                 virtualp = 0;
11006               }
11007           }
11008         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11009           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11010                                           TYPE_ARG_TYPES (type));
11011
11012         /* Record presence of `static'.  */
11013         publicp = (ctype != NULL_TREE
11014                    || RIDBIT_SETP (RID_EXTERN, specbits)
11015                    || !RIDBIT_SETP (RID_STATIC, specbits));
11016
11017         decl = grokfndecl (ctype, type, original_name, declarator,
11018                            virtualp, flags, quals, raises,
11019                            1, friendp,
11020                            publicp, inlinep, funcdef_flag, 
11021                            template_count, in_namespace);
11022         if (decl == NULL_TREE)
11023           return NULL_TREE;
11024
11025         if (staticp == 1)
11026           {
11027             int illegal_static = 0;
11028
11029             /* Don't allow a static member function in a class, and forbid
11030                declaring main to be static.  */
11031             if (TREE_CODE (type) == METHOD_TYPE)
11032               {
11033                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11034                 illegal_static = 1;
11035               }
11036             else if (current_function_decl)
11037               {
11038                 /* FIXME need arm citation */
11039                 error ("cannot declare static function inside another function");
11040                 illegal_static = 1;
11041               }
11042
11043             if (illegal_static)
11044               {
11045                 staticp = 0;
11046                 RIDBIT_RESET (RID_STATIC, specbits);
11047               }
11048           }
11049       }
11050     else
11051       {
11052         /* It's a variable.  */
11053
11054         /* An uninitialized decl with `extern' is a reference.  */
11055         decl = grokvardecl (type, declarator, &specbits, 
11056                             initialized, 
11057                             (type_quals & TYPE_QUAL_CONST) != 0, 
11058                             in_namespace);
11059         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11060                         inlinep, friendp, raises != NULL_TREE);
11061
11062         if (ctype)
11063           {
11064             DECL_CONTEXT (decl) = ctype;
11065             if (staticp == 1)
11066               {
11067                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11068                 staticp = 0;
11069                 RIDBIT_RESET (RID_STATIC, specbits);
11070               }
11071             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11072               {
11073                 cp_error ("static member `%D' declared `register'", decl);
11074                 RIDBIT_RESET (RID_REGISTER, specbits);
11075               }
11076             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11077               {
11078                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11079                             decl);
11080                 RIDBIT_RESET (RID_EXTERN, specbits);
11081               }
11082           }
11083       }
11084
11085     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11086
11087     /* Record `register' declaration for warnings on &
11088        and in case doing stupid register allocation.  */
11089
11090     if (RIDBIT_SETP (RID_REGISTER, specbits))
11091       DECL_REGISTER (decl) = 1;
11092
11093     if (RIDBIT_SETP (RID_EXTERN, specbits))
11094       DECL_THIS_EXTERN (decl) = 1;
11095
11096     if (RIDBIT_SETP (RID_STATIC, specbits))
11097       DECL_THIS_STATIC (decl) = 1;
11098
11099     /* Record constancy and volatility.  There's no need to do this
11100        when processing a template; we'll do this for the instantiated
11101        declaration based on the type of DECL.  */
11102     if (!processing_template_decl)
11103       c_apply_type_quals_to_decl (type_quals, decl);
11104
11105     return decl;
11106   }
11107 }
11108 \f
11109 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11110    An empty exprlist is a parmlist.  An exprlist which
11111    contains only identifiers at the global level
11112    is a parmlist.  Otherwise, it is an exprlist.  */
11113
11114 int
11115 parmlist_is_exprlist (exprs)
11116      tree exprs;
11117 {
11118   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11119     return 0;
11120
11121   if (toplevel_bindings_p ())
11122     {
11123       /* At the global level, if these are all identifiers,
11124          then it is a parmlist.  */
11125       while (exprs)
11126         {
11127           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11128             return 1;
11129           exprs = TREE_CHAIN (exprs);
11130         }
11131       return 0;
11132     }
11133   return 1;
11134 }
11135
11136 /* Subroutine of start_function.  Ensure that each of the parameter
11137    types (as listed in PARMS) is complete, as is required for a
11138    function definition.  */
11139
11140 static void
11141 require_complete_types_for_parms (parms)
11142      tree parms;
11143 {
11144   while (parms)
11145     {
11146       tree type = TREE_TYPE (parms);
11147       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11148         {
11149           if (DECL_NAME (parms))
11150             error ("parameter `%s' has incomplete type",
11151                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11152           else
11153             error ("parameter has incomplete type");
11154           TREE_TYPE (parms) = error_mark_node;
11155         }
11156       else
11157         layout_decl (parms, 0);
11158
11159       parms = TREE_CHAIN (parms);
11160     }
11161 }
11162
11163 /* Returns *TP if *TP is a local variable (or parameter).  Returns
11164    NULL_TREE otherwise.  */
11165
11166 static tree
11167 local_variable_p (tp, walk_subtrees, data)
11168      tree *tp;
11169      int *walk_subtrees ATTRIBUTE_UNUSED;
11170      void *data ATTRIBUTE_UNUSED;
11171 {
11172   tree t = *tp;
11173
11174   if ((TREE_CODE (t) == VAR_DECL 
11175        /* A VAR_DECL with a context that is a _TYPE is a static data
11176           member.  */
11177        && !TYPE_P (CP_DECL_CONTEXT (t))
11178        /* Any other non-local variable must be at namespace scope.  */
11179        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11180       || (TREE_CODE (t) == PARM_DECL))
11181     return t;
11182
11183   return NULL_TREE;
11184 }
11185
11186 /* Check that ARG, which is a default-argument expression for a
11187    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11188    something goes wrong.  DECL may also be a _TYPE node, rather than a
11189    DECL, if there is no DECL available.  */
11190
11191 tree
11192 check_default_argument (decl, arg)
11193      tree decl;
11194      tree arg;
11195 {
11196   tree var;
11197   tree decl_type;
11198
11199   if (TREE_CODE (arg) == DEFAULT_ARG)
11200     /* We get a DEFAULT_ARG when looking at an in-class declaration
11201        with a default argument.  Ignore the argument for now; we'll
11202        deal with it after the class is complete.  */
11203     return arg;
11204
11205   if (processing_template_decl || uses_template_parms (arg))
11206     /* We don't do anything checking until instantiation-time.  Note
11207        that there may be uninstantiated arguments even for an
11208        instantiated function, since default arguments are not
11209        instantiated until they are needed.  */
11210     return arg;
11211
11212   if (TYPE_P (decl))
11213     {
11214       decl_type = decl;
11215       decl = NULL_TREE;
11216     }
11217   else
11218     decl_type = TREE_TYPE (decl);
11219
11220   if (arg == error_mark_node 
11221       || decl == error_mark_node
11222       || TREE_TYPE (arg) == error_mark_node
11223       || decl_type == error_mark_node)
11224     /* Something already went wrong.  There's no need to check
11225        further.  */
11226     return error_mark_node;
11227
11228   /* [dcl.fct.default]
11229      
11230      A default argument expression is implicitly converted to the
11231      parameter type.  */
11232   if (!TREE_TYPE (arg)
11233       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11234     {
11235       if (decl)
11236         cp_error ("default argument for `%#D' has type `%T'", 
11237                   decl, TREE_TYPE (arg));
11238       else
11239         cp_error ("default argument for parameter of type `%T' has type `%T'",
11240                   decl_type, TREE_TYPE (arg));
11241
11242       return error_mark_node;
11243     }
11244
11245   /* [dcl.fct.default]
11246
11247      Local variables shall not be used in default argument
11248      expressions. 
11249
11250      The keyword `this' shall not be used in a default argument of a
11251      member function.  */
11252   var = walk_tree (&arg, local_variable_p, NULL);
11253   if (var)
11254     {
11255       cp_error ("default argument `%E' uses local variable `%D'",
11256                 arg, var);
11257       return error_mark_node;
11258     }
11259
11260   /* All is well.  */
11261   return arg;
11262 }
11263
11264 /* Decode the list of parameter types for a function type.
11265    Given the list of things declared inside the parens,
11266    return a list of types.
11267
11268    The list we receive can have three kinds of elements:
11269    an IDENTIFIER_NODE for names given without types,
11270    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11271    or void_type_node, to mark the end of an argument list
11272    when additional arguments are not permitted (... was not used).
11273
11274    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11275    a mere declaration.  A nonempty identifier-list gets an error message
11276    when FUNCDEF_FLAG is zero.
11277    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11278    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11279
11280    If all elements of the input list contain types,
11281    we return a list of the types.
11282    If all elements contain no type (except perhaps a void_type_node
11283    at the end), we return a null list.
11284    If some have types and some do not, it is an error, and we
11285    return a null list.
11286
11287    Also set last_function_parms to either
11288    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11289    A list of names is converted to a chain of PARM_DECLs
11290    by store_parm_decls so that ultimately it is always a chain of decls.
11291
11292    Note that in C++, parameters can take default values.  These default
11293    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11294    an error to specify default values which are followed by parameters
11295    that have no default values, or an ELLIPSES.  For simplicities sake,
11296    only parameters which are specified with their types can take on
11297    default values.  */
11298
11299 static tree
11300 grokparms (first_parm, funcdef_flag)
11301      tree first_parm;
11302      int funcdef_flag;
11303 {
11304   tree result = NULL_TREE;
11305   tree decls = NULL_TREE;
11306
11307   if (first_parm != NULL_TREE
11308       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11309     {
11310       if (! funcdef_flag)
11311         pedwarn ("parameter names (without types) in function declaration");
11312       last_function_parms = first_parm;
11313       return NULL_TREE;
11314     }
11315   else if (first_parm != NULL_TREE
11316            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11317            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11318     my_friendly_abort (145);
11319   else
11320     {
11321       /* Types were specified.  This is a list of declarators
11322          each represented as a TREE_LIST node.  */
11323       register tree parm, chain;
11324       int any_init = 0, any_error = 0;
11325
11326       if (first_parm != NULL_TREE)
11327         {
11328           tree last_result = NULL_TREE;
11329           tree last_decl = NULL_TREE;
11330
11331           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11332             {
11333               tree type = NULL_TREE, list_node = parm;
11334               register tree decl = TREE_VALUE (parm);
11335               tree init = TREE_PURPOSE (parm);
11336
11337               chain = TREE_CHAIN (parm);
11338               /* @@ weak defense against parse errors.  */
11339               if (TREE_CODE (decl) != VOID_TYPE 
11340                   && TREE_CODE (decl) != TREE_LIST)
11341                 {
11342                   /* Give various messages as the need arises.  */
11343                   if (TREE_CODE (decl) == STRING_CST)
11344                     cp_error ("invalid string constant `%E'", decl);
11345                   else if (TREE_CODE (decl) == INTEGER_CST)
11346                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11347                   continue;
11348                 }
11349
11350               if (TREE_CODE (decl) != VOID_TYPE)
11351                 {
11352                   decl = grokdeclarator (TREE_VALUE (decl),
11353                                          TREE_PURPOSE (decl),
11354                                          PARM, init != NULL_TREE,
11355                                          NULL_TREE);
11356                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11357                     continue;
11358
11359                   /* Top-level qualifiers on the parameters are
11360                      ignored for function types.  */
11361                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11362
11363                   if (TREE_CODE (type) == VOID_TYPE)
11364                     decl = void_type_node;
11365                   else if (TREE_CODE (type) == METHOD_TYPE)
11366                     {
11367                       if (DECL_NAME (decl))
11368                         /* Cannot use the decl here because
11369                            we don't have DECL_CONTEXT set up yet.  */
11370                         cp_error ("parameter `%D' invalidly declared method type",
11371                                   DECL_NAME (decl));
11372                       else
11373                         error ("parameter invalidly declared method type");
11374                       type = build_pointer_type (type);
11375                       TREE_TYPE (decl) = type;
11376                     }
11377                   else if (TREE_CODE (type) == OFFSET_TYPE)
11378                     {
11379                       if (DECL_NAME (decl))
11380                         cp_error ("parameter `%D' invalidly declared offset type",
11381                                   DECL_NAME (decl));
11382                       else
11383                         error ("parameter invalidly declared offset type");
11384                       type = build_pointer_type (type);
11385                       TREE_TYPE (decl) = type;
11386                     }
11387                   else if (abstract_virtuals_error (decl, type))
11388                     any_error = 1;  /* Seems like a good idea. */
11389                   else if (POINTER_TYPE_P (type))
11390                     {
11391                       tree t = type;
11392                       while (POINTER_TYPE_P (t)
11393                              || (TREE_CODE (t) == ARRAY_TYPE
11394                                  && TYPE_DOMAIN (t) != NULL_TREE))
11395                         t = TREE_TYPE (t);
11396                       if (TREE_CODE (t) == ARRAY_TYPE)
11397                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11398                                   type,
11399                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11400                     }
11401                 }
11402
11403               if (TREE_CODE (decl) == VOID_TYPE)
11404                 {
11405                   if (result == NULL_TREE)
11406                     {
11407                       result = void_list_node;
11408                       last_result = result;
11409                     }
11410                   else
11411                     {
11412                       TREE_CHAIN (last_result) = void_list_node;
11413                       last_result = void_list_node;
11414                     }
11415                   if (chain
11416                       && (chain != void_list_node || TREE_CHAIN (chain)))
11417                     error ("`void' in parameter list must be entire list");
11418                   break;
11419                 }
11420
11421               /* Since there is a prototype, args are passed in their own types.  */
11422               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11423               if (PROMOTE_PROTOTYPES
11424                   && (TREE_CODE (type) == INTEGER_TYPE
11425                       || TREE_CODE (type) == ENUMERAL_TYPE)
11426                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11427                 DECL_ARG_TYPE (decl) = integer_type_node;
11428               if (!any_error && init)
11429                 {
11430                   any_init++;
11431                   init = check_default_argument (decl, init);
11432                 }
11433               else
11434                 init = NULL_TREE;
11435
11436               if (decls == NULL_TREE)
11437                 {
11438                   decls = decl;
11439                   last_decl = decls;
11440                 }
11441               else
11442                 {
11443                   TREE_CHAIN (last_decl) = decl;
11444                   last_decl = decl;
11445                 }
11446               list_node = tree_cons (init, type, NULL_TREE);
11447               if (result == NULL_TREE)
11448                 {
11449                   result = list_node;
11450                   last_result = result;
11451                 }
11452               else
11453                 {
11454                   TREE_CHAIN (last_result) = list_node;
11455                   last_result = list_node;
11456                 }
11457             }
11458           if (last_result)
11459             TREE_CHAIN (last_result) = NULL_TREE;
11460           /* If there are no parameters, and the function does not end
11461              with `...', then last_decl will be NULL_TREE.  */
11462           if (last_decl != NULL_TREE)
11463             TREE_CHAIN (last_decl) = NULL_TREE;
11464         }
11465     }
11466
11467   last_function_parms = decls;
11468
11469   return result;
11470 }
11471
11472 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11473    FUNCTION_TYPE with the newly parsed version of its default argument, which
11474    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11475
11476 void
11477 replace_defarg (arg, init)
11478      tree arg, init;
11479 {
11480   if (! processing_template_decl
11481       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11482     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11483                 TREE_TYPE (init), TREE_VALUE (arg));
11484   TREE_PURPOSE (arg) = init;
11485 }
11486 \f
11487 int
11488 copy_args_p (d)
11489      tree d;
11490 {
11491   tree t = FUNCTION_ARG_CHAIN (d);
11492   if (DECL_CONSTRUCTOR_P (d)
11493       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11494     t = TREE_CHAIN (t);
11495   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11496       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11497           == DECL_CLASS_CONTEXT (d))
11498       && (TREE_CHAIN (t) == NULL_TREE
11499           || TREE_CHAIN (t) == void_list_node
11500           || TREE_PURPOSE (TREE_CHAIN (t))))
11501     return 1;
11502   return 0;
11503 }
11504
11505 /* These memoizing functions keep track of special properties which
11506    a class may have.  `grok_ctor_properties' notices whether a class
11507    has a constructor of the form X(X&), and also complains
11508    if the class has a constructor of the form X(X).
11509    `grok_op_properties' takes notice of the various forms of
11510    operator= which are defined, as well as what sorts of type conversion
11511    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11512
11513 int
11514 grok_ctor_properties (ctype, decl)
11515      tree ctype, decl;
11516 {
11517   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11518   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11519
11520   /* When a type has virtual baseclasses, a magical first int argument is
11521      added to any ctor so we can tell if the class has been initialized
11522      yet.  This could screw things up in this function, so we deliberately
11523      ignore the leading int if we're in that situation.  */
11524   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11525     {
11526       my_friendly_assert (parmtypes
11527                           && TREE_VALUE (parmtypes) == integer_type_node,
11528                           980529);
11529       parmtypes = TREE_CHAIN (parmtypes);
11530       parmtype = TREE_VALUE (parmtypes);
11531     }
11532
11533   /* [class.copy]
11534
11535      A non-template constructor for class X is a copy constructor if
11536      its first parameter is of type X&, const X&, volatile X& or const
11537      volatile X&, and either there are no other parameters or else all
11538      other parameters have default arguments.  */
11539   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11540       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11541       && (TREE_CHAIN (parmtypes) == NULL_TREE
11542           || TREE_CHAIN (parmtypes) == void_list_node
11543           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11544       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11545            && is_member_template (DECL_TI_TEMPLATE (decl))))
11546     {
11547       TYPE_HAS_INIT_REF (ctype) = 1;
11548       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11549         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11550     }
11551   /* [class.copy]
11552
11553      A declaration of a constructor for a class X is ill-formed if its
11554      first parameter is of type (optionally cv-qualified) X and either
11555      there are no other parameters or else all other parameters have
11556      default arguments.  
11557
11558      We *don't* complain about member template instantiations that
11559      have this form, though; they can occur as we try to decide what
11560      constructor to use during overload resolution.  Since overload
11561      resolution will never prefer such a constructor to the
11562      non-template copy constructor (which is either explicitly or
11563      implicitly defined), there's no need to worry about their
11564      existence.  Theoretically, they should never even be
11565      instantiated, but that's hard to forestall.  */
11566   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11567            && (TREE_CHAIN (parmtypes) == NULL_TREE
11568                || TREE_CHAIN (parmtypes) == void_list_node
11569                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11570            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11571                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11572     {
11573       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11574                 ctype, ctype);
11575       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11576       return 0;
11577     }
11578   else if (TREE_CODE (parmtype) == VOID_TYPE
11579            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11580     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11581
11582   return 1;
11583 }
11584
11585 /* An operator with this name can be either unary or binary.  */
11586
11587 static int
11588 ambi_op_p (name)
11589      tree name;
11590 {
11591   return (name == ansi_opname [(int) INDIRECT_REF]
11592           || name == ansi_opname [(int) ADDR_EXPR]
11593           || name == ansi_opname [(int) NEGATE_EXPR]
11594           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11595           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11596           || name == ansi_opname [(int) CONVERT_EXPR]);
11597 }
11598
11599 /* An operator with this name can only be unary.  */
11600
11601 static int
11602 unary_op_p (name)
11603      tree name;
11604 {
11605   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11606           || name == ansi_opname [(int) BIT_NOT_EXPR]
11607           || name == ansi_opname [(int) COMPONENT_REF]
11608           || IDENTIFIER_TYPENAME_P (name));
11609 }
11610
11611 /* Do a little sanity-checking on how they declared their operator.  */
11612
11613 void
11614 grok_op_properties (decl, virtualp, friendp)
11615      tree decl;
11616      int virtualp, friendp;
11617 {
11618   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11619   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11620   tree name = DECL_NAME (decl);
11621
11622   if (current_class_type == NULL_TREE)
11623     friendp = 1;
11624
11625   if (! friendp)
11626     {
11627       /* [class.copy]
11628
11629          A user-declared copy assignment operator X::operator= is a
11630          non-static non-template member function of class X with
11631          exactly one parameter of type X, X&, const X&, volatile X& or
11632          const volatile X&.  */
11633       if (name == ansi_opname[(int) MODIFY_EXPR]
11634           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11635                && is_member_template (DECL_TI_TEMPLATE (decl))))
11636         ;
11637       else if (name == ansi_opname[(int) CALL_EXPR])
11638         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11639       else if (name == ansi_opname[(int) ARRAY_REF])
11640         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11641       else if (name == ansi_opname[(int) COMPONENT_REF]
11642                || name == ansi_opname[(int) MEMBER_REF])
11643         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11644       else if (name == ansi_opname[(int) NEW_EXPR])
11645         TYPE_GETS_NEW (current_class_type) |= 1;
11646       else if (name == ansi_opname[(int) DELETE_EXPR])
11647         TYPE_GETS_DELETE (current_class_type) |= 1;
11648       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11649         TYPE_GETS_NEW (current_class_type) |= 2;
11650       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11651         TYPE_GETS_DELETE (current_class_type) |= 2;
11652     }
11653
11654   if (name == ansi_opname[(int) NEW_EXPR]
11655       || name == ansi_opname[(int) VEC_NEW_EXPR])
11656     {
11657       /* When the compiler encounters the definition of A::operator new, it
11658          doesn't look at the class declaration to find out if it's static.  */
11659       if (methodp)
11660         revert_static_member_fn (&decl, NULL, NULL);
11661      
11662       /* Take care of function decl if we had syntax errors.  */
11663       if (argtypes == NULL_TREE)
11664         TREE_TYPE (decl)
11665           = build_function_type (ptr_type_node,
11666                                  hash_tree_chain (integer_type_node,
11667                                                   void_list_node));
11668       else
11669         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11670     }
11671   else if (name == ansi_opname[(int) DELETE_EXPR]
11672            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11673     {
11674       if (methodp)
11675         revert_static_member_fn (&decl, NULL, NULL);
11676      
11677       if (argtypes == NULL_TREE)
11678         TREE_TYPE (decl)
11679           = build_function_type (void_type_node,
11680                                  hash_tree_chain (ptr_type_node,
11681                                                   void_list_node));
11682       else
11683         {
11684           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11685
11686           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11687               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11688                   != void_list_node))
11689             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11690         }
11691     }
11692   else
11693     {
11694       /* An operator function must either be a non-static member function
11695          or have at least one parameter of a class, a reference to a class,
11696          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11697       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11698         {
11699           if (IDENTIFIER_TYPENAME_P (name)
11700               || name == ansi_opname[(int) CALL_EXPR]
11701               || name == ansi_opname[(int) MODIFY_EXPR]
11702               || name == ansi_opname[(int) COMPONENT_REF]
11703               || name == ansi_opname[(int) ARRAY_REF])
11704             cp_error ("`%D' must be a nonstatic member function", decl);
11705           else
11706             {
11707               tree p = argtypes;
11708
11709               if (DECL_STATIC_FUNCTION_P (decl))
11710                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11711
11712               if (p)
11713                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11714                   {
11715                     tree arg = TREE_VALUE (p);
11716                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11717                       arg = TREE_TYPE (arg);
11718
11719                     /* This lets bad template code slip through.  */
11720                     if (IS_AGGR_TYPE (arg)
11721                         || TREE_CODE (arg) == ENUMERAL_TYPE
11722                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11723                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11724                       goto foundaggr;
11725                   }
11726               cp_error
11727                 ("`%D' must have an argument of class or enumerated type",
11728                  decl);
11729             foundaggr:
11730               ;
11731             }
11732         }
11733       
11734       if (name == ansi_opname[(int) CALL_EXPR])
11735         return;                 /* No restrictions on args. */
11736
11737       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11738         {
11739           tree t = TREE_TYPE (name);
11740           if (TREE_CODE (t) == VOID_TYPE)
11741             pedwarn ("void is not a valid type conversion operator");
11742           else if (! friendp)
11743             {
11744               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11745               const char *what = 0;
11746               if (ref)
11747                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11748
11749               if (t == current_class_type)
11750                 what = "the same type";
11751               /* Don't force t to be complete here.  */
11752               else if (IS_AGGR_TYPE (t)
11753                        && TYPE_SIZE (t)
11754                        && DERIVED_FROM_P (t, current_class_type))
11755                 what = "a base class";
11756
11757               if (what)
11758                 warning ("conversion to %s%s will never use a type conversion operator",
11759                          ref ? "a reference to " : "", what);
11760             }
11761         }
11762
11763       if (name == ansi_opname[(int) MODIFY_EXPR])
11764         {
11765           tree parmtype;
11766
11767           if (list_length (argtypes) != 3 && methodp)
11768             {
11769               cp_error ("`%D' must take exactly one argument", decl);
11770               return;
11771             }
11772           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11773
11774           if (copy_assignment_arg_p (parmtype, virtualp)
11775               && ! friendp)
11776             {
11777               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11778               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11779                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11780                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11781             }
11782         }
11783       else if (name == ansi_opname[(int) COND_EXPR])
11784         {
11785           /* 13.4.0.3 */
11786           cp_error ("ANSI C++ prohibits overloading operator ?:");
11787         }         
11788       else if (ambi_op_p (name))
11789         {
11790           if (list_length (argtypes) == 2)
11791             /* prefix */;
11792           else if (list_length (argtypes) == 3)
11793             {
11794               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11795                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11796                   && ! processing_template_decl
11797                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11798                 {
11799                   if (methodp)
11800                     cp_error ("postfix `%D' must take `int' as its argument",
11801                               decl);
11802                   else
11803                     cp_error
11804                       ("postfix `%D' must take `int' as its second argument",
11805                        decl);
11806                 }
11807             }
11808           else
11809             {
11810               if (methodp)
11811                 cp_error ("`%D' must take either zero or one argument", decl);
11812               else
11813                 cp_error ("`%D' must take either one or two arguments", decl);
11814             }
11815
11816           /* More Effective C++ rule 6.  */
11817           if (warn_ecpp
11818               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11819                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11820             {
11821               tree arg = TREE_VALUE (argtypes);
11822               tree ret = TREE_TYPE (TREE_TYPE (decl));
11823               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11824                 arg = TREE_TYPE (arg);
11825               arg = TYPE_MAIN_VARIANT (arg);
11826               if (list_length (argtypes) == 2)
11827                 {
11828                   if (TREE_CODE (ret) != REFERENCE_TYPE
11829                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11830                                        arg))
11831                     cp_warning ("prefix `%D' should return `%T'", decl,
11832                                 build_reference_type (arg));
11833                 }
11834               else
11835                 {
11836                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11837                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11838                 }
11839             }
11840         }
11841       else if (unary_op_p (name))
11842         {
11843           if (list_length (argtypes) != 2)
11844             {
11845               if (methodp)
11846                 cp_error ("`%D' must take `void'", decl);
11847               else
11848                 cp_error ("`%D' must take exactly one argument", decl);
11849             }
11850         }
11851       else /* if (binary_op_p (name)) */
11852         {
11853           if (list_length (argtypes) != 3)
11854             {
11855               if (methodp)
11856                 cp_error ("`%D' must take exactly one argument", decl);
11857               else
11858                 cp_error ("`%D' must take exactly two arguments", decl);
11859             }
11860
11861           /* More Effective C++ rule 7.  */
11862           if (warn_ecpp
11863               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11864                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11865                   || name == ansi_opname [COMPOUND_EXPR]))
11866             cp_warning ("user-defined `%D' always evaluates both arguments",
11867                         decl);
11868         }
11869
11870       /* Effective C++ rule 23.  */
11871       if (warn_ecpp
11872           && list_length (argtypes) == 3
11873           && (name == ansi_opname [PLUS_EXPR]
11874               || name == ansi_opname [MINUS_EXPR]
11875               || name == ansi_opname [TRUNC_DIV_EXPR]
11876               || name == ansi_opname [MULT_EXPR])
11877           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11878         cp_warning ("`%D' should return by value", decl);
11879
11880       /* 13.4.0.8 */
11881       if (argtypes)
11882         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11883           if (TREE_PURPOSE (argtypes))
11884             {
11885               TREE_PURPOSE (argtypes) = NULL_TREE;
11886               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11887                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11888                 {
11889                   if (pedantic)
11890                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11891                 }
11892               else
11893                 cp_error ("`%D' cannot have default arguments", decl);
11894             }
11895     }
11896 }
11897 \f
11898 static const char *
11899 tag_name (code)
11900      enum tag_types code;
11901 {
11902   switch (code)
11903     {
11904     case record_type:
11905       return "struct";
11906     case class_type:
11907       return "class";
11908     case union_type:
11909       return "union ";
11910     case enum_type:
11911       return "enum";
11912     default:
11913       my_friendly_abort (981122);
11914     }
11915 }
11916
11917 /* Get the struct, enum or union (CODE says which) with tag NAME.
11918    Define the tag as a forward-reference if it is not defined.
11919
11920    C++: If a class derivation is given, process it here, and report
11921    an error if multiple derivation declarations are not identical.
11922
11923    If this is a definition, come in through xref_tag and only look in
11924    the current frame for the name (since C++ allows new names in any
11925    scope.)  */
11926
11927 tree
11928 xref_tag (code_type_node, name, globalize)
11929      tree code_type_node;
11930      tree name;
11931      int globalize;
11932 {
11933   enum tag_types tag_code;
11934   enum tree_code code;
11935   int temp = 0;
11936   register tree ref, t;
11937   struct binding_level *b = current_binding_level;
11938   int got_type = 0;
11939   tree attributes = NULL_TREE;
11940   tree context = NULL_TREE;
11941
11942   /* If we are called from the parser, code_type_node will sometimes be a
11943      TREE_LIST.  This indicates that the user wrote
11944      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11945      use them later.  */
11946   if (TREE_CODE (code_type_node) == TREE_LIST)
11947     {
11948       attributes = TREE_PURPOSE (code_type_node);
11949       code_type_node = TREE_VALUE (code_type_node);
11950     }
11951
11952   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11953   switch (tag_code)
11954     {
11955     case record_type:
11956     case class_type:
11957       code = RECORD_TYPE;
11958       break;
11959     case union_type:
11960       code = UNION_TYPE;
11961       break;
11962     case enum_type:
11963       code = ENUMERAL_TYPE;
11964       break;
11965     default:
11966       my_friendly_abort (18);
11967     }
11968
11969   /* If a cross reference is requested, look up the type
11970      already defined for this tag and return it.  */
11971   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11972     {
11973       t = name;
11974       name = TYPE_IDENTIFIER (t);
11975       got_type = 1;
11976     }
11977   else
11978     t = IDENTIFIER_TYPE_VALUE (name);
11979
11980   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11981       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11982     t = NULL_TREE;
11983
11984   if (! globalize)
11985     {
11986       /* If we know we are defining this tag, only look it up in
11987          this scope and don't try to find it as a type.  */
11988       ref = lookup_tag (code, name, b, 1);
11989     }
11990   else
11991     {
11992       if (t)
11993         {
11994           /* [dcl.type.elab] If the identifier resolves to a
11995              typedef-name or a template type-parameter, the
11996              elaborated-type-specifier is ill-formed.  */
11997           if (t != TYPE_MAIN_VARIANT (t)
11998               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
11999             cp_pedwarn ("using typedef-name `%D' after `%s'",
12000                         TYPE_NAME (t), tag_name (tag_code));
12001           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12002             cp_error ("using template type parameter `%T' after `%s'",
12003                       t, tag_name (tag_code));
12004
12005           ref = t;
12006         }
12007       else
12008         ref = lookup_tag (code, name, b, 0);
12009           
12010       if (! ref)
12011         {
12012           /* Try finding it as a type declaration.  If that wins,
12013              use it.  */ 
12014           ref = lookup_name (name, 1);
12015
12016           if (ref != NULL_TREE
12017               && processing_template_decl
12018               && DECL_CLASS_TEMPLATE_P (ref)
12019               && template_class_depth (current_class_type) == 0)
12020             /* Since GLOBALIZE is true, we're declaring a global
12021                template, so we want this type.  */
12022             ref = DECL_RESULT (ref);
12023
12024           if (ref && TREE_CODE (ref) == TYPE_DECL
12025               && TREE_CODE (TREE_TYPE (ref)) == code)
12026             ref = TREE_TYPE (ref);
12027           else
12028             ref = NULL_TREE;
12029         }
12030
12031       if (ref && current_class_type 
12032           && template_class_depth (current_class_type) 
12033           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12034         {
12035           /* Since GLOBALIZE is non-zero, we are not looking at a
12036              definition of this tag.  Since, in addition, we are currently
12037              processing a (member) template declaration of a template
12038              class, we must be very careful; consider:
12039
12040                template <class X>
12041                struct S1
12042
12043                template <class U>
12044                struct S2
12045                { template <class V>
12046                friend struct S1; };
12047
12048              Here, the S2::S1 declaration should not be confused with the
12049              outer declaration.  In particular, the inner version should
12050              have a template parameter of level 2, not level 1.  This
12051              would be particularly important if the member declaration
12052              were instead:
12053
12054                template <class V = U> friend struct S1;
12055
12056              say, when we should tsubst into `U' when instantiating
12057              S2.  On the other hand, when presented with:
12058
12059                  template <class T>
12060                  struct S1 {
12061                    template <class U>
12062                    struct S2 {};
12063                    template <class U>
12064                    friend struct S2;
12065                  };
12066
12067               we must find the inner binding eventually.  We
12068               accomplish this by making sure that the new type we
12069               create to represent this declaration has the right
12070               TYPE_CONTEXT.  */
12071           context = TYPE_CONTEXT (ref);
12072           ref = NULL_TREE;
12073         }
12074     }
12075
12076   push_obstacks_nochange ();
12077
12078   if (! ref)
12079     {
12080       /* If no such tag is yet defined, create a forward-reference node
12081          and record it as the "definition".
12082          When a real declaration of this type is found,
12083          the forward-reference will be altered into a real type.  */
12084
12085       /* In C++, since these migrate into the global scope, we must
12086          build them on the permanent obstack.  */
12087
12088       temp = allocation_temporary_p ();
12089       if (temp)
12090         end_temporary_allocation ();
12091
12092       if (code == ENUMERAL_TYPE)
12093         {
12094           cp_error ("use of enum `%#D' without previous declaration", name);
12095
12096           ref = make_node (ENUMERAL_TYPE);
12097
12098           /* Give the type a default layout like unsigned int
12099              to avoid crashing if it does not get defined.  */
12100           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12101           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12102           TREE_UNSIGNED (ref) = 1;
12103           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12104           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12105           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12106
12107           /* Enable us to recognize when a type is created in class context.
12108              To do nested classes correctly, this should probably be cleared
12109              out when we leave this classes scope.  Currently this in only
12110              done in `start_enum'.  */
12111
12112           pushtag (name, ref, globalize);
12113         }
12114       else
12115         {
12116           struct binding_level *old_b = class_binding_level;
12117
12118           ref = make_lang_type (code);
12119           TYPE_CONTEXT (ref) = context;
12120
12121 #ifdef NONNESTED_CLASSES
12122           /* Class types don't nest the way enums do.  */
12123           class_binding_level = (struct binding_level *)0;
12124 #endif
12125           pushtag (name, ref, globalize);
12126           class_binding_level = old_b;
12127         }
12128     }
12129   else
12130     {
12131       /* If it no longer looks like a nested type, make sure it's
12132          in global scope.  
12133          If it is not an IDENTIFIER, this is not a declaration */
12134       if (b->namespace_p && !class_binding_level
12135           && TREE_CODE (name) == IDENTIFIER_NODE
12136           && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12137         SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12138
12139       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12140         redeclare_class_template (ref, current_template_parms);
12141     }
12142
12143   /* Until the type is defined, tentatively accept whatever
12144      structure tag the user hands us.  */
12145   if (TYPE_SIZE (ref) == NULL_TREE
12146       && ref != current_class_type
12147       /* Have to check this, in case we have contradictory tag info.  */
12148       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12149     {
12150       if (tag_code == class_type)
12151         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12152       else if (tag_code == record_type)
12153         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12154     }
12155
12156   pop_obstacks ();
12157
12158   TREE_TYPE (ref) = attributes;
12159
12160   return ref;
12161 }
12162
12163 tree
12164 xref_tag_from_type (old, id, globalize)
12165      tree old, id;
12166      int globalize;
12167 {
12168   tree code_type_node;
12169
12170   if (TREE_CODE (old) == RECORD_TYPE)
12171     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12172                       ? class_type_node : record_type_node);
12173   else
12174     code_type_node = union_type_node;
12175
12176   if (id == NULL_TREE)
12177     id = TYPE_IDENTIFIER (old);
12178
12179   return xref_tag (code_type_node, id, globalize);
12180 }
12181
12182 /* REF is a type (named NAME), for which we have just seen some
12183    baseclasses.  BINFO is a list of those baseclasses; the
12184    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12185    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12186    struct, or union.  */
12187
12188 void
12189 xref_basetypes (code_type_node, name, ref, binfo)
12190      tree code_type_node;
12191      tree name, ref;
12192      tree binfo;
12193 {
12194   /* In the declaration `A : X, Y, ... Z' we mark all the types
12195      (A, X, Y, ..., Z) so we can check for duplicates.  */
12196   tree binfos;
12197   tree base;
12198
12199   int i, len;
12200   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12201
12202   if (tag_code == union_type)
12203     {
12204       cp_error ("derived union `%T' invalid", ref);
12205       return;
12206     }
12207
12208   len = list_length (binfo);
12209   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12210
12211   /* First, make sure that any templates in base-classes are
12212      instantiated.  This ensures that if we call ourselves recursively
12213      we do not get confused about which classes are marked and which
12214      are not.  */
12215   for (base = binfo; base; base = TREE_CHAIN (base))
12216     complete_type (TREE_VALUE (base));
12217
12218   SET_CLASSTYPE_MARKED (ref);
12219   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12220
12221   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12222     {
12223       /* The base of a derived struct is public by default.  */
12224       int via_public
12225         = (TREE_PURPOSE (binfo) == access_public_node
12226            || TREE_PURPOSE (binfo) == access_public_virtual_node
12227            || (tag_code != class_type
12228                && (TREE_PURPOSE (binfo) == access_default_node
12229                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12230       int via_protected
12231         = (TREE_PURPOSE (binfo) == access_protected_node
12232            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12233       int via_virtual
12234         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12235            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12236            || TREE_PURPOSE (binfo) == access_public_virtual_node
12237            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12238       tree basetype = TREE_VALUE (binfo);
12239       tree base_binfo;
12240
12241       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12242         basetype = TREE_TYPE (basetype);
12243       if (!basetype
12244           || (TREE_CODE (basetype) != RECORD_TYPE
12245               && TREE_CODE (basetype) != TYPENAME_TYPE
12246               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12247               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12248         {
12249           cp_error ("base type `%T' fails to be a struct or class type",
12250                     TREE_VALUE (binfo));
12251           continue;
12252         }
12253
12254       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12255
12256       /* This code replaces similar code in layout_basetypes.
12257          We put the complete_type first for implicit `typename'.  */
12258       if (TYPE_SIZE (basetype) == NULL_TREE
12259           && ! (current_template_parms && uses_template_parms (basetype)))
12260         {
12261           cp_error ("base class `%T' has incomplete type", basetype);
12262           continue;
12263         }
12264       else
12265         {
12266           if (CLASSTYPE_MARKED (basetype))
12267             {
12268               if (basetype == ref)
12269                 cp_error ("recursive type `%T' undefined", basetype);
12270               else
12271                 cp_error ("duplicate base type `%T' invalid", basetype);
12272               continue;
12273             }
12274
12275           if (TYPE_FOR_JAVA (basetype)
12276               && (current_lang_stack 
12277                   == &VARRAY_TREE (current_lang_base, 0)))
12278             TYPE_FOR_JAVA (ref) = 1;
12279
12280           /* Note that the BINFO records which describe individual
12281              inheritances are *not* shared in the lattice!  They
12282              cannot be shared because a given baseclass may be
12283              inherited with different `accessibility' by different
12284              derived classes.  (Each BINFO record describing an
12285              individual inheritance contains flags which say what
12286              the `accessibility' of that particular inheritance is.)  */
12287   
12288           base_binfo 
12289             = make_binfo (integer_zero_node, basetype,
12290                           CLASS_TYPE_P (basetype)
12291                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12292                           CLASS_TYPE_P (basetype)
12293                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12294  
12295           TREE_VEC_ELT (binfos, i) = base_binfo;
12296           TREE_VIA_PUBLIC (base_binfo) = via_public;
12297           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12298           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12299           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12300
12301           /* We need to unshare the binfos now so that lookups during class
12302              definition work.  */
12303           unshare_base_binfos (base_binfo);
12304
12305           SET_CLASSTYPE_MARKED (basetype);
12306
12307           /* We are free to modify these bits because they are meaningless
12308              at top level, and BASETYPE is a top-level type.  */
12309           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12310             {
12311               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12312               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12313             }
12314
12315           if (CLASS_TYPE_P (basetype))
12316             {
12317               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12318               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12319             }
12320
12321           i += 1;
12322         }
12323     }
12324   if (i)
12325     TREE_VEC_LENGTH (binfos) = i;
12326   else
12327     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12328
12329   if (i > 1)
12330     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12331   else if (i == 1)
12332     {
12333       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12334       
12335       if (CLASS_TYPE_P (basetype))
12336         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12337           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12338     }
12339
12340   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12341     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12342
12343   /* Unmark all the types.  */
12344   while (--i >= 0)
12345     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12346   CLEAR_CLASSTYPE_MARKED (ref);
12347
12348   /* Now that we know all the base-classes, set up the list of virtual
12349      bases.  */
12350   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12351
12352   pop_obstacks ();
12353 }
12354   
12355 \f
12356 /* Begin compiling the definition of an enumeration type.
12357    NAME is its name (or null if anonymous).
12358    Returns the type object, as yet incomplete.
12359    Also records info about it so that build_enumerator
12360    may be used to declare the individual values as they are read.  */
12361
12362 tree
12363 start_enum (name)
12364      tree name;
12365 {
12366   register tree enumtype = NULL_TREE;
12367   struct binding_level *b = current_binding_level;
12368
12369   /* We are wasting space here and putting these on the permanent_obstack so
12370      that typeid(local enum) will work correctly. */
12371   push_obstacks (&permanent_obstack, &permanent_obstack);
12372
12373   /* If this is the real definition for a previous forward reference,
12374      fill in the contents in the same object that used to be the
12375      forward reference.  */
12376
12377   if (name != NULL_TREE)
12378     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12379
12380   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12381     {
12382       cp_error ("multiple definition of `%#T'", enumtype);
12383       cp_error_at ("previous definition here", enumtype);
12384     }
12385   else
12386     {
12387       enumtype = make_node (ENUMERAL_TYPE);
12388       pushtag (name, enumtype, 0);
12389     }
12390
12391   if (current_class_type)
12392     TREE_ADDRESSABLE (b->tags) = 1;
12393
12394   /* We don't copy this value because build_enumerator needs to do it.  */
12395   enum_next_value = integer_zero_node;
12396   enum_overflow = 0;
12397
12398   GNU_xref_decl (current_function_decl, enumtype);
12399   return enumtype;
12400 }
12401
12402 /* After processing and defining all the values of an enumeration type,
12403    install their decls in the enumeration type and finish it off.
12404    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12405    Returns ENUMTYPE.  */
12406
12407 tree
12408 finish_enum (enumtype)
12409      tree enumtype;
12410 {
12411   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12412   /* Calculate the maximum value of any enumerator in this type.  */
12413
12414   tree values = TYPE_VALUES (enumtype);
12415   if (values)
12416     {
12417       tree pair;
12418
12419       for (pair = values; pair; pair = TREE_CHAIN (pair))
12420         {
12421           tree decl;
12422           tree value;
12423
12424           /* The TREE_VALUE is a CONST_DECL for this enumeration
12425              constant.  */
12426           decl = TREE_VALUE (pair);
12427
12428           /* The DECL_INITIAL will be NULL if we are processing a
12429              template declaration and this enumeration constant had no
12430              explicit initializer.  */
12431           value = DECL_INITIAL (decl);
12432           if (value && !processing_template_decl)
12433             {
12434               /* Set the TREE_TYPE for the VALUE as well.  That's so
12435                  that when we call decl_constant_value we get an
12436                  entity of the right type (but with the constant
12437                  value).  Since we shouldn't ever call
12438                  decl_constant_value on a template type, there's no
12439                  reason to do that when processing_template_decl.
12440                  And, if the expression is something like a
12441                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12442                  wreak havoc on the intended type of the expression.  
12443
12444                  Of course, there's also no point in trying to compute
12445                  minimum or maximum values if we're in a template.  */
12446               TREE_TYPE (value) = enumtype;
12447
12448               if (!minnode)
12449                 minnode = maxnode = value;
12450               else if (tree_int_cst_lt (maxnode, value))
12451                 maxnode = value;
12452               else if (tree_int_cst_lt (value, minnode))
12453                 minnode = value;
12454             }
12455
12456           if (processing_template_decl) 
12457             /* If this is just a template, leave the CONST_DECL
12458                alone.  That way tsubst_copy will find CONST_DECLs for
12459                CONST_DECLs, and not INTEGER_CSTs.  */
12460             ;
12461           else
12462             /* In the list we're building up, we want the enumeration
12463                values, not the CONST_DECLs.  */
12464             TREE_VALUE (pair) = value;
12465         }
12466     }
12467   else
12468     maxnode = minnode = integer_zero_node;
12469
12470   TYPE_VALUES (enumtype) = nreverse (values);
12471
12472   if (processing_template_decl)
12473     {
12474       tree scope = current_scope ();
12475       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12476         add_tree (build_min (TAG_DEFN, enumtype));
12477     }
12478   else
12479     {
12480       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12481       int lowprec = min_precision (minnode, unsignedp);
12482       int highprec = min_precision (maxnode, unsignedp);
12483       int precision = MAX (lowprec, highprec);
12484       tree tem;
12485
12486       TYPE_SIZE (enumtype) = NULL_TREE;
12487
12488       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12489
12490       TYPE_PRECISION (enumtype) = precision;
12491       if (unsignedp)
12492         fixup_unsigned_type (enumtype);
12493       else
12494         fixup_signed_type (enumtype);
12495
12496       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12497         /* Use the width of the narrowest normal C type which is wide
12498            enough.  */ 
12499         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12500                                                     (precision, 1));
12501       else
12502         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12503
12504       TYPE_SIZE (enumtype) = 0;
12505       layout_type (enumtype);
12506     
12507       /* Fix up all variant types of this enum type.  */
12508       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12509            tem = TYPE_NEXT_VARIANT (tem))
12510         {
12511           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12512           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12513           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12514           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12515           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12516           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12517           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12518           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12519           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12520         }
12521
12522       /* Finish debugging output for this type.  */
12523       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12524     }
12525
12526   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12527   pop_obstacks ();
12528
12529   return enumtype;
12530 }
12531
12532 /* Build and install a CONST_DECL for an enumeration constant of the
12533    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12534    Assignment of sequential values by default is handled here.  */
12535
12536 tree
12537 build_enumerator (name, value, type)
12538      tree name;
12539      tree value;
12540      tree type;
12541 {
12542   tree decl, result;
12543   tree context;
12544
12545   /* Remove no-op casts from the value.  */
12546   if (value)
12547     STRIP_TYPE_NOPS (value);
12548
12549  if (! processing_template_decl)
12550    {
12551      /* Validate and default VALUE.  */
12552      if (value != NULL_TREE)
12553        {
12554          if (TREE_READONLY_DECL_P (value))
12555            value = decl_constant_value (value);
12556
12557          if (TREE_CODE (value) == INTEGER_CST)
12558            {
12559              value = default_conversion (value);
12560              constant_expression_warning (value);
12561            }
12562          else
12563            {
12564              cp_error ("enumerator value for `%D' not integer constant", name);
12565              value = NULL_TREE;
12566            }
12567        }
12568
12569      /* Default based on previous value.  */
12570      if (value == NULL_TREE && ! processing_template_decl)
12571        {
12572          value = enum_next_value;
12573          if (enum_overflow)
12574            cp_error ("overflow in enumeration values at `%D'", name);
12575        }
12576
12577      /* Remove no-op casts from the value.  */
12578      if (value)
12579        STRIP_TYPE_NOPS (value);
12580 #if 0
12581      /* To fix MAX_VAL enum consts. (bkoz)  */
12582      TREE_TYPE (value) = integer_type_node;
12583 #endif
12584    }
12585
12586  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12587     Even in other cases, we will later (in finish_enum) be setting the
12588     type of VALUE.  */
12589  if (value != NULL_TREE)
12590    value = copy_node (value);
12591
12592   /* C++ associates enums with global, function, or class declarations.  */
12593  
12594  context = current_scope ();
12595  if (context && context == current_class_type)
12596    /* This enum declaration is local to the class.  */
12597    decl = build_lang_decl (CONST_DECL, name, type);
12598  else
12599    /* It's a global enum, or it's local to a function.  (Note local to
12600       a function could mean local to a class method.  */
12601    decl = build_decl (CONST_DECL, name, type);
12602
12603  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12604  DECL_INITIAL (decl) = value;
12605  TREE_READONLY (decl) = 1;
12606
12607  if (context && context == current_class_type)
12608    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12609       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12610       things like `S::i' later.)  */
12611    finish_member_declaration (decl);
12612  else
12613    {
12614      pushdecl (decl);
12615      GNU_xref_decl (current_function_decl, decl);
12616    }
12617
12618  if (! processing_template_decl)
12619    {
12620      /* Set basis for default for next value.  */
12621      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12622                                                   integer_one_node, PLUS_EXPR);
12623      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12624    }
12625
12626   result = tree_cons (name, decl, NULL_TREE);
12627   return result;
12628 }
12629
12630 \f
12631 static int function_depth;
12632
12633 /* We're defining DECL.  Make sure that it's type is OK.  */
12634
12635 static void
12636 check_function_type (decl)
12637      tree decl;
12638 {
12639   tree fntype = TREE_TYPE (decl);
12640
12641   /* In a function definition, arg types must be complete.  */
12642   require_complete_types_for_parms (current_function_parms);
12643
12644   if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12645     {
12646       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12647
12648       /* Make it return void instead, but don't change the
12649          type of the DECL_RESULT, in case we have a named return value.  */
12650       if (TREE_CODE (fntype) == METHOD_TYPE)
12651         {
12652           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12653           TREE_TYPE (decl)
12654             = build_cplus_method_type (ctype,
12655                                        void_type_node,
12656                                        FUNCTION_ARG_CHAIN (decl));
12657         }
12658       else
12659         TREE_TYPE (decl)
12660           = build_function_type (void_type_node,
12661                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
12662       TREE_TYPE (decl) 
12663         = build_exception_variant (fntype,
12664                                    TYPE_RAISES_EXCEPTIONS (fntype));
12665     }
12666   else
12667     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12668 }
12669
12670 /* Create the FUNCTION_DECL for a function definition.
12671    DECLSPECS and DECLARATOR are the parts of the declaration;
12672    they describe the function's name and the type it returns,
12673    but twisted together in a fashion that parallels the syntax of C.
12674
12675    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12676    DECLARATOR is really the DECL for the function we are about to
12677    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12678    indicating that the function is an inline defined in-class, and
12679    SF_EXPAND indicating that we should generate RTL for this
12680    function.  
12681    
12682    This function creates a binding context for the function body
12683    as well as setting up the FUNCTION_DECL in current_function_decl.
12684
12685    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12686    (it defines a datum instead), we return 0, which tells
12687    yyparse to report a parse error.
12688
12689    For C++, we must first check whether that datum makes any sense.
12690    For example, "class A local_a(1,2);" means that variable local_a
12691    is an aggregate of type A, which should have a constructor
12692    applied to it with the argument list [1, 2].  */
12693
12694 int
12695 start_function (declspecs, declarator, attrs, flags)
12696      tree declspecs, declarator, attrs;
12697      int flags;
12698 {
12699   tree decl1;
12700   tree ctype = NULL_TREE;
12701   tree fntype;
12702   tree restype;
12703   extern int have_extern_spec;
12704   extern int used_extern_spec;
12705   int doing_friend = 0;
12706   struct binding_level *bl;
12707
12708   /* Sanity check.  */
12709   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12710   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12711
12712   /* This should only be done once on the top most decl.  */
12713   if (have_extern_spec && !used_extern_spec)
12714     {
12715       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12716       used_extern_spec = 1;
12717     }
12718
12719   if (flags & SF_PRE_PARSED)
12720     {
12721       decl1 = declarator;
12722
12723       fntype = TREE_TYPE (decl1);
12724       if (TREE_CODE (fntype) == METHOD_TYPE)
12725         ctype = TYPE_METHOD_BASETYPE (fntype);
12726
12727       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12728          class is in the (lexical) scope of the class in which it is
12729          defined.  */
12730       if (!ctype && DECL_FRIEND_P (decl1))
12731         {
12732           ctype = DECL_CLASS_CONTEXT (decl1);
12733
12734           /* CTYPE could be null here if we're dealing with a template;
12735              for example, `inline friend float foo()' inside a template
12736              will have no CTYPE set.  */
12737           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12738             ctype = NULL_TREE;
12739           else
12740             doing_friend = 1;
12741         }
12742
12743       last_function_parms = DECL_ARGUMENTS (decl1);
12744       last_function_parm_tags = NULL_TREE;
12745     }
12746   else
12747     {
12748       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12749       /* If the declarator is not suitable for a function definition,
12750          cause a syntax error.  */
12751       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12752
12753       fntype = TREE_TYPE (decl1);
12754
12755       restype = TREE_TYPE (fntype);
12756       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12757         {
12758           cp_error ("semicolon missing after declaration of `%#T'", restype);
12759           shadow_tag (build_expr_list (NULL_TREE, restype));
12760           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12761           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12762             fntype = build_function_type (integer_type_node,
12763                                           TYPE_ARG_TYPES (fntype));
12764           else
12765             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12766                                               integer_type_node,
12767                                               TYPE_ARG_TYPES (fntype));
12768           TREE_TYPE (decl1) = fntype;
12769         }
12770
12771       if (TREE_CODE (fntype) == METHOD_TYPE)
12772         ctype = TYPE_METHOD_BASETYPE (fntype);
12773       else if (DECL_MAIN_P (decl1))
12774         {
12775           /* If this doesn't return integer_type, complain.  */
12776           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12777             {
12778               if (pedantic || warn_return_type)
12779                 pedwarn ("return type for `main' changed to `int'");
12780               TREE_TYPE (decl1) = fntype = default_function_type;
12781             }
12782         }
12783     }
12784   
12785   /* Sometimes we don't notice that a function is a static member, and
12786      build a METHOD_TYPE for it.  Fix that up now.  */
12787   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12788       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12789     {
12790       revert_static_member_fn (&decl1, NULL, NULL);
12791       last_function_parms = TREE_CHAIN (last_function_parms);
12792       ctype = NULL_TREE;
12793     }
12794
12795   /* Warn if function was previously implicitly declared
12796      (but not if we warned then).  */
12797   if (! warn_implicit
12798       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12799     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12800
12801   /* Set up current_class_type, and enter the scope of the class, if
12802      appropriate.  */
12803   if (ctype)
12804     push_nested_class (ctype, 1);
12805   else if (DECL_STATIC_FUNCTION_P (decl1))
12806     push_nested_class (DECL_CONTEXT (decl1), 2);
12807
12808   /* Now that we have entered the scope of the class, we must restore
12809      the bindings for any template parameters surrounding DECL1, if it
12810      is an inline member template.  (Order is important; consider the
12811      case where a template parameter has the same name as a field of
12812      the class.)  It is not until after this point that
12813      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12814   if (flags & SF_INCLASS_INLINE)
12815     maybe_begin_member_template_processing (decl1);
12816
12817   /* Effective C++ rule 15.  See also c_expand_return.  */
12818   if (warn_ecpp
12819       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12820       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12821     cp_warning ("`operator=' should return a reference to `*this'");
12822
12823   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12824      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12825   if (!DECL_INITIAL (decl1))
12826     DECL_INITIAL (decl1) = error_mark_node;
12827
12828 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12829   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12830 #endif
12831   
12832   /* This function exists in static storage.
12833      (This does not mean `static' in the C sense!)  */
12834   TREE_STATIC (decl1) = 1;
12835
12836   /* We must call push_template_decl after current_class_type is set
12837      up.  (If we are processing inline definitions after exiting a
12838      class scope, current_class_type will be NULL_TREE until set above
12839      by push_nested_class.)  */
12840   if (processing_template_decl)
12841     decl1 = push_template_decl (decl1);
12842
12843   /* We are now in the scope of the function being defined.  */
12844   current_function_decl = decl1;
12845
12846   /* Save the parm names or decls from this function's declarator
12847      where store_parm_decls will find them.  */
12848   current_function_parms = last_function_parms;
12849   current_function_parm_tags = last_function_parm_tags;
12850
12851   /* Make sure the parameter and return types are reasonable.  When
12852      you declare a function, these types can be incomplete, but they
12853      must be complete when you define the function.  */
12854   if (! processing_template_decl)
12855     check_function_type (decl1);
12856
12857   /* Build the return declaration for the function.  */
12858   restype = TREE_TYPE (fntype);
12859   if (!processing_template_decl)
12860     {
12861       if (!DECL_RESULT (decl1))
12862         {
12863           DECL_RESULT (decl1)
12864             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12865           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype), 
12866                                       DECL_RESULT (decl1)); 
12867         }
12868     }
12869   else
12870     /* Just use `void'.  Nobody will ever look at this anyhow.  */
12871     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12872
12873   /* Initialize RTL machinery.  We cannot do this until
12874      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12875      even when processing a template; this is how we get
12876      CURRENT_FUNCTION set up, and our per-function variables
12877      initialized.  */
12878   bl = current_binding_level;
12879   init_function_start (decl1, input_filename, lineno);
12880   current_binding_level = bl;
12881   expanding_p = (flags & SF_EXPAND) != 0;
12882
12883   /* Even though we're inside a function body, we still don't want to
12884      call expand_expr to calculate the size of a variable-sized array.
12885      We haven't necessarily assigned RTL to all variables yet, so it's
12886      not safe to try to expand expressions involving them.  */
12887   immediate_size_expand = 0;
12888   current_function->x_dont_save_pending_sizes_p = 1;
12889
12890   /* If we're building a statement-tree, start the tree now.  */
12891   if (processing_template_decl || !expanding_p)
12892     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
12893
12894   /* Let the user know we're compiling this function.  */
12895   if (processing_template_decl || !building_stmt_tree ())
12896     announce_function (decl1);
12897
12898   /* Record the decl so that the function name is defined.
12899      If we already have a decl for this name, and it is a FUNCTION_DECL,
12900      use the old decl.  */
12901   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12902     {
12903       /* A specialization is not used to guide overload resolution.  */
12904       if ((flag_guiding_decls 
12905            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12906           && ! DECL_FUNCTION_MEMBER_P (decl1))
12907         decl1 = pushdecl (decl1);
12908       else
12909         {
12910           /* We need to set the DECL_CONTEXT. */
12911           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12912             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12913           /* And make sure we have enough default args.  */
12914           check_default_args (decl1);
12915         }
12916       DECL_MAIN_VARIANT (decl1) = decl1;
12917       fntype = TREE_TYPE (decl1);
12918     }
12919
12920   /* Reset these in case the call to pushdecl changed them.  */
12921   current_function_decl = decl1;
12922   current_function->decl = decl1;
12923
12924   /* Initialize the per-function data.  */
12925   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12926     {
12927       /* If we already parsed this function, and we're just expanding it
12928          now, restore saved state.  */
12929       struct binding_level *bl = current_binding_level;
12930       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12931       current_binding_level = bl;
12932
12933       /* This function is being processed in whole-function mode; we
12934          already did semantic analysis.  */
12935       current_function->x_whole_function_mode_p = 1;
12936
12937       /* If we decided that we didn't want to inline this function,
12938          make sure the back-end knows that.  */
12939       if (!current_function_cannot_inline)
12940         current_function_cannot_inline = cp_function_chain->cannot_inline;
12941
12942       /* We don't need the saved data anymore.  */
12943       free (DECL_SAVED_FUNCTION_DATA (decl1));
12944       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12945     }
12946   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12947     {
12948       /* We know that this was set up by `grokclassfn'.  We do not
12949          wait until `store_parm_decls', since evil parse errors may
12950          never get us to that point.  Here we keep the consistency
12951          between `current_class_type' and `current_class_ptr'.  */
12952       tree t = DECL_ARGUMENTS (decl1);
12953               
12954       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL, 
12955                           162);
12956       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12957                           19990811);
12958           
12959       cp_function_chain->x_current_class_ref 
12960         = build_indirect_ref (t, NULL_PTR);
12961       cp_function_chain->x_current_class_ptr = t;
12962
12963       /* Constructors and destructors need to know whether they're "in
12964          charge" of initializing virtual base classes.  */
12965       if (DECL_DESTRUCTOR_P (decl1))
12966         current_in_charge_parm = TREE_CHAIN (t);
12967       else if (DECL_CONSTRUCTOR_P (decl1)
12968                && TREE_CHAIN (t)
12969                && DECL_ARTIFICIAL (TREE_CHAIN (t))
12970                && (DECL_NAME (TREE_CHAIN (t))
12971                    == in_charge_identifier))
12972         current_in_charge_parm = TREE_CHAIN (t);
12973     }
12974
12975   if (DECL_INTERFACE_KNOWN (decl1))
12976     {
12977       tree ctx = hack_decl_function_context (decl1);
12978
12979       if (DECL_NOT_REALLY_EXTERN (decl1))
12980         DECL_EXTERNAL (decl1) = 0;
12981
12982       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12983           && TREE_PUBLIC (ctx))
12984         /* This is a function in a local class in an extern inline
12985            function.  */
12986         comdat_linkage (decl1);
12987     }
12988   /* If this function belongs to an interface, it is public.
12989      If it belongs to someone else's interface, it is also external.
12990      This only affects inlines and template instantiations.  */
12991   else if (interface_unknown == 0
12992            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
12993                || flag_alt_external_templates))
12994     {
12995       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
12996           || processing_template_decl)
12997         {
12998           DECL_EXTERNAL (decl1)
12999             = (interface_only
13000                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13001                    && !DECL_VINDEX (decl1)));
13002
13003           /* For WIN32 we also want to put these in linkonce sections.  */
13004           maybe_make_one_only (decl1);
13005         }
13006       else
13007         DECL_EXTERNAL (decl1) = 0;
13008       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13009       DECL_INTERFACE_KNOWN (decl1) = 1;
13010     }
13011   else if (interface_unknown && interface_only
13012            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13013                || flag_alt_external_templates))
13014     {
13015       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13016          interface, we will have interface_only set but not
13017          interface_known.  In that case, we don't want to use the normal
13018          heuristics because someone will supply a #pragma implementation
13019          elsewhere, and deducing it here would produce a conflict.  */
13020       comdat_linkage (decl1);
13021       DECL_EXTERNAL (decl1) = 0;
13022       DECL_INTERFACE_KNOWN (decl1) = 1;
13023       DECL_DEFER_OUTPUT (decl1) = 1;
13024     }
13025   else
13026     {
13027       /* This is a definition, not a reference.
13028          So clear DECL_EXTERNAL.  */
13029       DECL_EXTERNAL (decl1) = 0;
13030
13031       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13032           && ! DECL_INTERFACE_KNOWN (decl1)
13033           /* Don't try to defer nested functions for now.  */
13034           && ! hack_decl_function_context (decl1))
13035         DECL_DEFER_OUTPUT (decl1) = 1;
13036       else
13037         DECL_INTERFACE_KNOWN (decl1) = 1;
13038     }
13039
13040   if (doing_semantic_analysis_p ())
13041     {
13042       pushlevel (0);
13043       current_binding_level->parm_flag = 1;
13044     }
13045
13046   if (attrs)
13047     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13048   
13049   if (!building_stmt_tree ())
13050     {
13051       GNU_xref_function (decl1, current_function_parms);
13052       make_function_rtl (decl1);
13053     }
13054
13055   /* Promote the value to int before returning it.  */
13056   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13057     restype = type_promotes_to (restype);
13058
13059   /* If this fcn was already referenced via a block-scope `extern' decl
13060      (or an implicit decl), propagate certain information about the usage.  */
13061   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13062     TREE_ADDRESSABLE (decl1) = 1;
13063
13064   if (DECL_RESULT (decl1) == NULL_TREE)
13065     {
13066       DECL_RESULT (decl1)
13067         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13068       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13069       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13070     }
13071
13072   /* Allocate further tree nodes temporarily during compilation
13073      of this function only.  Tiemann moved up here from bottom of fn.  */
13074   /* If this is a nested function, then we must continue to allocate RTL
13075      on the permanent obstack in case we need to inline it later.  */
13076   if (! hack_decl_function_context (decl1))
13077     temporary_allocation ();
13078   
13079   ++function_depth;
13080
13081   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13082       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13083     dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13084   else if (DECL_CONSTRUCTOR_P (decl1))
13085     ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13086
13087   return 1;
13088 }
13089 \f
13090 /* Called after store_parm_decls for a function-try-block.  */
13091
13092 void
13093 expand_start_early_try_stmts ()
13094 {
13095   expand_start_try_stmts ();
13096 }
13097
13098 /* Store the parameter declarations into the current function declaration.
13099    This is called after parsing the parameter declarations, before
13100    digesting the body of the function.
13101
13102    Also install to binding contour return value identifier, if any.  */
13103
13104 void
13105 store_parm_decls ()
13106 {
13107   register tree fndecl = current_function_decl;
13108   register tree parm;
13109   int parms_have_cleanups = 0;
13110   tree cleanups = NULL_TREE;
13111
13112   /* This is a list of types declared among parms in a prototype.  */
13113   tree parmtags = current_function_parm_tags;
13114
13115   /* This is a chain of any other decls that came in among the parm
13116      declarations.  If a parm is declared with  enum {foo, bar} x;
13117      then CONST_DECLs for foo and bar are put here.  */
13118   tree nonparms = NULL_TREE;
13119
13120   /* Create a binding level for the parms.  */
13121   if (!building_stmt_tree ())
13122     expand_start_bindings (2);
13123
13124   if (current_function_parms)
13125     {
13126       /* This case is when the function was defined with an ANSI prototype.
13127          The parms already have decls, so we need not do anything here
13128          except record them as in effect
13129          and complain if any redundant old-style parm decls were written.  */
13130
13131       tree specparms = current_function_parms;
13132       tree next;
13133
13134       if (doing_semantic_analysis_p ())
13135         {
13136           /* Must clear this because it might contain TYPE_DECLs declared
13137              at class level.  */
13138           storedecls (NULL_TREE);
13139
13140           /* If we're doing semantic analysis, then we'll call pushdecl
13141              for each of these.  We must do them in reverse order so that
13142              they end in the correct forward order.  */
13143           specparms = nreverse (specparms);
13144         }
13145
13146       for (parm = specparms; parm; parm = next)
13147         {
13148           next = TREE_CHAIN (parm);
13149           if (TREE_CODE (parm) == PARM_DECL)
13150             {
13151               tree type = TREE_TYPE (parm);
13152
13153               if (doing_semantic_analysis_p ())
13154                 {
13155                   tree cleanup;
13156               
13157                   if (DECL_NAME (parm) == NULL_TREE
13158                       || TREE_CODE (parm) != VOID_TYPE)
13159                     pushdecl (parm);
13160                   else
13161                     cp_error ("parameter `%D' declared void", parm);
13162
13163                   cleanup = maybe_build_cleanup (parm);
13164                   
13165                   if (cleanup)
13166                     cleanups = tree_cons (parm, cleanup, cleanups);
13167                 }
13168               else if (type != error_mark_node
13169                        && TYPE_NEEDS_DESTRUCTOR (type))
13170                 parms_have_cleanups = 1;
13171             }
13172           else
13173             {
13174               /* If we find an enum constant or a type tag,
13175                  put it aside for the moment.  */
13176               TREE_CHAIN (parm) = NULL_TREE;
13177               nonparms = chainon (nonparms, parm);
13178             }
13179         }
13180
13181       if (doing_semantic_analysis_p ())
13182         {
13183           /* Get the decls in their original chain order
13184              and record in the function.  This is all and only the
13185              PARM_DECLs that were pushed into scope by the loop above.  */
13186           DECL_ARGUMENTS (fndecl) = getdecls ();
13187           storetags (chainon (parmtags, gettags ()));
13188         }
13189     }
13190   else
13191     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13192
13193   /* Now store the final chain of decls for the arguments
13194      as the decl-chain of the current lexical scope.
13195      Put the enumerators in as well, at the front so that
13196      DECL_ARGUMENTS is not modified.  */
13197   if (doing_semantic_analysis_p ())
13198     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13199
13200   /* Initialize the RTL code for the function.  */
13201   DECL_SAVED_INSNS (fndecl) = 0;
13202   if (! building_stmt_tree ())
13203     expand_function_start (fndecl, parms_have_cleanups);
13204
13205   current_function_parms_stored = 1;
13206
13207   /* If this function is `main', emit a call to `__main'
13208      to run global initializers, etc.  */
13209   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13210     expand_main_function ();
13211
13212   /* Now that we have initialized the parms, we can start their
13213      cleanups.  We cannot do this before, since expand_decl_cleanup
13214      should not be called before the parm can be used.  */
13215   while (cleanups)
13216     {
13217       finish_decl_cleanup (TREE_PURPOSE (cleanups), 
13218                            TREE_VALUE (cleanups));
13219       cleanups = TREE_CHAIN (cleanups);
13220     }
13221
13222   /* Create a binding contour which can be used to catch
13223      cleanup-generated temporaries.  Also, if the return value needs or
13224      has initialization, deal with that now.  */
13225   if (parms_have_cleanups)
13226     {
13227       pushlevel (0);
13228       if (!building_stmt_tree ())
13229         expand_start_bindings (2);
13230     }
13231
13232   /* Do the starting of the exception specifications, if we have any.  */
13233   if (flag_exceptions && !processing_template_decl 
13234       && building_stmt_tree () 
13235       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13236     current_eh_spec_try_block = expand_start_eh_spec ();
13237 }
13238
13239 /* Bind a name and initialization to the return value of
13240    the current function.  */
13241
13242 void
13243 store_return_init (decl)
13244      tree decl;
13245 {
13246   /* If this named return value comes in a register, put it in a
13247      pseudo-register.  */
13248   if (DECL_REGISTER (decl))
13249     {
13250       original_result_rtx = DECL_RTL (decl);
13251       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13252     }
13253 }
13254
13255 \f
13256 /* We have finished doing semantic analysis on DECL, but have not yet
13257    generated RTL for its body.  Save away our current state, so that
13258    when we want to generate RTL later we know what to do.  */
13259
13260 static void
13261 save_function_data (decl)
13262      tree decl;
13263 {
13264   struct language_function *f;
13265
13266   /* Save the language-specific per-function data so that we can
13267      get it back when we really expand this function.  */
13268   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13269                       19990908);
13270       
13271   /* Make a copy.  */
13272   f = ((struct language_function *) 
13273        xmalloc (sizeof (struct language_function)));
13274   bcopy ((char *) cp_function_chain, (char *) f,
13275          sizeof (struct language_function));
13276   DECL_SAVED_FUNCTION_DATA (decl) = f;
13277
13278   /* Clear out the bits we don't need.  */
13279   f->x_base_init_list = NULL_TREE;
13280   f->x_member_init_list = NULL_TREE;
13281   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13282   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13283   f->x_result_rtx = NULL_RTX;
13284   f->x_named_label_uses = NULL;
13285   f->bindings = NULL;
13286
13287   /* When we get back here again, we will be expanding.  */
13288   f->x_expanding_p = 1;
13289
13290   /* If we've already decided that we cannot inline this function, we
13291      must remember that fact when we actually go to expand the
13292      function.  */
13293   f->cannot_inline = current_function_cannot_inline;
13294 }
13295
13296 /* At the end of every constructor we generate to code to return
13297    `this'.  Do that now.  */
13298
13299 static void
13300 finish_constructor_body ()
13301 {
13302   /* Any return from a constructor will end up here.  */
13303   add_tree (build_min_nt (LABEL_STMT, ctor_label));
13304
13305   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13306      generate the return, rather than a goto to CTOR_LABEL.  */
13307   ctor_label = NULL_TREE;
13308   /* In check_return_expr we translate an empty return from a
13309      constructor to a return of `this'.  */
13310   finish_return_stmt (NULL_TREE);
13311 }
13312
13313 /* At the end of every destructor we generate code to restore virtual
13314    function tables to the values desired by base classes and to call
13315    to base class destructors.  Do that now.  */
13316
13317 static void
13318 finish_destructor_body ()
13319 {
13320   tree compound_stmt;
13321   tree in_charge;
13322   tree virtual_size;
13323   tree exprstmt;
13324
13325   /* Create a block to contain all the extra code.  */
13326   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13327
13328   /* Any return from a destructor will end up here.  */
13329   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13330
13331   /* Generate the code to call destructor on base class.  If this
13332      destructor belongs to a class with virtual functions, then set
13333      the virtual function table pointer to represent the type of our
13334      base class.  */
13335
13336   /* This side-effect makes call to `build_delete' generate the code
13337      we have to have at the end of this destructor.  `build_delete'
13338      will set the flag again.  */
13339   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13340
13341   /* These are two cases where we cannot delegate deletion.  */
13342   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13343       || TYPE_GETS_REG_DELETE (current_class_type))
13344     in_charge = integer_zero_node;
13345   else
13346     in_charge = current_in_charge_parm;
13347
13348   exprstmt = build_delete (current_class_type,
13349                            current_class_ref, 
13350                            in_charge,
13351                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 
13352                            0);
13353
13354   if (exprstmt != error_mark_node
13355       && (TREE_CODE (exprstmt) != NOP_EXPR
13356           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13357           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13358     {
13359       if (exprstmt != void_zero_node)
13360         /* Don't call `expand_expr_stmt' if we're not going to do
13361            anything, since -Wall will give a diagnostic.  */
13362         finish_expr_stmt (exprstmt);
13363
13364       /* Run destructors for all virtual baseclasses.  */
13365       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13366         {
13367           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13368           tree if_stmt = begin_if_stmt ();
13369           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13370                                       current_in_charge_parm, 
13371                                       integer_two_node),
13372                                if_stmt);
13373
13374           while (vbases)
13375             {
13376               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13377                 {
13378                   tree vb = get_vbase
13379                     (BINFO_TYPE (vbases),
13380                      TYPE_BINFO (current_class_type));
13381                   finish_expr_stmt
13382                     (build_scoped_method_call
13383                      (current_class_ref, vb, dtor_identifier,
13384                       build_expr_list (NULL_TREE, integer_zero_node)));
13385                 }
13386               vbases = TREE_CHAIN (vbases);
13387             }
13388
13389           finish_then_clause (if_stmt);
13390           finish_if_stmt ();
13391         }
13392     }
13393   
13394   virtual_size = c_sizeof (current_class_type);
13395
13396   /* At the end, call delete if that's what's requested.  */
13397   
13398   /* FDIS sez: At the point of definition of a virtual destructor
13399      (including an implicit definition), non-placement operator delete
13400      shall be looked up in the scope of the destructor's class and if
13401      found shall be accessible and unambiguous.
13402      
13403      This is somewhat unclear, but I take it to mean that if the class
13404      only defines placement deletes we don't do anything here.  So we
13405      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13406      they ever try to delete one of these.  */
13407   if (TYPE_GETS_REG_DELETE (current_class_type)
13408       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13409     {
13410       tree if_stmt;
13411
13412       exprstmt = build_op_delete_call
13413         (DELETE_EXPR, current_class_ptr, virtual_size,
13414          LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13415
13416       if_stmt = begin_if_stmt ();
13417       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13418                                   current_in_charge_parm,
13419                                   integer_one_node),
13420                            if_stmt);
13421       finish_expr_stmt (exprstmt);
13422       finish_then_clause (if_stmt);
13423       finish_if_stmt ();
13424     }
13425
13426   /* Close the block we started above.  */
13427   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13428 }
13429
13430 /* Finish up a function declaration and compile that function
13431    all the way to assembler language output.  The free the storage
13432    for the function definition.
13433
13434    This is called after parsing the body of the function definition.
13435    LINENO is the current line number.
13436
13437    FLAGS is a bitwise or of the following values: 
13438      1 - CALL_POPLEVEL 
13439        An extra call to poplevel (and expand_end_bindings) must be
13440        made to take care of the binding contour for the base
13441        initializers.  This is only relevant for constructors.
13442      2 - INCLASS_INLINE
13443        We just finished processing the body of an in-class inline
13444        function definition.  (This processing will have taken place
13445        after the class definition is complete.)  */
13446
13447 tree
13448 finish_function (lineno, flags)
13449      int lineno;
13450      int flags;
13451 {
13452   register tree fndecl = current_function_decl;
13453   tree fntype, ctype = NULL_TREE;
13454   /* Label to use if this function is supposed to return a value.  */
13455   tree no_return_label = NULL_TREE;
13456   int call_poplevel = (flags & 1) != 0;
13457   int inclass_inline = (flags & 2) != 0;
13458   int expand_p;
13459   int nested;
13460
13461   /* When we get some parse errors, we can end up without a
13462      current_function_decl, so cope.  */
13463   if (fndecl == NULL_TREE)
13464     return error_mark_node;
13465
13466   nested = function_depth > 1;
13467   fntype = TREE_TYPE (fndecl);
13468
13469   /*  TREE_READONLY (fndecl) = 1;
13470       This caused &foo to be of type ptr-to-const-function
13471       which then got a warning when stored in a ptr-to-function variable.  */
13472
13473   /* This happens on strange parse errors.  */
13474   if (! current_function_parms_stored)
13475     {
13476       call_poplevel = 0;
13477       store_parm_decls ();
13478     }
13479
13480   if (building_stmt_tree ())
13481     {
13482       if (DECL_CONSTRUCTOR_P (fndecl))
13483         {
13484           finish_constructor_body ();
13485           if (call_poplevel)
13486             do_poplevel ();
13487         }
13488       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13489         finish_destructor_body ();
13490       else if (DECL_MAIN_P (fndecl))
13491         {
13492           /* Make it so that `main' always returns 0 by default.  */
13493 #ifdef VMS
13494           finish_return_stmt (integer_one_node);
13495 #else
13496           finish_return_stmt (integer_zero_node);
13497 #endif
13498         }
13499
13500       /* Finish dealing with exception specifiers.  */
13501       if (flag_exceptions && !processing_template_decl
13502           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13503         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS 
13504                             (TREE_TYPE (current_function_decl)),
13505                             current_eh_spec_try_block);
13506     }
13507   else
13508     {
13509       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13510         {
13511           tree ttype = target_type (fntype);
13512           tree parmdecl;
13513
13514           if (IS_AGGR_TYPE (ttype))
13515             /* Let debugger know it should output info for this type.  */
13516             note_debug_info_needed (ttype);
13517
13518           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13519             {
13520               ttype = target_type (TREE_TYPE (parmdecl));
13521               if (IS_AGGR_TYPE (ttype))
13522                 /* Let debugger know it should output info for this type.  */
13523                 note_debug_info_needed (ttype);
13524             }
13525         }
13526
13527       /* Clean house because we will need to reorder insns here.  */
13528       do_pending_stack_adjust ();
13529
13530       if (dtor_label)
13531         ;
13532       else if (DECL_CONSTRUCTOR_P (fndecl))
13533         {
13534           /* All subobjects have been fully constructed at this point.  */
13535           end_protect_partials ();
13536
13537           if (call_poplevel)
13538             do_poplevel ();
13539         }
13540       else if (return_label != NULL_RTX
13541                && flag_this_is_variable <= 0
13542                && current_function_return_value == NULL_TREE
13543                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13544         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13545
13546       if (flag_exceptions)
13547         expand_exception_blocks ();
13548
13549       /* If this function is supposed to return a value, ensure that
13550          we do not fall into the cleanups by mistake.  The end of our
13551          function will look like this:
13552          
13553          user code (may have return stmt somewhere)
13554          goto no_return_label
13555          cleanup_label:
13556          cleanups
13557          goto return_label
13558          no_return_label:
13559          NOTE_INSN_FUNCTION_END
13560          return_label:
13561          things for return
13562          
13563          If the user omits a return stmt in the USER CODE section, we
13564          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13565          Otherwise, we won't.  */
13566       if (no_return_label)
13567         {
13568           DECL_CONTEXT (no_return_label) = fndecl;
13569           DECL_INITIAL (no_return_label) = error_mark_node;
13570           DECL_SOURCE_FILE (no_return_label) = input_filename;
13571           DECL_SOURCE_LINE (no_return_label) = lineno;
13572           expand_goto (no_return_label);
13573         }
13574
13575       if (cleanup_label)
13576         {
13577           /* Remove the binding contour which is used
13578              to catch cleanup-generated temporaries.  */
13579           expand_end_bindings (0, 0, 0);
13580           poplevel (0, 0, 0);
13581
13582           /* Emit label at beginning of cleanup code for parameters.  */
13583           emit_label (cleanup_label);
13584         }
13585
13586       /* Get return value into register if that's where it's supposed
13587          to be.  */
13588       if (original_result_rtx)
13589         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13590
13591       /* Finish building code that will trigger warnings if users forget
13592          to make their functions return values.  */
13593       if (no_return_label || cleanup_label)
13594         emit_jump (return_label);
13595       if (no_return_label)
13596         {
13597           /* We don't need to call `expand_*_return' here because we
13598              don't need any cleanups here--this path of code is only
13599              for error checking purposes.  */
13600           expand_label (no_return_label);
13601         }
13602
13603       /* We hard-wired immediate_size_expand to zero in
13604          start_function.  Expand_function_end will decrement this
13605          variable.  So, we set the variable to one here, so that after
13606          the decrement it will remain zero.  */
13607       immediate_size_expand = 1;
13608
13609       /* Generate rtl for function exit.  */
13610       expand_function_end (input_filename, lineno, 1);
13611     }
13612
13613   /* We have to save this value here in case
13614      maybe_end_member_template_processing decides to pop all the
13615      template parameters.  */
13616   expand_p = !building_stmt_tree ();
13617   
13618   /* If we're saving up tree structure, tie off the function now.  */
13619   if (!expand_p)
13620     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
13621
13622   /* This must come after expand_function_end because cleanups might
13623      have declarations (from inline functions) that need to go into
13624      this function's blocks.  */
13625   if (doing_semantic_analysis_p ())
13626     {
13627       if (current_binding_level->parm_flag != 1)
13628         my_friendly_abort (122);
13629       poplevel (1, 0, 1);
13630     }
13631
13632   /* Remember that we were in class scope.  */
13633   if (current_class_name)
13634     ctype = current_class_type;
13635
13636   /* Must mark the RESULT_DECL as being in this function.  */
13637   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13638
13639   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13640      to the FUNCTION_DECL node itself.  */
13641   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13642
13643   /* Save away current state, if appropriate.  */
13644   if (!expanding_p && !processing_template_decl)
13645     save_function_data (fndecl);
13646
13647   if (expand_p)
13648     {
13649       int returns_null;
13650       int returns_value;
13651       int saved_flag_keep_inline_functions =
13652         flag_keep_inline_functions;
13653
13654       /* So we can tell if jump_optimize sets it to 1.  */
13655       can_reach_end = 0;
13656
13657       if (DECL_CONTEXT (fndecl) != NULL_TREE
13658           && hack_decl_function_context (fndecl))
13659         /* Trick rest_of_compilation into not deferring output of this
13660            function, even if it is inline, since the rtl_obstack for
13661            this function is the function_obstack of the enclosing
13662            function and will be deallocated when the enclosing
13663            function is gone.  See save_tree_status.  */
13664         flag_keep_inline_functions = 1;
13665
13666       /* Before we call rest_of_compilation (which will pop the
13667          CURRENT_FUNCTION), we must save these values.  */
13668       returns_null = current_function_returns_null;
13669       returns_value = current_function_returns_value;
13670
13671       /* If this is a nested function (like a template instantiation
13672          that we're compiling in the midst of compiling something
13673          else), push a new GC context.  That will keep local variables
13674          on the stack from being collected while we're doing the
13675          compilation of this function.  */
13676       if (function_depth > 1)
13677         ggc_push_context ();
13678
13679       /* Run the optimizers and output the assembler code for this
13680          function.  */
13681       if (DECL_ARTIFICIAL (fndecl))
13682         {
13683           /* Do we really *want* to inline this synthesized method?  */
13684
13685           int save_fif = flag_inline_functions;
13686           flag_inline_functions = 1;
13687
13688           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13689              will check our size.  */
13690           DECL_INLINE (fndecl) = 0;
13691
13692           rest_of_compilation (fndecl);
13693           flag_inline_functions = save_fif;
13694         }
13695       else
13696         rest_of_compilation (fndecl);
13697
13698       /* Undo the call to ggc_push_context above.  */
13699       if (function_depth > 1)
13700         ggc_pop_context ();
13701
13702       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13703
13704       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13705         {
13706           /* Set DECL_EXTERNAL so that assemble_external will be called as
13707              necessary.  We'll clear it again in finish_file.  */
13708           if (! DECL_EXTERNAL (fndecl))
13709             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13710           DECL_EXTERNAL (fndecl) = 1;
13711           mark_inline_for_output (fndecl);
13712         }
13713
13714       if (ctype && TREE_ASM_WRITTEN (fndecl))
13715         note_debug_info_needed (ctype);
13716
13717       returns_null |= can_reach_end;
13718
13719       /* Since we don't normally go through c_expand_return for constructors,
13720          this normally gets the wrong value.
13721          Also, named return values have their return codes emitted after
13722          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13723       if (DECL_CONSTRUCTOR_P (fndecl)
13724           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13725         returns_null = 0;
13726
13727       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13728         cp_warning ("`noreturn' function `%D' does return", fndecl);
13729       else if ((warn_return_type || pedantic)
13730                && returns_null
13731                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13732         {
13733           /* If this function returns non-void and control can drop through,
13734              complain.  */
13735           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13736         }
13737       /* With just -W, complain only if function returns both with
13738          and without a value.  */
13739       else if (extra_warnings && returns_value && returns_null)
13740         warning ("this function may return with or without a value");
13741     }
13742   else
13743     {
13744       /* Clear out memory we no longer need.  */
13745       free_after_parsing (current_function);
13746       /* Since we never call rest_of_compilation, we never clear
13747          CURRENT_FUNCTION.  Do so explicitly.  */
13748       free_after_compilation (current_function);
13749       current_function = NULL;
13750     }
13751
13752   /* If this is a in-class inline definition, we may have to pop the
13753      bindings for the template parameters that we added in
13754      maybe_begin_member_template_processing when start_function was
13755      called.  */
13756   if (inclass_inline)
13757     maybe_end_member_template_processing ();
13758
13759   /* Leave the scope of the class.  */
13760   if (ctype)
13761     pop_nested_class ();
13762
13763   --function_depth;
13764
13765   /* Free all the tree nodes making up this function.  */
13766   /* Switch back to allocating nodes permanently
13767      until we start another function.  */
13768   if (! nested)
13769     permanent_allocation (1);
13770
13771   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13772     {
13773       tree t;
13774
13775       /* Stop pointing to the local nodes about to be freed.  */
13776       /* But DECL_INITIAL must remain nonzero so we know this
13777          was an actual function definition.  */
13778       DECL_INITIAL (fndecl) = error_mark_node;
13779       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13780         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13781     }
13782
13783   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13784     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13785   if (DECL_STATIC_DESTRUCTOR (fndecl))
13786     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13787
13788   /* Clean up.  */
13789   if (! nested)
13790     {
13791       /* Let the error reporting routines know that we're outside a
13792          function.  For a nested function, this value is used in
13793          pop_cp_function_context and then reset via pop_function_context.  */
13794       current_function_decl = NULL_TREE;
13795     }
13796
13797   return fndecl;
13798 }
13799 \f
13800 /* Create the FUNCTION_DECL for a function definition.
13801    DECLSPECS and DECLARATOR are the parts of the declaration;
13802    they describe the return type and the name of the function,
13803    but twisted together in a fashion that parallels the syntax of C.
13804
13805    This function creates a binding context for the function body
13806    as well as setting up the FUNCTION_DECL in current_function_decl.
13807
13808    Returns a FUNCTION_DECL on success.
13809
13810    If the DECLARATOR is not suitable for a function (it defines a datum
13811    instead), we return 0, which tells yyparse to report a parse error.
13812
13813    May return void_type_node indicating that this method is actually
13814    a friend.  See grokfield for more details.
13815
13816    Came here with a `.pushlevel' .
13817
13818    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13819    CHANGES TO CODE IN `grokfield'.  */
13820
13821 tree
13822 start_method (declspecs, declarator, attrlist)
13823      tree declarator, declspecs, attrlist;
13824 {
13825   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13826                                 attrlist);
13827
13828   /* Something too ugly to handle.  */
13829   if (fndecl == NULL_TREE)
13830     return NULL_TREE;
13831
13832   /* Pass friends other than inline friend functions back.  */
13833   if (fndecl == void_type_node)
13834     return fndecl;
13835
13836   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13837     /* Not a function, tell parser to report parse error.  */
13838     return NULL_TREE;
13839
13840   if (DECL_IN_AGGR_P (fndecl))
13841     {
13842       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13843         {
13844           if (DECL_CONTEXT (fndecl) 
13845               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13846             cp_error ("`%D' is already defined in class %s", fndecl,
13847                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13848         }
13849       return void_type_node;
13850     }
13851
13852   check_template_shadow (fndecl);
13853
13854   DECL_THIS_INLINE (fndecl) = 1;
13855
13856   if (flag_default_inline)
13857     DECL_INLINE (fndecl) = 1;
13858
13859   /* We process method specializations in finish_struct_1.  */
13860   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13861     fndecl = push_template_decl (fndecl);
13862
13863   /* We read in the parameters on the maybepermanent_obstack,
13864      but we won't be getting back to them until after we
13865      may have clobbered them.  So the call to preserve_data
13866      will keep them safe.  */
13867   preserve_data ();
13868
13869   if (! DECL_FRIEND_P (fndecl))
13870     {
13871       if (TREE_CHAIN (fndecl))
13872         {
13873           fndecl = copy_node (fndecl);
13874           TREE_CHAIN (fndecl) = NULL_TREE;
13875         }
13876
13877       if (DECL_CONSTRUCTOR_P (fndecl))
13878         {
13879           if (! grok_ctor_properties (current_class_type, fndecl))
13880             return void_type_node;
13881         }
13882       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13883         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13884     }
13885
13886   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13887
13888   /* Make a place for the parms */
13889   pushlevel (0);
13890   current_binding_level->parm_flag = 1;
13891   
13892   DECL_IN_AGGR_P (fndecl) = 1;
13893   return fndecl;
13894 }
13895
13896 /* Go through the motions of finishing a function definition.
13897    We don't compile this method until after the whole class has
13898    been processed.
13899
13900    FINISH_METHOD must return something that looks as though it
13901    came from GROKFIELD (since we are defining a method, after all).
13902
13903    This is called after parsing the body of the function definition.
13904    STMTS is the chain of statements that makes up the function body.
13905
13906    DECL is the ..._DECL that `start_method' provided.  */
13907
13908 tree
13909 finish_method (decl)
13910      tree decl;
13911 {
13912   register tree fndecl = decl;
13913   tree old_initial;
13914
13915   register tree link;
13916
13917   if (decl == void_type_node)
13918     return decl;
13919
13920   old_initial = DECL_INITIAL (fndecl);
13921
13922   /* Undo the level for the parms (from start_method).
13923      This is like poplevel, but it causes nothing to be
13924      saved.  Saving information here confuses symbol-table
13925      output routines.  Besides, this information will
13926      be correctly output when this method is actually
13927      compiled.  */
13928
13929   /* Clear out the meanings of the local variables of this level;
13930      also record in each decl which block it belongs to.  */
13931
13932   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13933     {
13934       if (DECL_NAME (link) != NULL_TREE)
13935         pop_binding (DECL_NAME (link), link);
13936       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13937       DECL_CONTEXT (link) = NULL_TREE;
13938     }
13939
13940   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13941                       (HOST_WIDE_INT) current_binding_level->level_chain,
13942                       current_binding_level->parm_flag,
13943                       current_binding_level->keep);
13944
13945   poplevel (0, 0, 0);
13946
13947   DECL_INITIAL (fndecl) = old_initial;
13948
13949   /* We used to check if the context of FNDECL was different from
13950      current_class_type as another way to get inside here.  This didn't work
13951      for String.cc in libg++.  */
13952   if (DECL_FRIEND_P (fndecl))
13953     {
13954       CLASSTYPE_INLINE_FRIENDS (current_class_type)
13955         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13956       decl = void_type_node;
13957     }
13958
13959   return decl;
13960 }
13961 \f
13962 /* Called when a new struct TYPE is defined.
13963    If this structure or union completes the type of any previous
13964    variable declaration, lay it out and output its rtl.  */
13965
13966 void
13967 hack_incomplete_structures (type)
13968      tree type;
13969 {
13970   tree *list;
13971
13972   if (current_binding_level->incomplete == NULL_TREE)
13973     return;
13974
13975   if (!type) /* Don't do this for class templates.  */
13976     return;
13977
13978   for (list = &current_binding_level->incomplete; *list; )
13979     {
13980       tree decl = TREE_VALUE (*list);
13981       if ((decl && TREE_TYPE (decl) == type)
13982           || (TREE_TYPE (decl)
13983               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
13984               && TREE_TYPE (TREE_TYPE (decl)) == type))
13985         {
13986           int toplevel = toplevel_bindings_p ();
13987           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
13988               && TREE_TYPE (TREE_TYPE (decl)) == type)
13989             layout_type (TREE_TYPE (decl));
13990           layout_decl (decl, 0);
13991           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
13992           if (! toplevel)
13993             {
13994               tree cleanup;
13995               expand_decl (decl);
13996               cleanup = maybe_build_cleanup (decl);
13997               expand_decl_init (decl);
13998               if (! expand_decl_cleanup (decl, cleanup))
13999                 cp_error ("parser lost in parsing declaration of `%D'",
14000                           decl);
14001             }
14002           *list = TREE_CHAIN (*list);
14003         }
14004       else
14005         list = &TREE_CHAIN (*list);
14006     }
14007 }
14008
14009 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14010    See build_delete for information about AUTO_DELETE.
14011
14012    Don't build these on the momentary obstack; they must live
14013    the life of the binding contour.  */
14014
14015 static tree
14016 maybe_build_cleanup_1 (decl, auto_delete)
14017      tree decl, auto_delete;
14018 {
14019   tree type = TREE_TYPE (decl);
14020   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14021     {
14022       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14023       tree rval;
14024
14025       if (TREE_CODE (type) == ARRAY_TYPE)
14026         rval = decl;
14027       else
14028         {
14029           mark_addressable (decl);
14030           rval = build_unary_op (ADDR_EXPR, decl, 0);
14031         }
14032
14033       /* Optimize for space over speed here.  */
14034       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14035           || flag_expensive_optimizations)
14036         flags |= LOOKUP_NONVIRTUAL;
14037
14038       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14039
14040       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14041           && ! TYPE_HAS_DESTRUCTOR (type))
14042         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14043                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14044
14045       return rval;
14046     }
14047   return 0;
14048 }
14049
14050 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
14051
14052 tree
14053 build_target_expr (decl, value)
14054      tree decl;
14055      tree value;
14056 {
14057   tree t;
14058
14059   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
14060              maybe_build_cleanup (decl), NULL_TREE);
14061   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14062      ignore the TARGET_EXPR.  If there really turn out to be no
14063      side-effects, then the optimizer should be able to get rid of
14064      whatever code is generated anyhow.  */
14065   TREE_SIDE_EFFECTS (t) = 1;
14066
14067   return t;
14068 }
14069
14070 /* If DECL is of a type which needs a cleanup, build that cleanup
14071    here.  The cleanup does free the storage with a call to delete.  */
14072
14073 tree
14074 maybe_build_cleanup_and_delete (decl)
14075      tree decl;
14076 {
14077   return maybe_build_cleanup_1 (decl, integer_three_node);
14078 }
14079
14080 /* If DECL is of a type which needs a cleanup, build that cleanup
14081    here.  The cleanup does not free the storage with a call a delete.  */
14082
14083 tree
14084 maybe_build_cleanup (decl)
14085      tree decl;
14086 {
14087   return maybe_build_cleanup_1 (decl, integer_two_node);
14088 }
14089 \f
14090 /* Expand a C++ expression at the statement level.
14091    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14092    The C++ type checker should get all of these out when
14093    expressions are combined with other, type-providing, expressions,
14094    leaving only orphan expressions, such as:
14095
14096    &class::bar;         / / takes its address, but does nothing with it.  */
14097
14098 void
14099 cplus_expand_expr_stmt (exp)
14100      tree exp;
14101 {
14102   if (stmts_are_full_exprs_p)
14103     exp = convert_to_void (exp, "statement");
14104   
14105 #if 0
14106   /* We should do this eventually, but right now this causes regex.o from
14107      libg++ to miscompile, and tString to core dump.  */
14108   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14109 #endif
14110
14111   /* If we don't do this, we end up down inside expand_expr
14112      trying to do TYPE_MODE on the ERROR_MARK, and really
14113      go outside the bounds of the type.  */
14114   if (exp != error_mark_node)
14115     expand_expr_stmt (break_out_cleanups (exp));
14116 }
14117
14118 /* When a stmt has been parsed, this function is called.  */
14119
14120 void
14121 finish_stmt ()
14122 {
14123   /* Always assume this statement was not an expression statement.  If
14124      it actually was an expression statement, its our callers
14125      responsibility to fix this up.  */
14126   last_expr_type = NULL_TREE;
14127 }
14128
14129 /* Change a static member function definition into a FUNCTION_TYPE, instead
14130    of the METHOD_TYPE that we create when it's originally parsed.
14131
14132    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14133    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14134    other decls.  Either pass the addresses of local variables or NULL.  */
14135
14136 void
14137 revert_static_member_fn (decl, fn, argtypes)
14138      tree *decl, *fn, *argtypes;
14139 {
14140   tree tmp;
14141   tree function = fn ? *fn : TREE_TYPE (*decl);
14142   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14143
14144   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14145       != TYPE_UNQUALIFIED)
14146     cp_error ("static member function `%#D' declared with type qualifiers", 
14147               *decl);
14148
14149   args = TREE_CHAIN (args);
14150   tmp = build_function_type (TREE_TYPE (function), args);
14151   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14152   tmp = build_exception_variant (tmp,
14153                                  TYPE_RAISES_EXCEPTIONS (function));
14154   TREE_TYPE (*decl) = tmp;
14155   if (DECL_ARGUMENTS (*decl))
14156     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14157   DECL_STATIC_FUNCTION_P (*decl) = 1;
14158   if (fn)
14159     *fn = tmp;
14160   if (argtypes)
14161     *argtypes = args;
14162 }
14163
14164 /* Initialize the variables used during compilation of a C++ 
14165    function.  */ 
14166
14167 static void
14168 push_cp_function_context (f)
14169      struct function *f;
14170 {
14171   struct language_function *p 
14172     = ((struct language_function *) 
14173        xcalloc (1, sizeof (struct language_function)));
14174   f->language = p;
14175
14176   /* It takes an explicit call to expand_body to generate RTL for a
14177      function.  */
14178   expanding_p = 0;
14179
14180   /* Whenever we start a new function, we destroy temporaries in the
14181      usual way.  */
14182   stmts_are_full_exprs_p = 1;
14183 }
14184
14185 /* Free the language-specific parts of F, now that we've finished
14186    compiling the function.  */
14187
14188 static void
14189 pop_cp_function_context (f)
14190      struct function *f;
14191 {
14192   if (f->language)
14193     free (f->language);
14194   f->language = 0;
14195 }
14196
14197 /* Mark P for GC.  */
14198
14199 static void
14200 mark_lang_function (p)
14201      struct language_function *p;
14202 {
14203   if (!p)
14204     return;
14205
14206   ggc_mark_tree (p->x_named_labels);
14207   ggc_mark_tree (p->x_ctor_label);
14208   ggc_mark_tree (p->x_dtor_label);
14209   ggc_mark_tree (p->x_base_init_list);
14210   ggc_mark_tree (p->x_member_init_list);
14211   ggc_mark_tree (p->x_current_class_ptr);
14212   ggc_mark_tree (p->x_current_class_ref);
14213   ggc_mark_tree (p->x_eh_spec_try_block);
14214   ggc_mark_tree (p->x_scope_stmt_stack);
14215
14216   ggc_mark_rtx (p->x_result_rtx);
14217
14218   mark_stmt_tree (&p->x_stmt_tree);
14219   mark_binding_level (&p->bindings);
14220 }
14221
14222 /* Mark the language-specific data in F for GC.  */
14223
14224 void
14225 mark_cp_function_context (f)
14226      struct function *f;
14227 {
14228   mark_lang_function (f->language);
14229 }
14230
14231 int
14232 in_function_p ()
14233 {
14234   return function_depth != 0;
14235 }
14236
14237
14238 void
14239 lang_mark_false_label_stack (l)
14240      struct label_node *l;
14241 {
14242   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14243   my_friendly_assert (l == NULL, 19990904);
14244 }
14245
14246 void
14247 lang_mark_tree (t)
14248      tree t;
14249 {
14250   enum tree_code code = TREE_CODE (t);
14251   if (code == IDENTIFIER_NODE)
14252     {
14253       struct lang_identifier *li = (struct lang_identifier *) t;
14254       struct lang_id2 *li2 = li->x;
14255       ggc_mark_tree (li->namespace_bindings);
14256       ggc_mark_tree (li->bindings);
14257       ggc_mark_tree (li->class_value);
14258       ggc_mark_tree (li->class_template_info);
14259
14260       if (li2)
14261         {
14262           ggc_mark_tree (li2->label_value);
14263           ggc_mark_tree (li2->implicit_decl);
14264           ggc_mark_tree (li2->error_locus);
14265         }
14266     }
14267   else if (code == CPLUS_BINDING)
14268     {
14269       if (BINDING_HAS_LEVEL_P (t))
14270         mark_binding_level (&BINDING_LEVEL (t));
14271       else
14272         ggc_mark_tree (BINDING_SCOPE (t));
14273       ggc_mark_tree (BINDING_VALUE (t));
14274     }
14275   else if (code == OVERLOAD)
14276     ggc_mark_tree (OVL_FUNCTION (t));
14277   else if (code == TEMPLATE_PARM_INDEX)
14278     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14279   else if (TREE_CODE_CLASS (code) == 'd')
14280     {
14281       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14282
14283       if (ld)
14284         {
14285           ggc_mark (ld);
14286           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14287             ggc_mark_tree (ld->decl_flags.u2.access);
14288           ggc_mark_tree (ld->decl_flags.context);
14289           if (TREE_CODE (t) != NAMESPACE_DECL)
14290             ggc_mark_tree (ld->decl_flags.u.template_info);
14291           else
14292             mark_binding_level (&NAMESPACE_LEVEL (t));
14293           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14294             {
14295               ggc_mark_tree (ld->main_decl_variant);
14296               ggc_mark_tree (ld->befriending_classes);
14297               ggc_mark_tree (ld->saved_tree);
14298               if (TREE_CODE (t) == TYPE_DECL)
14299                 ggc_mark_tree (ld->u.sorted_fields);
14300               else if (TREE_CODE (t) == FUNCTION_DECL
14301                        && !DECL_PENDING_INLINE_P (t))
14302                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14303             }
14304         }
14305     }
14306   else if (TREE_CODE_CLASS (code) == 't')
14307     {
14308       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14309
14310       if (lt && !(TREE_CODE (t) == POINTER_TYPE 
14311                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14312         {
14313           ggc_mark (lt);
14314           ggc_mark_tree (lt->vfields);
14315           ggc_mark_tree (lt->vbases);
14316           ggc_mark_tree (lt->tags);
14317           ggc_mark_tree (lt->search_slot);
14318           ggc_mark_tree (lt->size);
14319           ggc_mark_tree (lt->abstract_virtuals);
14320           ggc_mark_tree (lt->friend_classes);
14321           ggc_mark_tree (lt->rtti);
14322           ggc_mark_tree (lt->methods);
14323           ggc_mark_tree (lt->template_info);
14324           ggc_mark_tree (lt->befriending_classes);
14325         }
14326       else if (lt)
14327         /* In the case of pointer-to-member function types, the
14328            TYPE_LANG_SPECIFIC is really just a tree.  */
14329         ggc_mark_tree ((tree) lt);
14330     }
14331 }
14332