OSDN Git Service

00043d67b911ee0035881e8ca7c72393edfb1134
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 92-98, 1999 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* Process declarations and symbol lookup for C front end.
24    Also constructs types; the standard scalar types at initialization,
25    and structure, union, array and enum types when they are declared.  */
26
27 /* ??? not all decl nodes are given the most useful possible
28    line numbers.  For example, the CONST_DECLs for enum values.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "tree.h"
33 #include "rtl.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "lex.h"
38 #include <signal.h>
39 #include "obstack.h"
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46 #include "ggc.h"
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50
51 extern struct obstack permanent_obstack;
52 extern struct obstack* saveable_obstack;
53
54 extern int current_class_depth;
55
56 extern tree static_ctors, static_dtors;
57
58 extern tree global_namespace;
59
60 extern int (*valid_lang_attribute) PROTO ((tree, tree, tree, tree));
61
62 /* Use garbage collection.  */
63
64 int ggc_p = 1;
65
66 #ifndef WCHAR_UNSIGNED
67 #define WCHAR_UNSIGNED 0
68 #endif
69
70 #ifndef CHAR_TYPE_SIZE
71 #define CHAR_TYPE_SIZE BITS_PER_UNIT
72 #endif
73
74 #ifndef BOOL_TYPE_SIZE
75 #ifdef SLOW_BYTE_ACCESS
76 #define BOOL_TYPE_SIZE ((SLOW_BYTE_ACCESS) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
77 #else
78 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
79 #endif
80 #endif
81
82 /* We let tm.h override the types used here, to handle trivial differences
83    such as the choice of unsigned int or long unsigned int for size_t.
84    When machines start needing nontrivial differences in the size type,
85    it would be best to do something here to figure out automatically
86    from other information what type to use.  */
87
88 #ifndef SIZE_TYPE
89 #define SIZE_TYPE "long unsigned int"
90 #endif
91
92 #ifndef PTRDIFF_TYPE
93 #define PTRDIFF_TYPE "long int"
94 #endif
95
96 #ifndef WCHAR_TYPE
97 #define WCHAR_TYPE "int"
98 #endif
99
100 static tree grokparms                           PROTO((tree, int));
101 static const char *redeclaration_error_message  PROTO((tree, tree));
102
103 static void push_binding_level PROTO((struct binding_level *, int,
104                                       int));
105 static void pop_binding_level PROTO((void));
106 static void suspend_binding_level PROTO((void));
107 static void resume_binding_level PROTO((struct binding_level *));
108 static struct binding_level *make_binding_level PROTO((void));
109 static void declare_namespace_level PROTO((void));
110 static void signal_catch PROTO((int)) ATTRIBUTE_NORETURN;
111 static void storedecls PROTO((tree));
112 static void require_complete_types_for_parms PROTO((tree));
113 static void push_overloaded_decl_1 PROTO((tree));
114 static int ambi_op_p PROTO((tree));
115 static int unary_op_p PROTO((tree));
116 static tree store_bindings PROTO((tree, tree));
117 static tree lookup_tag_reverse PROTO((tree, tree));
118 static tree obscure_complex_init PROTO((tree, tree));
119 static tree maybe_build_cleanup_1 PROTO((tree, tree));
120 static tree lookup_name_real PROTO((tree, int, int, int));
121 static void warn_extern_redeclared_static PROTO((tree, tree));
122 static void grok_reference_init PROTO((tree, tree, tree));
123 static tree grokfndecl PROTO((tree, tree, tree, tree, int,
124                               enum overload_flags, tree,
125                               tree, int, int, int, int, int, int, tree));
126 static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int, tree));
127 static tree lookup_tag PROTO((enum tree_code, tree,
128                               struct binding_level *, int));
129 static void set_identifier_type_value_with_scope
130         PROTO((tree, tree, struct binding_level *));
131 static void record_builtin_type PROTO((enum rid, const char *, tree));
132 static void record_unknown_type PROTO((tree, const char *));
133 static int member_function_or_else PROTO((tree, tree, const char *));
134 static void bad_specifiers PROTO((tree, const char *, int, int, int, int,
135                                   int));
136 static void lang_print_error_function PROTO((const char *));
137 static tree maybe_process_template_type_declaration PROTO((tree, int, struct binding_level*));
138 static void check_for_uninitialized_const_var PROTO((tree));
139 static unsigned long typename_hash PROTO((hash_table_key));
140 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
141 static void push_binding PROTO((tree, tree, struct binding_level*));
142 static int add_binding PROTO((tree, tree));
143 static void pop_binding PROTO((tree, tree));
144 static tree local_variable_p PROTO((tree *));
145 static tree find_binding PROTO((tree, tree));
146 static tree select_decl PROTO((tree, int));
147 static int lookup_flags PROTO((int, int));
148 static tree qualify_lookup PROTO((tree, int));
149 static tree record_builtin_java_type PROTO((const char *, int));
150 static const char *tag_name PROTO((enum tag_types code));
151 static void find_class_binding_level PROTO((void));
152 static struct binding_level *innermost_nonclass_level PROTO((void));
153 static void warn_about_implicit_typename_lookup PROTO((tree, tree));
154 static int walk_namespaces_r PROTO((tree, walk_namespaces_fn, void *));
155 static int walk_globals_r PROTO((tree, void *));
156 static void add_decl_to_level PROTO((tree, struct binding_level *));
157 static tree make_label_decl PROTO((tree, int));
158 static void pop_label PROTO((tree));
159 static void pop_labels PROTO((tree));
160 static void maybe_deduce_size_from_array_init PROTO((tree, tree));
161 static void layout_var_decl PROTO((tree));
162 static void maybe_commonize_var PROTO((tree));
163 static tree check_initializer PROTO((tree, tree));
164 static void make_rtl_for_nonlocal_decl PROTO((tree, tree, const char *));
165 static void push_cp_function_context PROTO((struct function *));
166 static void pop_cp_function_context PROTO((struct function *));
167 static void mark_binding_level PROTO((void *));
168 static void mark_cp_function_context PROTO((struct function *));
169 static void mark_saved_scope PROTO((void *));
170 static void mark_lang_function PROTO((struct language_function *));
171 static void save_function_data PROTO((tree));
172 static void check_function_type PROTO((tree));
173 static void destroy_local_static PROTO((tree));
174 static void destroy_local_var PROTO((tree));
175 static void finish_constructor_body PROTO((void));
176 static void finish_destructor_body PROTO((void));
177
178 #if defined (DEBUG_CP_BINDING_LEVELS)
179 static void indent PROTO((void));
180 #endif
181
182 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
183 tree error_mark_list;
184
185 /* The following symbols are subsumed in the cp_global_trees array, and
186    listed here individually for documentation purposes. 
187
188    C++ extensions
189         tree wchar_decl_node;
190         tree void_zero_node;
191
192         tree vtable_entry_type;
193         tree delta_type_node;
194 #if 0
195    Old rtti stuff.
196         tree __baselist_desc_type_node;
197         tree __i_desc_type_node, __m_desc_type_node;
198         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
199 #endif
200         tree __t_desc_type_node;
201 #if 0
202         tree __tp_desc_type_node;
203 #endif
204         tree __access_mode_type_node;
205         tree __bltn_desc_type_node, __user_desc_type_node, __class_desc_type_node;
206         tree __ptr_desc_type_node, __attr_desc_type_node, __func_desc_type_node;
207         tree __ptmf_desc_type_node, __ptmd_desc_type_node;
208 #if 0
209    Not needed yet?  May be needed one day?
210         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
211         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
212         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
213 #endif
214
215         tree class_star_type_node;
216         tree class_type_node, record_type_node, union_type_node, enum_type_node;
217         tree unknown_type_node;
218
219    Array type `vtable_entry_type[]'
220
221         tree vtbl_type_node;
222         tree vtbl_ptr_type_node;
223
224    Nnamespace std
225
226         tree std_node;
227
228    A FUNCTION_DECL which can call `abort'.  Not necessarily the
229    one that the user will declare, but sufficient to be called
230    by routines that want to abort the program.
231
232         tree abort_fndecl;
233
234    The FUNCTION_DECL for the default `::operator delete'.
235
236         tree global_delete_fndecl;
237
238    Used by RTTI
239         tree type_info_type_node, tinfo_fn_id, tinfo_fn_type;
240
241 */
242
243 tree cp_global_trees[CPTI_MAX];
244
245 /* Indicates that there is a type value in some namespace, although
246    that is not necessarily in scope at the moment.  */
247
248 static tree global_type_node;
249
250 /* Namespace std.  */
251 int in_std;
252
253 /* Expect only namespace names now. */
254 static int only_namespace_names;
255
256 /* In a destructor, the last insn emitted after the start of the
257    function and the parms.  */
258
259 #define last_dtor_insn cp_function_chain->x_last_dtor_insn
260
261 /* In a constructor, the last insn emitted after the start of the
262    function and the parms, the exception specification and any
263    function-try-block.  The constructor initializers are emitted after
264    this insn.  */
265
266 #define last_parm_cleanup_insn cp_function_chain->x_last_parm_cleanup_insn
267
268 /* If original DECL_RESULT of current function was a register,
269    but due to being an addressable named return value, would up
270    on the stack, this variable holds the named return value's
271    original location.  */
272
273 #define original_result_rtx cp_function_chain->x_result_rtx
274
275 struct named_label_list
276 {
277   struct binding_level *binding_level;
278   tree names_in_scope;
279   tree label_decl;
280   const char *filename_o_goto;
281   int lineno_o_goto;
282   struct named_label_list *next;
283 };
284
285 /* Used only for jumps to as-yet undefined labels, since jumps to
286    defined labels can have their validity checked by stmt.c.  */
287
288 #define named_label_uses cp_function_chain->x_named_label_uses
289
290 /* A list of objects which have constructors or destructors
291    which reside in the global scope.  The decl is stored in
292    the TREE_VALUE slot and the initializer is stored
293    in the TREE_PURPOSE slot.  */
294 tree static_aggregates;
295
296 /* -- end of C++ */
297
298 /* A node for the integer constants 2, and 3.  */
299
300 tree integer_two_node, integer_three_node;
301
302 /* While defining an enum type, this is 1 plus the last enumerator
303    constant value.  */
304
305 static tree enum_next_value;
306
307 /* Nonzero means that there was overflow computing enum_next_value.  */
308
309 static int enum_overflow;
310
311 /* Parsing a function declarator leaves here a chain of structure
312    and enum types declared in the parmlist.  */
313
314 static tree last_function_parm_tags;
315
316 /* Similar, for last_function_parm_tags.  */
317 tree last_function_parms;
318 static tree current_function_parm_tags;
319
320 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
321    that have names.  Here so we can clear out their names' definitions
322    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
323    TREE_PURPOSE is the previous binding of the label.  */
324
325 #define named_labels cp_function_chain->x_named_labels
326
327 /* The FUNCTION_DECL for the function currently being compiled,
328    or 0 if between functions.  */
329 tree current_function_decl;
330
331 /* Set to 0 at beginning of a function definition, and whenever
332    a label (case or named) is defined.  Set to value of expression
333    returned from function when that value can be transformed into
334    a named return value.  */
335
336 tree current_function_return_value;
337
338 /* Nonzero means give `double' the same size as `float'.  */
339
340 extern int flag_short_double;
341
342 /* Nonzero means don't recognize any builtin functions.  */
343
344 extern int flag_no_builtin;
345
346 /* Nonzero means don't recognize the non-ANSI builtin functions.
347    -ansi sets this.  */
348
349 extern int flag_no_nonansi_builtin;
350
351 /* Nonzero means enable obscure ANSI features and disable GNU extensions
352    that might cause ANSI-compliant code to be miscompiled.  */
353
354 extern int flag_ansi;
355
356 /* Nonzero if we want to support huge (> 2^(sizeof(short)*8-1) bytes)
357    objects.  */
358 extern int flag_huge_objects;
359
360 /* Nonzero if we want to conserve space in the .o files.  We do this
361    by putting uninitialized data and runtime initialized data into
362    .common instead of .data at the expense of not flagging multiple
363    definitions.  */
364 extern int flag_conserve_space;
365 \f
366 /* C and C++ flags are in decl2.c.  */
367
368 /* Flag used when debugging spew.c */
369
370 extern int spew_debug;
371
372 /* A expression of value 0 with the same precision as a sizetype
373    node, but signed.  */
374 tree signed_size_zero_node;
375
376 /* The name of the anonymous namespace, throughout this translation
377    unit.  */
378 tree anonymous_namespace_name;
379
380 \f
381 /* For each binding contour we allocate a binding_level structure
382    which records the names defined in that contour.
383    Contours include:
384     0) the global one
385     1) one for each function definition,
386        where internal declarations of the parameters appear.
387     2) one for each compound statement,
388        to record its declarations.
389
390    The current meaning of a name can be found by searching the levels
391    from the current one out to the global one.
392
393    Off to the side, may be the class_binding_level.  This exists only
394    to catch class-local declarations.  It is otherwise nonexistent.
395
396    Also there may be binding levels that catch cleanups that must be
397    run when exceptions occur.  Thus, to see whether a name is bound in
398    the current scope, it is not enough to look in the
399    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
400    instead.  */
401
402 /* Note that the information in the `names' component of the global contour
403    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
404
405 struct binding_level
406   {
407     /* A chain of _DECL nodes for all variables, constants, functions,
408        and typedef types.  These are in the reverse of the order
409        supplied.  There may be OVERLOADs on this list, too, but they
410        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
411     tree names;
412
413     /* A list of structure, union and enum definitions, for looking up
414        tag names.
415        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
416        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
417        or ENUMERAL_TYPE node.
418
419        C++: the TREE_VALUE nodes can be simple types for
420        component_bindings.  */
421     tree tags;
422
423     /* A list of USING_DECL nodes. */
424     tree usings;
425
426     /* A list of used namespaces. PURPOSE is the namespace,
427        VALUE the common ancestor with this binding_level's namespace. */
428     tree using_directives;
429
430     /* If this binding level is the binding level for a class, then
431        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
432        is the name of an entity bound in the class; the TREE_VALUE is
433        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
434        when leaving class scope, we can restore the
435        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
436        the DECL bound by this name in the class.  */
437     tree class_shadowed;
438
439     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
440        is used for all binding levels.  */
441     tree type_shadowed;
442
443     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
444        label in this scope.  The TREE_PURPOSE is the previous value of
445        the IDENTIFIER_LABEL VALUE.  */
446     tree shadowed_labels;
447
448     /* For each level (except not the global one),
449        a chain of BLOCK nodes for all the levels
450        that were entered and exited one level down.  */
451     tree blocks;
452
453     /* The BLOCK node for this level, if one has been preallocated.
454        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
455     tree this_block;
456
457     /* The binding level which this one is contained in (inherits from).  */
458     struct binding_level *level_chain;
459
460     /* List of decls in `names' that have incomplete
461        structure or union types.  */
462     tree incomplete;
463
464     /* List of VAR_DECLS saved from a previous for statement.
465        These would be dead in ANSI-conforming code, but might
466        be referenced in ARM-era code.  These are stored in a
467        TREE_LIST; the TREE_VALUE is the actual declaration.  */
468     tree dead_vars_from_for;
469
470     /* 1 for the level that holds the parameters of a function.
471        2 for the level that holds a class declaration.
472        3 for levels that hold parameter declarations.  */
473     unsigned parm_flag : 4;
474
475     /* 1 means make a BLOCK for this level regardless of all else.
476        2 for temporary binding contours created by the compiler.  */
477     unsigned keep : 3;
478
479     /* Nonzero if this level "doesn't exist" for tags.  */
480     unsigned tag_transparent : 1;
481
482     /* Nonzero if this level can safely have additional
483        cleanup-needing variables added to it.  */
484     unsigned more_cleanups_ok : 1;
485     unsigned have_cleanups : 1;
486
487     /* Nonzero if this level is for storing the decls for template
488        parameters and generic decls; these decls will be discarded and
489        replaced with a TEMPLATE_DECL.  */
490     unsigned pseudo_global : 1;
491
492     /* This is set for a namespace binding level.  */
493     unsigned namespace_p : 1;
494
495     /* True if this level is that of a for-statement where we need to
496        worry about ambiguous (ARM or ANSI) scope rules.  */
497     unsigned is_for_scope : 1;
498
499     /* True if this level corresponds to an EH region, as for a try block.  */
500     unsigned eh_region : 1;
501
502     /* One bit left for this word.  */
503
504 #if defined(DEBUG_CP_BINDING_LEVELS)
505     /* Binding depth at which this level began.  */
506     unsigned binding_depth;
507 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
508   };
509
510 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
511   
512 /* The binding level currently in effect.  */
513
514 #define current_binding_level                   \
515   (current_function                             \
516    ? cp_function_chain->bindings                \
517    : scope_chain->bindings)
518
519 /* The binding level of the current class, if any.  */
520
521 #define class_binding_level scope_chain->class_bindings
522
523 /* A chain of binding_level structures awaiting reuse.  */
524
525 static struct binding_level *free_binding_level;
526
527 /* The outermost binding level, for names of file scope.
528    This is created when the compiler is started and exists
529    through the entire run.  */
530
531 static struct binding_level *global_binding_level;
532
533 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
534
535 static int keep_next_level_flag;
536
537 #if defined(DEBUG_CP_BINDING_LEVELS)
538 static int binding_depth = 0;
539 static int is_class_level = 0;
540
541 static void
542 indent ()
543 {
544   register unsigned i;
545
546   for (i = 0; i < binding_depth*2; i++)
547     putc (' ', stderr);
548 }
549 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
550
551 static tree pushdecl_with_scope PROTO((tree, struct binding_level *));
552
553 static void
554 push_binding_level (newlevel, tag_transparent, keep)
555      struct binding_level *newlevel;
556      int tag_transparent, keep;
557 {
558   /* Add this level to the front of the chain (stack) of levels that
559      are active.  */
560   bzero ((char*) newlevel, sizeof (struct binding_level));
561   newlevel->level_chain = current_binding_level;
562   current_binding_level = newlevel;
563   newlevel->tag_transparent = tag_transparent;
564   newlevel->more_cleanups_ok = 1;
565
566   /* We are called before expand_start_bindings, but after
567      expand_eh_region_start for a try block; so we check this now,
568      before the EH block is covered up.  */
569   newlevel->eh_region = is_eh_region ();
570
571   newlevel->keep = keep;
572 #if defined(DEBUG_CP_BINDING_LEVELS)
573   newlevel->binding_depth = binding_depth;
574   indent ();
575   fprintf (stderr, "push %s level 0x%08x line %d\n",
576            (is_class_level) ? "class" : "block", newlevel, lineno);
577   is_class_level = 0;
578   binding_depth++;
579 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
580 }
581
582 /* Find the innermost enclosing class scope, and reset
583    CLASS_BINDING_LEVEL appropriately.  */
584
585 static void
586 find_class_binding_level ()
587 {
588   struct binding_level *level = current_binding_level;
589
590   while (level && level->parm_flag != 2)
591     level = level->level_chain;
592   if (level && level->parm_flag == 2)
593     class_binding_level = level;
594   else
595     class_binding_level = 0;
596 }
597
598 static void
599 pop_binding_level ()
600 {
601   if (global_binding_level)
602     {
603       /* Cannot pop a level, if there are none left to pop.  */
604       if (current_binding_level == global_binding_level)
605         my_friendly_abort (123);
606     }
607   /* Pop the current level, and free the structure for reuse.  */
608 #if defined(DEBUG_CP_BINDING_LEVELS)
609   binding_depth--;
610   indent ();
611   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
612           (is_class_level) ? "class" : "block",
613           current_binding_level, lineno);
614   if (is_class_level != (current_binding_level == class_binding_level))
615     {
616       indent ();
617       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
618     }
619   is_class_level = 0;
620 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
621   {
622     register struct binding_level *level = current_binding_level;
623     current_binding_level = current_binding_level->level_chain;
624     level->level_chain = free_binding_level;
625 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
626     if (level->binding_depth != binding_depth)
627       abort ();
628 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
629     free_binding_level = level;
630     find_class_binding_level ();
631   }
632 }
633
634 static void
635 suspend_binding_level ()
636 {
637   if (class_binding_level)
638     current_binding_level = class_binding_level;
639
640   if (global_binding_level)
641     {
642       /* Cannot suspend a level, if there are none left to suspend.  */
643       if (current_binding_level == global_binding_level)
644         my_friendly_abort (123);
645     }
646   /* Suspend the current level.  */
647 #if defined(DEBUG_CP_BINDING_LEVELS)
648   binding_depth--;
649   indent ();
650   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
651           (is_class_level) ? "class" : "block",
652           current_binding_level, lineno);
653   if (is_class_level != (current_binding_level == class_binding_level))
654     {
655       indent ();
656       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
657     }
658   is_class_level = 0;
659 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
660   current_binding_level = current_binding_level->level_chain;
661   find_class_binding_level ();
662 }
663
664 static void
665 resume_binding_level (b)
666      struct binding_level *b;
667 {
668   /* Resuming binding levels is meant only for namespaces,
669      and those cannot nest into classes. */
670   my_friendly_assert(!class_binding_level, 386);
671   /* Also, resuming a non-directly nested namespace is a no-no.  */
672   my_friendly_assert(b->level_chain == current_binding_level, 386);
673   current_binding_level = b;
674 #if defined(DEBUG_CP_BINDING_LEVELS)
675   b->binding_depth = binding_depth;
676   indent ();
677   fprintf (stderr, "resume %s level 0x%08x line %d\n",
678            (is_class_level) ? "class" : "block", b, lineno);
679   is_class_level = 0;
680   binding_depth++;
681 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
682 }
683 \f
684 /* Create a new `struct binding_level'.  */
685
686 static
687 struct binding_level *
688 make_binding_level ()
689 {
690   /* NOSTRICT */
691   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
692 }
693
694 /* Nonzero if we are currently in the global binding level.  */
695
696 int
697 global_bindings_p ()
698 {
699   return current_binding_level == global_binding_level;
700 }
701
702 /* Return the innermost binding level that is not for a class scope.  */
703
704 static struct binding_level *
705 innermost_nonclass_level ()
706 {
707   struct binding_level *b;
708
709   b = current_binding_level;
710   while (b->parm_flag == 2)
711     b = b->level_chain;
712
713   return b;
714 }
715
716 /* Nonzero if we are currently in a toplevel binding level.  This
717    means either the global binding level or a namespace in a toplevel
718    binding level.  Since there are no non-toplevel namespace levels,
719    this really means any namespace or pseudo-global level.  We also
720    include a class whose context is toplevel.  */
721
722 int
723 toplevel_bindings_p ()
724 {
725   struct binding_level *b = innermost_nonclass_level ();
726
727   return b->namespace_p || b->pseudo_global;
728 }
729
730 /* Nonzero if this is a namespace scope, or if we are defining a class
731    which is itself at namespace scope, or whose enclosing class is
732    such a class, etc.  */
733
734 int
735 namespace_bindings_p ()
736 {
737   struct binding_level *b = innermost_nonclass_level ();
738
739   return b->namespace_p;
740 }
741
742 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
743    unconditionally.  Otherwise, use the normal logic to decide whether
744    or not to create a BLOCK.  */
745
746 void
747 keep_next_level (keep)
748      int keep;
749 {
750   keep_next_level_flag = keep;
751 }
752
753 /* Nonzero if the current level needs to have a BLOCK made.  */
754
755 int
756 kept_level_p ()
757 {
758   return (current_binding_level->blocks != NULL_TREE
759           || current_binding_level->keep
760           || current_binding_level->names != NULL_TREE
761           || (current_binding_level->tags != NULL_TREE
762               && !current_binding_level->tag_transparent));
763 }
764
765 void
766 declare_pseudo_global_level ()
767 {
768   current_binding_level->pseudo_global = 1;
769 }
770
771 static void
772 declare_namespace_level ()
773 {
774   current_binding_level->namespace_p = 1;
775 }
776
777 int
778 pseudo_global_level_p ()
779 {
780   return current_binding_level->pseudo_global;
781 }
782
783 void
784 set_class_shadows (shadows)
785      tree shadows;
786 {
787   class_binding_level->class_shadowed = shadows;
788 }
789
790 /* Enter a new binding level.
791    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
792    not for that of tags.  */
793
794 void
795 pushlevel (tag_transparent)
796      int tag_transparent;
797 {
798   struct binding_level *newlevel;
799
800   if (current_function && !doing_semantic_analysis_p ())
801     return;
802
803   /* Reuse or create a struct for this binding level.  */
804 #if defined(DEBUG_CP_BINDING_LEVELS)
805   if (0)
806 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
807   if (free_binding_level)
808 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
809     {
810       newlevel = free_binding_level;
811       free_binding_level = free_binding_level->level_chain;
812     }
813   else
814     newlevel = make_binding_level ();
815
816   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
817   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
818   keep_next_level_flag = 0;
819 }
820
821 void
822 note_level_for_for ()
823 {
824   current_binding_level->is_for_scope = 1;
825 }
826
827 void
828 pushlevel_temporary (tag_transparent)
829      int tag_transparent;
830 {
831   pushlevel (tag_transparent);
832   current_binding_level->keep = 2;
833   clear_last_expr ();
834
835   /* Note we don't call push_momentary() here.  Otherwise, it would cause
836      cleanups to be allocated on the momentary obstack, and they will be
837      overwritten by the next statement.  */
838
839   expand_start_bindings (0);
840 }
841
842 /* For a binding between a name and an entity at a block scope,
843    this is the `struct binding_level' for the block.  */
844 #define BINDING_LEVEL(NODE) \
845    (((struct tree_binding*)NODE)->scope.level)
846
847 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
848    level at which this declaration is being bound.  */
849
850 static void
851 push_binding (id, decl, level)
852      tree id;
853      tree decl;
854      struct binding_level* level;
855 {
856   tree binding;
857
858   binding = make_node (CPLUS_BINDING);
859
860   /* Now, fill in the binding information.  */
861   BINDING_VALUE (binding) = decl;
862   BINDING_TYPE (binding) = NULL_TREE;
863   BINDING_LEVEL (binding) = level;
864   INHERITED_VALUE_BINDING_P (binding) = 0;
865   LOCAL_BINDING_P (binding) = (level != class_binding_level);
866   BINDING_HAS_LEVEL_P (binding) = 1;
867
868   /* And put it on the front of the list of bindings for ID.  */
869   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
870   IDENTIFIER_BINDING (id) = binding;
871 }
872
873 /* ID is already bound in the current scope.  But, DECL is an
874    additional binding for ID in the same scope.  This is the `struct
875    stat' hack whereby a non-typedef class-name or enum-name can be
876    bound at the same level as some other kind of entity.  It's the
877    responsibility of the caller to check that inserting this name is
878    legal here.  Returns nonzero if the new binding was successful.  */
879 static int
880 add_binding (id, decl)
881      tree id;
882      tree decl;
883 {
884   tree binding = IDENTIFIER_BINDING (id);
885   int ok = 1;
886
887   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
888     /* The new name is the type name.  */
889     BINDING_TYPE (binding) = decl;
890   else if (!BINDING_VALUE (binding))
891     /* This situation arises when push_class_level_binding moves an
892        inherited type-binding out of the way to make room for a new
893        value binding.  */
894     BINDING_VALUE (binding) = decl;
895   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
896            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
897     {
898       /* The old binding was a type name.  It was placed in
899          BINDING_VALUE because it was thought, at the point it was
900          declared, to be the only entity with such a name.  Move the
901          type name into the type slot; it is now hidden by the new
902          binding.  */
903       BINDING_TYPE (binding) = BINDING_VALUE (binding);
904       BINDING_VALUE (binding) = decl;
905       INHERITED_VALUE_BINDING_P (binding) = 0;
906     }
907   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
908            && TREE_CODE (decl) == TYPE_DECL
909            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
910            && same_type_p (TREE_TYPE (decl),
911                            TREE_TYPE (BINDING_VALUE (binding))))
912     /* We have two typedef-names, both naming the same type to have
913        the same name.  This is OK because of:
914
915          [dcl.typedef]
916
917          In a given scope, a typedef specifier can be used to redefine
918          the name of any type declared in that scope to refer to the
919          type to which it already refers.  */
920     ok = 0;
921   else
922     {
923       cp_error ("declaration of `%#D'", decl);
924       cp_error_at ("conflicts with previous declaration `%#D'",
925                    BINDING_VALUE (binding));
926       ok = 0;
927     }
928
929   return ok;
930 }
931
932 /* Add DECL to the list of things declared in B.  */
933
934 static void
935 add_decl_to_level (decl, b)
936      tree decl;
937      struct binding_level *b;
938 {
939   /* We build up the list in reverse order, and reverse it later if
940      necessary.  */
941   TREE_CHAIN (decl) = b->names;
942   b->names = decl;
943 }
944
945 /* Bind DECL to ID in the current_binding_level, assumed to be a local
946    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
947    doesn't really belong to this binding level, that it got here
948    through a using-declaration.  */
949
950 void
951 push_local_binding (id, decl, flags)
952      tree id;
953      tree decl;
954      int flags;
955 {
956   struct binding_level *b;
957
958   /* Skip over any local classes.  This makes sense if we call
959      push_local_binding with a friend decl of a local class.  */
960   b = current_binding_level;
961   while (b->parm_flag == 2)
962     b = b->level_chain;
963
964   if (lookup_name_current_level (id))
965     {
966       /* Supplement the existing binding.  */
967       if (!add_binding (id, decl))
968         /* It didn't work.  Something else must be bound at this
969            level.  Do not add DECL to the list of things to pop
970            later.  */
971         return;
972     }
973   else
974     /* Create a new binding.  */
975     push_binding (id, decl, b);
976
977   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
978     /* We must put the OVERLOAD into a TREE_LIST since the
979        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
980        decls that got here through a using-declaration.  */
981     decl = build_tree_list (NULL_TREE, decl);
982
983   /* And put DECL on the list of things declared by the current
984      binding level.  */
985   add_decl_to_level (decl, b);
986 }
987
988 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
989    binding was successful.  */
990
991 int
992 push_class_binding (id, decl)
993      tree id;
994      tree decl;
995 {
996   int result = 1;
997   tree binding = IDENTIFIER_BINDING (id);
998   tree context;
999
1000   /* Note that we declared this value so that we can issue an error if
1001      this an illegal redeclaration of a name already used for some
1002      other purpose.  */
1003   note_name_declared_in_class (id, decl);
1004
1005   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1006     /* Supplement the existing binding.  */
1007     result = add_binding (id, decl);
1008   else
1009     /* Create a new binding.  */
1010     push_binding (id, decl, class_binding_level);
1011
1012   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1013      class-level declaration.  Note that we do not use DECL here
1014      because of the possibility of the `struct stat' hack; if DECL is
1015      a class-name or enum-name we might prefer a field-name, or some
1016      such.  */
1017   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1018
1019   /* If this is a binding from a base class, mark it as such.  */
1020   binding = IDENTIFIER_BINDING (id);
1021   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1022     {
1023       /* Any implicit typename must be from a base-class.  The
1024          context for an implicit typename declaration is always
1025          the derived class in which the lookup was done, so the checks
1026          based on the context of DECL below will not trigger.  */
1027       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1028         INHERITED_VALUE_BINDING_P (binding) = 1;
1029       else
1030         {
1031           if (TREE_CODE (decl) == OVERLOAD)
1032             context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
1033           else
1034             {
1035               my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
1036                                   0);
1037               context = DECL_REAL_CONTEXT (decl);
1038             }
1039
1040           if (is_properly_derived_from (current_class_type, context))
1041             INHERITED_VALUE_BINDING_P (binding) = 1;
1042           else
1043             INHERITED_VALUE_BINDING_P (binding) = 0;
1044         }
1045     }
1046   else if (BINDING_VALUE (binding) == decl)
1047     /* We only encounter a TREE_LIST when push_class_decls detects an
1048        ambiguity.  Such an ambiguity can be overridden by a definition
1049        in this class.  */
1050     INHERITED_VALUE_BINDING_P (binding) = 1;
1051
1052   return result;
1053 }
1054
1055 /* Remove the binding for DECL which should be the innermost binding
1056    for ID.  */
1057
1058 static void 
1059 pop_binding (id, decl) 
1060      tree id;
1061      tree decl;
1062 {
1063   tree binding;
1064     
1065   if (id == NULL_TREE)
1066     /* It's easiest to write the loops that call this function without
1067        checking whether or not the entities involved have names.  We
1068        get here for such an entity.  */
1069     return;
1070
1071   /* Get the innermost binding for ID.  */
1072   binding = IDENTIFIER_BINDING (id);
1073
1074   /* The name should be bound.  */
1075   my_friendly_assert (binding != NULL_TREE, 0);
1076
1077   /* The DECL will be either the ordinary binding or the type
1078      binding for this identifier.  Remove that binding.  */
1079   if (BINDING_VALUE (binding) == decl)
1080     BINDING_VALUE (binding) = NULL_TREE;
1081   else if (BINDING_TYPE (binding) == decl)
1082     BINDING_TYPE (binding) = NULL_TREE;
1083   else
1084     my_friendly_abort (0);
1085
1086   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1087     /* We're completely done with the innermost binding for this
1088        identifier.  Unhook it from the list of bindings.  */
1089     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1090 }
1091
1092 /* When a label goes out of scope, check to see if that label was used
1093    in a valid manner, and issue any appropriate warnings or errors.  */
1094
1095 static void
1096 pop_label (link)
1097      tree link;
1098 {
1099   tree label = TREE_VALUE (link);
1100
1101   if (!processing_template_decl && doing_semantic_analysis_p ())
1102     {
1103       if (DECL_INITIAL (label) == NULL_TREE)
1104         {
1105           cp_error_at ("label `%D' used but not defined", label);
1106           /* Avoid crashing later.  */
1107           define_label (input_filename, 1, DECL_NAME (label));
1108         }
1109       else if (warn_unused && !TREE_USED (label))
1110         cp_warning_at ("label `%D' defined but not used", label);
1111     }
1112
1113   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1114 }
1115
1116 /* At the end of a function, all labels declared within the fucntion
1117    go out of scope.  BLOCK is the top-level block for the 
1118    function.  */
1119
1120 static void
1121 pop_labels (block)
1122      tree block;
1123 {
1124   tree link;
1125
1126   /* Clear out the definitions of all label names, since their scopes
1127      end here.  */
1128   for (link = named_labels; link; link = TREE_CHAIN (link))
1129     {
1130       pop_label (link);
1131       /* Put the labels into the "variables" of the top-level block,
1132          so debugger can see them.  */
1133       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1134       BLOCK_VARS (block) = TREE_VALUE (link);
1135     }
1136
1137   named_labels = NULL_TREE;
1138 }
1139
1140 /* Exit a binding level.
1141    Pop the level off, and restore the state of the identifier-decl mappings
1142    that were in effect when this level was entered.
1143
1144    If KEEP == 1, this level had explicit declarations, so
1145    and create a "block" (a BLOCK node) for the level
1146    to record its declarations and subblocks for symbol table output.
1147
1148    If FUNCTIONBODY is nonzero, this level is the body of a function,
1149    so create a block as if KEEP were set and also clear out all
1150    label names.
1151
1152    If REVERSE is nonzero, reverse the order of decls before putting
1153    them into the BLOCK.  */
1154
1155 tree
1156 poplevel (keep, reverse, functionbody)
1157      int keep;
1158      int reverse;
1159      int functionbody;
1160 {
1161   register tree link;
1162   /* The chain of decls was accumulated in reverse order.
1163      Put it into forward order, just for cleanliness.  */
1164   tree decls;
1165   int tmp = functionbody;
1166   int real_functionbody;
1167   tree tags;
1168   tree subblocks;
1169   tree block = NULL_TREE;
1170   tree decl;
1171   int block_previously_created;
1172   int leaving_for_scope;
1173
1174   if (current_function && !doing_semantic_analysis_p ())
1175     return NULL_TREE;
1176
1177   my_friendly_assert (current_binding_level->parm_flag != 2,
1178                       19990916);
1179
1180   real_functionbody = (current_binding_level->keep == 2
1181                        ? ((functionbody = 0), tmp) : functionbody);
1182   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1183   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1184
1185   my_friendly_assert (!current_binding_level->class_shadowed,
1186                       19990414);
1187
1188   /* We used to use KEEP == 2 to indicate that the new block should go
1189      at the beginning of the list of blocks at this binding level,
1190      rather than the end.  This hack is no longer used.  */
1191   my_friendly_assert (keep == 0 || keep == 1, 0);
1192
1193   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1194                       (HOST_WIDE_INT) current_binding_level->level_chain,
1195                       current_binding_level->parm_flag,
1196                       current_binding_level->keep);
1197
1198   if (current_binding_level->keep == 1)
1199     keep = 1;
1200
1201   /* Get the decls in the order they were written.
1202      Usually current_binding_level->names is in reverse order.
1203      But parameter decls were previously put in forward order.  */
1204
1205   if (reverse)
1206     current_binding_level->names
1207       = decls = nreverse (current_binding_level->names);
1208   else
1209     decls = current_binding_level->names;
1210
1211   /* Output any nested inline functions within this block
1212      if they weren't already output.  */
1213
1214   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1215     if (TREE_CODE (decl) == FUNCTION_DECL
1216         && ! TREE_ASM_WRITTEN (decl)
1217         && DECL_INITIAL (decl) != NULL_TREE
1218         && TREE_ADDRESSABLE (decl)
1219         && decl_function_context (decl) == current_function_decl)
1220       {
1221         /* If this decl was copied from a file-scope decl
1222            on account of a block-scope extern decl,
1223            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1224         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1225           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1226         else
1227           {
1228             push_function_context ();
1229             output_inline_function (decl);
1230             pop_function_context ();
1231           }
1232       }
1233
1234   /* If there were any declarations or structure tags in that level,
1235      or if this level is a function body,
1236      create a BLOCK to record them for the life of this function.  */
1237
1238   block = NULL_TREE;
1239   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1240   if (block_previously_created)
1241     block = current_binding_level->this_block;
1242   else if (keep == 1 || functionbody)
1243     block = make_node (BLOCK);
1244   if (block != NULL_TREE)
1245     {
1246       if (block_previously_created)
1247         {
1248           if (decls || tags || subblocks)
1249             {
1250               if (BLOCK_VARS (block) || BLOCK_TYPE_TAGS (block))
1251                 warning ("internal compiler error: debugging info corrupted");
1252
1253               BLOCK_VARS (block) = decls;
1254               BLOCK_TYPE_TAGS (block) = tags;
1255
1256               /* We can have previous subblocks and new subblocks when
1257                  doing fixup_gotos with complex cleanups.  We chain the new
1258                  subblocks onto the end of any pre-existing subblocks.  */
1259               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1260                                                  subblocks);
1261             }
1262           /* If we created the block earlier on, and we are just
1263              diddling it now, then it already should have a proper
1264              BLOCK_END_NOTE value associated with it.  */
1265         }
1266       else
1267         {
1268           BLOCK_VARS (block) = decls;
1269           BLOCK_TYPE_TAGS (block) = tags;
1270           BLOCK_SUBBLOCKS (block) = subblocks;
1271           /* Otherwise, for a new block, install a new BLOCK_END_NOTE
1272              value.  */ 
1273           remember_end_note (block);
1274         }
1275     }
1276
1277   /* In each subblock, record that this is its superior.  */
1278
1279   if (keep >= 0)
1280     for (link = subblocks; link; link = TREE_CHAIN (link))
1281       BLOCK_SUPERCONTEXT (link) = block;
1282
1283   /* We still support the old for-scope rules, whereby the variables
1284      in a for-init statement were in scope after the for-statement
1285      ended.  We only use the new rules in flag_new_for_scope is
1286      nonzero.  */
1287   leaving_for_scope 
1288     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1289
1290   /* Remove declarations for all the DECLs in this level.  */
1291   for (link = decls; link; link = TREE_CHAIN (link))
1292     {
1293       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1294         {
1295           tree outer_binding 
1296             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1297           tree ns_binding;
1298
1299           if (!outer_binding)
1300             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1301           else
1302             ns_binding = NULL_TREE;
1303
1304           if (outer_binding 
1305               && (BINDING_LEVEL (outer_binding) 
1306                   == current_binding_level->level_chain))
1307             /* We have something like:
1308                
1309                  int i;
1310                  for (int i; ;);
1311                  
1312                and we are leaving the `for' scope.  There's no reason to
1313                keep the binding of the inner `i' in this case.  */
1314             pop_binding (DECL_NAME (link), link);
1315           else if ((outer_binding 
1316                     && (TREE_CODE (BINDING_VALUE (outer_binding)) 
1317                         == TYPE_DECL))
1318                    || (ns_binding 
1319                        && TREE_CODE (ns_binding) == TYPE_DECL))
1320             /* Here, we have something like:
1321
1322                  typedef int I;
1323
1324                  void f () {
1325                    for (int I; ;);
1326                  }
1327
1328                We must pop the for-scope binding so we know what's a
1329                type and what isn't.  */
1330             pop_binding (DECL_NAME (link), link);
1331           else
1332             {
1333               /* Mark this VAR_DECL as dead so that we can tell we left it
1334                  there only for backward compatibility.  */
1335               DECL_DEAD_FOR_LOCAL (link) = 1;
1336               
1337               /* Keep track of what should of have happenned when we
1338                  popped the binding.  */
1339               if (outer_binding && BINDING_VALUE (outer_binding))
1340                 DECL_SHADOWED_FOR_VAR (link) 
1341                   = BINDING_VALUE (outer_binding);
1342
1343               /* Add it to the list of dead variables in the next
1344                  outermost binding to that we can remove these when we
1345                  leave that binding.  */
1346               current_binding_level->level_chain->dead_vars_from_for
1347                 = tree_cons (NULL_TREE, link,
1348                              current_binding_level->level_chain->
1349                              dead_vars_from_for);
1350
1351               /* Although we don't pop the CPLUS_BINDING, we do clear
1352                  its BINDING_LEVEL since the level is going away now.  */
1353               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1354                 = 0;
1355             }
1356         }
1357       else 
1358         {
1359           /* Remove the binding.  */
1360           decl = link;
1361           if (TREE_CODE (decl) == TREE_LIST)
1362             decl = TREE_VALUE (decl);
1363           if (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd')
1364             pop_binding (DECL_NAME (decl), decl);
1365           else if (TREE_CODE (decl) == OVERLOAD)
1366             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1367           else 
1368             my_friendly_abort (0);
1369         }
1370     }
1371
1372   /* Remove declarations for any `for' variables from inner scopes
1373      that we kept around.  */
1374   for (link = current_binding_level->dead_vars_from_for;
1375        link; link = TREE_CHAIN (link))
1376     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1377
1378   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1379   for (link = current_binding_level->type_shadowed;
1380        link; link = TREE_CHAIN (link))
1381     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1382
1383   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1384   for (link = current_binding_level->shadowed_labels;
1385        link; 
1386        link = TREE_CHAIN (link))
1387     pop_label (link);
1388
1389   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1390      list if a `using' declaration put them there.  The debugging
1391      back-ends won't understand OVERLOAD, so we remove them here.
1392      Because the BLOCK_VARS are (temporarily) shared with
1393      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1394      popped all the bindings.  */
1395   if (block)
1396     {
1397       tree* d;
1398
1399       for (d = &BLOCK_VARS (block); *d; )
1400         {
1401           if (TREE_CODE (*d) == TREE_LIST)
1402             *d = TREE_CHAIN (*d);
1403           else
1404             d = &TREE_CHAIN (*d);
1405         }
1406     }
1407
1408   /* If the level being exited is the top level of a function,
1409      check over all the labels.  */
1410   if (functionbody)
1411     {
1412       /* Since this is the top level block of a function, the vars are
1413          the function's parameters.  Don't leave them in the BLOCK
1414          because they are found in the FUNCTION_DECL instead.  */
1415       BLOCK_VARS (block) = 0;
1416       pop_labels (block);
1417     }
1418
1419   /* Any uses of undefined labels now operate under constraints
1420      of next binding contour.  */
1421   if (current_function)
1422     {
1423       struct binding_level *level_chain;
1424       level_chain = current_binding_level->level_chain;
1425       if (level_chain)
1426         {
1427           struct named_label_list *labels;
1428           for (labels = named_label_uses; labels; labels = labels->next)
1429             if (labels->binding_level == current_binding_level)
1430               {
1431                 labels->binding_level = level_chain;
1432                 labels->names_in_scope = level_chain->names;
1433               }
1434         }
1435     }
1436
1437   tmp = current_binding_level->keep;
1438
1439   pop_binding_level ();
1440   if (functionbody)
1441     DECL_INITIAL (current_function_decl) = block;
1442   else if (block)
1443     {
1444       if (!block_previously_created)
1445         current_binding_level->blocks
1446           = chainon (current_binding_level->blocks, block);
1447     }
1448   /* If we did not make a block for the level just exited,
1449      any blocks made for inner levels
1450      (since they cannot be recorded as subblocks in that level)
1451      must be carried forward so they will later become subblocks
1452      of something else.  */
1453   else if (subblocks)
1454     current_binding_level->blocks
1455       = chainon (current_binding_level->blocks, subblocks);
1456
1457   /* Take care of compiler's internal binding structures.  */
1458   if (tmp == 2)
1459     {
1460       expand_end_bindings (getdecls (), keep, 1);
1461       /* Each and every BLOCK node created here in `poplevel' is important
1462          (e.g. for proper debugging information) so if we created one
1463          earlier, mark it as "used".  */
1464       if (block)
1465         TREE_USED (block) = 1;
1466       block = poplevel (keep, reverse, real_functionbody);
1467     }
1468
1469   /* Each and every BLOCK node created here in `poplevel' is important
1470      (e.g. for proper debugging information) so if we created one
1471      earlier, mark it as "used".  */
1472   if (block)
1473     TREE_USED (block) = 1;
1474   return block;
1475 }
1476
1477 /* Delete the node BLOCK from the current binding level.
1478    This is used for the block inside a stmt expr ({...})
1479    so that the block can be reinserted where appropriate.  */
1480
1481 void
1482 delete_block (block)
1483      tree block;
1484 {
1485   tree t;
1486   if (current_binding_level->blocks == block)
1487     current_binding_level->blocks = TREE_CHAIN (block);
1488   for (t = current_binding_level->blocks; t;)
1489     {
1490       if (TREE_CHAIN (t) == block)
1491         TREE_CHAIN (t) = TREE_CHAIN (block);
1492       else
1493         t = TREE_CHAIN (t);
1494     }
1495   TREE_CHAIN (block) = NULL_TREE;
1496   /* Clear TREE_USED which is always set by poplevel.
1497      The flag is set again if insert_block is called.  */
1498   TREE_USED (block) = 0;
1499 }
1500
1501 /* Insert BLOCK at the end of the list of subblocks of the
1502    current binding level.  This is used when a BIND_EXPR is expanded,
1503    to handle the BLOCK node inside the BIND_EXPR.  */
1504
1505 void
1506 insert_block (block)
1507      tree block;
1508 {
1509   TREE_USED (block) = 1;
1510   current_binding_level->blocks
1511     = chainon (current_binding_level->blocks, block);
1512 }
1513
1514 /* Set the BLOCK node for the innermost scope
1515    (the one we are currently in).  */
1516
1517 void
1518 set_block (block)
1519     register tree block;
1520 {
1521   current_binding_level->this_block = block;
1522 }
1523
1524 /* Do a pushlevel for class declarations.  */
1525
1526 void
1527 pushlevel_class ()
1528 {
1529   register struct binding_level *newlevel;
1530
1531   /* Reuse or create a struct for this binding level.  */
1532 #if defined(DEBUG_CP_BINDING_LEVELS)
1533   if (0)
1534 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1535   if (free_binding_level)
1536 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1537     {
1538       newlevel = free_binding_level;
1539       free_binding_level = free_binding_level->level_chain;
1540     }
1541   else
1542     newlevel = make_binding_level ();
1543
1544 #if defined(DEBUG_CP_BINDING_LEVELS)
1545   is_class_level = 1;
1546 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1547
1548   push_binding_level (newlevel, 0, 0);
1549
1550   class_binding_level = current_binding_level;
1551   class_binding_level->parm_flag = 2;
1552 }
1553
1554 /* ...and a poplevel for class declarations.  */
1555
1556 void
1557 poplevel_class ()
1558 {
1559   register struct binding_level *level = class_binding_level;
1560   tree shadowed;
1561
1562   my_friendly_assert (level != 0, 354);
1563   
1564   /* If we're leaving a toplevel class, don't bother to do the setting
1565      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1566      shouldn't even be used when current_class_type isn't set, and second,
1567      if we don't touch it here, we're able to use the cache effect if the
1568      next time we're entering a class scope, it is the same class.  */
1569   if (current_class_depth != 1)
1570     {
1571       struct binding_level* b;
1572
1573       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1574       for (shadowed = level->class_shadowed;
1575            shadowed;
1576            shadowed = TREE_CHAIN (shadowed))
1577         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1578         
1579       /* Find the next enclosing class, and recreate
1580          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1581       b = level->level_chain;
1582       while (b && b->parm_flag != 2)
1583         b = b->level_chain;
1584
1585       if (b)
1586         for (shadowed = b->class_shadowed; 
1587              shadowed; 
1588              shadowed = TREE_CHAIN (shadowed))
1589           {
1590             tree t;
1591
1592             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1593             while (t && BINDING_LEVEL (t) != b)
1594               t = TREE_CHAIN (t);
1595       
1596             if (t)
1597               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
1598                 = BINDING_VALUE (t);
1599           }
1600     }
1601   else
1602     /* Remember to save what IDENTIFIER's were bound in this scope so we
1603        can recover from cache misses.  */
1604     {
1605       previous_class_type = current_class_type;
1606       previous_class_values = class_binding_level->class_shadowed;
1607     }
1608   for (shadowed = level->type_shadowed;
1609        shadowed;
1610        shadowed = TREE_CHAIN (shadowed))
1611     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1612
1613   /* Remove the bindings for all of the class-level declarations.  */
1614   for (shadowed = level->class_shadowed; 
1615        shadowed; 
1616        shadowed = TREE_CHAIN (shadowed))
1617     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1618
1619   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1620                       (HOST_WIDE_INT) class_binding_level->level_chain,
1621                       class_binding_level->parm_flag,
1622                       class_binding_level->keep);
1623
1624   /* Now, pop out of the binding level which we created up in the
1625      `pushlevel_class' routine.  */
1626 #if defined(DEBUG_CP_BINDING_LEVELS)
1627   is_class_level = 1;
1628 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1629
1630   pop_binding_level ();
1631 }
1632
1633 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1634    for any names in enclosing classes.  */
1635
1636 void
1637 clear_identifier_class_values ()
1638 {
1639   tree t;
1640
1641   if (!class_binding_level)
1642     return;
1643
1644   for (t = class_binding_level->class_shadowed;
1645        t;
1646        t = TREE_CHAIN (t))
1647     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1648 }
1649
1650 /* Returns non-zero if T is a virtual function table.  */
1651
1652 int
1653 vtable_decl_p (t, data)
1654      tree t;
1655      void *data ATTRIBUTE_UNUSED;
1656 {
1657   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1658 }
1659
1660 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1661    functions.  */
1662
1663 int
1664 vtype_decl_p (t, data)
1665      tree t;
1666      void *data ATTRIBUTE_UNUSED;
1667 {
1668   return (TREE_CODE (t) == TYPE_DECL
1669           && TREE_TYPE (t) != error_mark_node
1670           && TYPE_LANG_SPECIFIC (TREE_TYPE (t))
1671           && CLASSTYPE_VSIZE (TREE_TYPE (t)));
1672 }
1673
1674 /* Return the declarations that are members of the namespace NS.  */
1675
1676 tree
1677 cp_namespace_decls (ns)
1678      tree ns;
1679 {
1680   return NAMESPACE_LEVEL (ns)->names;
1681 }
1682
1683 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1684    itself, calling F for each.  The DATA is passed to F as well.  */
1685
1686 static int
1687 walk_namespaces_r (namespace, f, data)
1688      tree namespace;
1689      walk_namespaces_fn f;
1690      void *data;
1691 {
1692   tree current;
1693   int result = 0;
1694
1695   result |= (*f) (namespace, data);
1696
1697   for (current = cp_namespace_decls (namespace);
1698        current;
1699        current = TREE_CHAIN (current))
1700     {
1701       if (TREE_CODE (current) != NAMESPACE_DECL
1702           || DECL_NAMESPACE_ALIAS (current))
1703         continue;
1704       if (!DECL_LANG_SPECIFIC (current))
1705         {
1706           /* Hmm. std. */
1707           my_friendly_assert (current == std_node, 393);
1708           continue;
1709         }
1710
1711       /* We found a namespace.  */
1712       result |= walk_namespaces_r (current, f, data);
1713     }
1714
1715   return result;
1716 }
1717
1718 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1719    F as well.  */
1720
1721 int
1722 walk_namespaces (f, data)
1723      walk_namespaces_fn f;
1724      void *data;
1725 {
1726   return walk_namespaces_r (global_namespace, f, data);
1727 }
1728
1729 struct walk_globals_data {
1730   walk_globals_pred p;
1731   walk_globals_fn f;
1732   void *data;
1733 };
1734
1735 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1736    for which P returns non-zero, call F with its address.  If any call
1737    to F returns a non-zero value, return a non-zero value.  */
1738
1739 static int 
1740 walk_globals_r (namespace, data)
1741      tree namespace;
1742      void *data;
1743 {
1744   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1745   walk_globals_pred p = wgd->p;
1746   walk_globals_fn f = wgd->f;
1747   void *d = wgd->data;
1748   tree *t;
1749   int result = 0;
1750
1751   t = &NAMESPACE_LEVEL (namespace)->names;
1752
1753   while (*t)
1754     {
1755       tree glbl = *t;
1756
1757       if ((*p) (glbl, d))
1758         result |= (*f) (t, d);
1759
1760       /* If F changed *T, then *T still points at the next item to
1761          examine.  */
1762       if (*t == glbl)
1763         t = &TREE_CHAIN (*t);
1764     }
1765
1766   return result;
1767 }
1768
1769 /* Walk the global declarations.  Whenever one is found for which P
1770    returns non-zero, call F with its address.  If any call to F
1771    returns a non-zero value, return a non-zero value.  */
1772
1773 int
1774 walk_globals (p, f, data)
1775      walk_globals_pred p;
1776      walk_globals_fn f;
1777      void *data;
1778 {
1779   struct walk_globals_data wgd;
1780   wgd.p = p;
1781   wgd.f = f;
1782   wgd.data = data;
1783
1784   return walk_namespaces (walk_globals_r, &wgd);
1785 }
1786
1787 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1788    DATA is non-NULL, this is the last time we will call
1789    wrapup_global_declarations for this NAMESPACE.  */
1790
1791 int
1792 wrapup_globals_for_namespace (namespace, data)
1793      tree namespace;
1794      void *data;
1795 {
1796   tree globals = cp_namespace_decls (namespace);
1797   int len = list_length (globals);
1798   tree *vec = (tree *) alloca (sizeof (tree) * len);
1799   int i;
1800   int result;
1801   tree decl;
1802   int last_time = (data != 0);
1803
1804   if (last_time && namespace == global_namespace)
1805     /* Let compile_file handle the global namespace.  */
1806     return 0;
1807
1808   /* Process the decls in reverse order--earliest first.
1809      Put them into VEC from back to front, then take out from front.  */
1810   
1811   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1812     vec[len - i - 1] = decl;
1813   
1814   if (last_time)
1815     {
1816       check_global_declarations (vec, len);
1817       return 0;
1818     }
1819
1820   /* Temporarily mark vtables as external.  That prevents
1821      wrapup_global_declarations from writing them out; we must process
1822      them ourselves in finish_vtable_vardecl.  */
1823   for (i = 0; i < len; ++i)
1824     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1825       {
1826         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1827         DECL_EXTERNAL (vec[i]) = 1;
1828       }
1829
1830   /* Write out any globals that need to be output.  */
1831   result = wrapup_global_declarations (vec, len);
1832
1833   /* Undo the hack to DECL_EXTERNAL above.  */
1834   for (i = 0; i < len; ++i)
1835     if (vtable_decl_p (vec[i], /*data=*/0)
1836         && DECL_NOT_REALLY_EXTERN (vec[i]))
1837       {
1838         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1839         DECL_EXTERNAL (vec[i]) = 0;
1840       }
1841
1842   return result;
1843 }
1844
1845 \f
1846 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1847
1848 static void
1849 mark_binding_level (arg)
1850      void *arg;
1851 {
1852   struct binding_level *lvl = *(struct binding_level **)arg;
1853
1854   while (lvl)
1855     {
1856       ggc_mark_tree (lvl->names);
1857       ggc_mark_tree (lvl->tags);
1858       ggc_mark_tree (lvl->usings);
1859       ggc_mark_tree (lvl->using_directives);
1860       ggc_mark_tree (lvl->class_shadowed);
1861       ggc_mark_tree (lvl->type_shadowed);
1862       ggc_mark_tree (lvl->shadowed_labels);
1863       ggc_mark_tree (lvl->blocks);
1864       ggc_mark_tree (lvl->this_block);
1865       ggc_mark_tree (lvl->incomplete);
1866       ggc_mark_tree (lvl->dead_vars_from_for);
1867
1868       lvl = lvl->level_chain;
1869     }
1870 }
1871 \f
1872 /* For debugging.  */
1873 static int no_print_functions = 0;
1874 static int no_print_builtins = 0;
1875
1876 void
1877 print_binding_level (lvl)
1878      struct binding_level *lvl;
1879 {
1880   tree t;
1881   int i = 0, len;
1882   fprintf (stderr, " blocks=");
1883   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1884   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1885            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1886   if (lvl->tag_transparent)
1887     fprintf (stderr, " tag-transparent");
1888   if (lvl->more_cleanups_ok)
1889     fprintf (stderr, " more-cleanups-ok");
1890   if (lvl->have_cleanups)
1891     fprintf (stderr, " have-cleanups");
1892   fprintf (stderr, "\n");
1893   if (lvl->names)
1894     {
1895       fprintf (stderr, " names:\t");
1896       /* We can probably fit 3 names to a line?  */
1897       for (t = lvl->names; t; t = TREE_CHAIN (t))
1898         {
1899           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL)) 
1900             continue;
1901           if (no_print_builtins
1902               && (TREE_CODE (t) == TYPE_DECL)
1903               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
1904             continue;
1905
1906           /* Function decls tend to have longer names.  */
1907           if (TREE_CODE (t) == FUNCTION_DECL)
1908             len = 3;
1909           else
1910             len = 2;
1911           i += len;
1912           if (i > 6)
1913             {
1914               fprintf (stderr, "\n\t");
1915               i = len;
1916             }
1917           print_node_brief (stderr, "", t, 0);
1918           if (t == error_mark_node)
1919             break;
1920         }
1921       if (i)
1922         fprintf (stderr, "\n");
1923     }
1924   if (lvl->tags)
1925     {
1926       fprintf (stderr, " tags:\t");
1927       i = 0;
1928       for (t = lvl->tags; t; t = TREE_CHAIN (t))
1929         {
1930           if (TREE_PURPOSE (t) == NULL_TREE)
1931             len = 3;
1932           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1933             len = 2;
1934           else
1935             len = 4;
1936           i += len;
1937           if (i > 5)
1938             {
1939               fprintf (stderr, "\n\t");
1940               i = len;
1941             }
1942           if (TREE_PURPOSE (t) == NULL_TREE)
1943             {
1944               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
1945               fprintf (stderr, ">");
1946             }
1947           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
1948             print_node_brief (stderr, "", TREE_VALUE (t), 0);
1949           else
1950             {
1951               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
1952               print_node_brief (stderr, "", TREE_VALUE (t), 0);
1953               fprintf (stderr, ">");
1954             }
1955         }
1956       if (i)
1957         fprintf (stderr, "\n");
1958     }
1959   if (lvl->class_shadowed)
1960     {
1961       fprintf (stderr, " class-shadowed:");
1962       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
1963         {
1964           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1965         }
1966       fprintf (stderr, "\n");
1967     }
1968   if (lvl->type_shadowed)
1969     {
1970       fprintf (stderr, " type-shadowed:");
1971       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
1972         {
1973           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
1974         }
1975       fprintf (stderr, "\n");
1976     }
1977 }
1978
1979 void
1980 print_other_binding_stack (stack)
1981      struct binding_level *stack;
1982 {
1983   struct binding_level *level;
1984   for (level = stack; level != global_binding_level; level = level->level_chain)
1985     {
1986       fprintf (stderr, "binding level ");
1987       fprintf (stderr, HOST_PTR_PRINTF, level);
1988       fprintf (stderr, "\n");
1989       print_binding_level (level);
1990     }
1991 }
1992
1993 void
1994 print_binding_stack ()
1995 {
1996   struct binding_level *b;
1997   fprintf (stderr, "current_binding_level=");
1998   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
1999   fprintf (stderr, "\nclass_binding_level=");
2000   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2001   fprintf (stderr, "\nglobal_binding_level=");
2002   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2003   fprintf (stderr, "\n");
2004   if (class_binding_level)
2005     {
2006       for (b = class_binding_level; b; b = b->level_chain)
2007         if (b == current_binding_level)
2008           break;
2009       if (b)
2010         b = class_binding_level;
2011       else
2012         b = current_binding_level;
2013     }
2014   else
2015     b = current_binding_level;
2016   print_other_binding_stack (b);
2017   fprintf (stderr, "global:\n");
2018   print_binding_level (global_binding_level);
2019 }
2020
2021 /* Namespace binding access routines: The namespace_bindings field of
2022    the identifier is polymorphic, with three possible values:
2023    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2024    indicating the BINDING_VALUE of global_namespace. */
2025
2026 /* Check whether the a binding for the name to scope is known.
2027    Assumes that the bindings of the name are already a list
2028    of bindings. Returns the binding found, or NULL_TREE. */
2029
2030 static tree
2031 find_binding (name, scope)
2032      tree name;
2033      tree scope;
2034 {
2035   tree iter, prev = NULL_TREE;
2036
2037   scope = ORIGINAL_NAMESPACE (scope);
2038   
2039   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2040        iter = TREE_CHAIN (iter))
2041     {
2042       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2043       if (BINDING_SCOPE (iter) == scope)
2044         {
2045           /* Move binding found to the front of the list, so
2046              subsequent lookups will find it faster. */
2047           if (prev)
2048             {
2049               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2050               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2051               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2052             }
2053           return iter;
2054         }
2055       prev = iter;
2056     }
2057   return NULL_TREE;
2058 }
2059
2060 /* Always returns a binding for name in scope. If the
2061    namespace_bindings is not a list, convert it to one first.
2062    If no binding is found, make a new one. */
2063
2064 tree
2065 binding_for_name (name, scope)
2066      tree name;
2067      tree scope;
2068 {
2069   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2070   tree result;
2071
2072   scope = ORIGINAL_NAMESPACE (scope);
2073   
2074   if (b && TREE_CODE (b) != CPLUS_BINDING)
2075     {
2076       /* Get rid of optimization for global scope. */
2077       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2078       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2079       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2080     }
2081   if (b && (result = find_binding (name, scope)))
2082     return result;
2083   /* Not found, make a new permanent one. */
2084   push_obstacks (&permanent_obstack, &permanent_obstack);
2085   result = make_node (CPLUS_BINDING);
2086   TREE_CHAIN (result) = b;
2087   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2088   BINDING_SCOPE (result) = scope;
2089   BINDING_TYPE (result) = NULL_TREE;
2090   BINDING_VALUE (result) = NULL_TREE;
2091   pop_obstacks ();
2092   return result;
2093 }
2094
2095 /* Return the binding value for name in scope, considering that
2096    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2097
2098 tree
2099 namespace_binding (name, scope)
2100      tree name;
2101      tree scope;
2102 {
2103   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2104   if (b == NULL_TREE)
2105     return NULL_TREE;
2106   if (scope == NULL_TREE)
2107     scope = global_namespace;
2108   if (TREE_CODE (b) != CPLUS_BINDING)
2109     return (scope == global_namespace) ? b : NULL_TREE;
2110   name = find_binding (name,scope);
2111   if (name == NULL_TREE)
2112     return name;
2113   return BINDING_VALUE (name);
2114 }
2115
2116 /* Set the binding value for name in scope. If modifying the binding
2117    of global_namespace is attempted, try to optimize it. */
2118
2119 void
2120 set_namespace_binding (name, scope, val)
2121      tree name;
2122      tree scope;
2123      tree val;
2124 {
2125   tree b;
2126
2127   if (scope == NULL_TREE)
2128     scope = global_namespace;
2129   
2130   if (scope == global_namespace)
2131     {
2132       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2133       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2134         {
2135           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2136           return;
2137         }
2138     }
2139   b = binding_for_name (name, scope);
2140   BINDING_VALUE (b) = val;
2141 }
2142
2143 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2144    select a name that is unique to this compilation unit.  */
2145
2146 void
2147 push_namespace (name)
2148      tree name;
2149 {
2150   tree d = NULL_TREE;
2151   int need_new = 1;
2152   int implicit_use = 0;
2153   int global = 0;
2154   if (!global_namespace)
2155     {
2156       /* This must be ::. */
2157       my_friendly_assert (name == get_identifier ("::"), 377);
2158       global = 1;
2159     }
2160   else if (!name)
2161     {
2162       /* The name of anonymous namespace is unique for the translation
2163          unit.  */
2164       if (!anonymous_namespace_name)
2165         anonymous_namespace_name = get_file_function_name ('N');
2166       name = anonymous_namespace_name;
2167       d = IDENTIFIER_NAMESPACE_VALUE (name);
2168       if (d)
2169         /* Reopening anonymous namespace.  */
2170         need_new = 0;
2171       implicit_use = 1;
2172     }
2173   else if (current_namespace == global_namespace
2174            && name == DECL_NAME (std_node))
2175     {
2176       in_std++;
2177       return;
2178     }
2179   else
2180     {
2181       /* Check whether this is an extended namespace definition. */
2182       d = IDENTIFIER_NAMESPACE_VALUE (name);
2183       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2184         {
2185           need_new = 0;
2186           if (DECL_NAMESPACE_ALIAS (d))
2187             {
2188               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2189                         d, DECL_NAMESPACE_ALIAS (d));
2190               d = DECL_NAMESPACE_ALIAS (d);
2191             }
2192         }
2193     }
2194   
2195   if (need_new)
2196     {
2197       /* Make a new namespace, binding the name to it. */
2198       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2199       /* The global namespace is not pushed, and the global binding
2200          level is set elsewhere.  */
2201       if (!global)
2202         {
2203           d = pushdecl (d);
2204           pushlevel (0);
2205           declare_namespace_level ();
2206           NAMESPACE_LEVEL (d) = current_binding_level;
2207         }
2208     }
2209   else
2210     resume_binding_level (NAMESPACE_LEVEL (d));
2211
2212   if (implicit_use)
2213     do_using_directive (d);
2214   /* Enter the name space. */
2215   current_namespace = d;
2216 }
2217
2218 /* Pop from the scope of the current namespace.  */
2219
2220 void
2221 pop_namespace ()
2222 {
2223   if (current_namespace == global_namespace)
2224     {
2225       my_friendly_assert (in_std>0, 980421);
2226       in_std--;
2227       return;
2228     }
2229   current_namespace = CP_DECL_CONTEXT (current_namespace);
2230   /* The binding level is not popped, as it might be re-opened later.  */
2231   suspend_binding_level ();
2232 }
2233
2234 /* Push into the scope of the namespace NS, even if it is deeply
2235    nested within another namespace.  */
2236
2237 void
2238 push_nested_namespace (ns)
2239      tree ns;
2240 {
2241   if (ns == global_namespace)
2242     push_to_top_level ();
2243   else
2244     {
2245       push_nested_namespace (CP_DECL_CONTEXT (ns));
2246       push_namespace (DECL_NAME (ns));
2247     }
2248 }
2249
2250 /* Pop back from the scope of the namespace NS, which was previously
2251    entered with push_nested_namespace.  */
2252      
2253 void
2254 pop_nested_namespace (ns)
2255      tree ns;
2256 {
2257   while (ns != global_namespace)
2258     {
2259       pop_namespace ();
2260       ns = CP_DECL_CONTEXT (ns);
2261     }
2262
2263   pop_from_top_level ();
2264 }
2265
2266 \f
2267 /* Subroutines for reverting temporarily to top-level for instantiation
2268    of templates and such.  We actually need to clear out the class- and
2269    local-value slots of all identifiers, so that only the global values
2270    are at all visible.  Simply setting current_binding_level to the global
2271    scope isn't enough, because more binding levels may be pushed.  */
2272 struct saved_scope *scope_chain;
2273
2274 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2275
2276 static void
2277 mark_saved_scope (arg)
2278      void *arg;
2279 {
2280   struct saved_scope *t = *(struct saved_scope **)arg;
2281   while (t)
2282     {
2283       mark_binding_level (&t->class_bindings);
2284       ggc_mark_tree (t->old_bindings);
2285       ggc_mark_tree (t->old_namespace);
2286       ggc_mark_tree (t->class_name);
2287       ggc_mark_tree (t->class_type);
2288       ggc_mark_tree (t->access_specifier);
2289       ggc_mark_tree (t->function_decl);
2290       if (t->lang_base)
2291         ggc_mark_tree_varray (t->lang_base);
2292       ggc_mark_tree (t->lang_name);
2293       ggc_mark_tree (t->x_function_parms);
2294       ggc_mark_tree (t->template_parms);
2295       ggc_mark_tree (t->x_previous_class_type);
2296       ggc_mark_tree (t->x_previous_class_values);
2297       mark_binding_level (&t->bindings);
2298       t = t->prev;
2299     }
2300 }
2301
2302 static tree
2303 store_bindings (names, old_bindings)
2304      tree names, old_bindings;
2305 {
2306   tree t;
2307   for (t = names; t; t = TREE_CHAIN (t))
2308     {
2309       tree binding, t1, id;
2310
2311       if (TREE_CODE (t) == TREE_LIST)
2312         id = TREE_PURPOSE (t);
2313       else
2314         id = DECL_NAME (t);
2315
2316       if (!id 
2317           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2318              we have no IDENTIFIER_BINDING if we have left the class
2319              scope, but cached the class-level declarations.  */
2320           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2321         continue;
2322
2323       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2324         if (TREE_VEC_ELT (t1, 0) == id)
2325           goto skip_it;
2326
2327       binding = make_tree_vec (4);
2328
2329       if (id)
2330         {
2331           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2332           TREE_VEC_ELT (binding, 0) = id;
2333           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2334           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2335           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2336           IDENTIFIER_BINDING (id) = NULL_TREE;
2337           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2338         }
2339       TREE_CHAIN (binding) = old_bindings;
2340       old_bindings = binding;
2341     skip_it:
2342       ;
2343     }
2344   return old_bindings;
2345 }
2346
2347 void
2348 maybe_push_to_top_level (pseudo)
2349      int pseudo;
2350 {
2351   struct saved_scope *s;
2352   struct binding_level *b;
2353   tree old_bindings;
2354   int need_pop;
2355
2356   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2357
2358   b = scope_chain ? current_binding_level : 0;
2359
2360   /* If we're in the middle of some function, save our state.  */
2361   if (current_function)
2362     {
2363       need_pop = 1;
2364       push_function_context_to (NULL_TREE);
2365     }
2366   else
2367     need_pop = 0;
2368
2369   old_bindings = NULL_TREE;
2370   if (scope_chain && previous_class_type)
2371     old_bindings = store_bindings (previous_class_values, old_bindings);
2372
2373   /* Have to include global_binding_level, because class-level decls
2374      aren't listed anywhere useful.  */
2375   for (; b; b = b->level_chain)
2376     {
2377       tree t;
2378
2379       /* Template IDs are inserted into the global level. If they were
2380          inserted into namespace level, finish_file wouldn't find them
2381          when doing pending instantiations. Therefore, don't stop at
2382          namespace level, but continue until :: .  */
2383       if (b == global_binding_level || (pseudo && b->pseudo_global))
2384         break;
2385
2386       old_bindings = store_bindings (b->names, old_bindings);
2387       /* We also need to check class_shadowed to save class-level type
2388          bindings, since pushclass doesn't fill in b->names.  */
2389       if (b->parm_flag == 2)
2390         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2391
2392       /* Unwind type-value slots back to top level.  */
2393       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2394         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2395     }
2396   s->prev = scope_chain;
2397   s->old_bindings = old_bindings;
2398   s->bindings = b;
2399   s->need_pop_function_context = need_pop;
2400   s->function_decl = current_function_decl;
2401
2402   scope_chain = s;
2403   current_function_decl = NULL_TREE;
2404   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2405   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2406   current_lang_name = lang_name_cplusplus;
2407   strict_prototype = strict_prototypes_lang_cplusplus;
2408   current_namespace = global_namespace;
2409
2410   push_obstacks (&permanent_obstack, &permanent_obstack);
2411 }
2412
2413 void
2414 push_to_top_level ()
2415 {
2416   maybe_push_to_top_level (0);
2417 }
2418
2419 void
2420 pop_from_top_level ()
2421 {
2422   struct saved_scope *s = scope_chain;
2423   tree t;
2424
2425   /* Clear out class-level bindings cache.  */
2426   if (previous_class_type)
2427     invalidate_class_lookup_cache ();
2428
2429   pop_obstacks ();
2430
2431   VARRAY_FREE (current_lang_base);
2432
2433   scope_chain = s->prev;
2434   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2435     {
2436       tree id = TREE_VEC_ELT (t, 0);
2437       if (id)
2438         {
2439           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2440           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2441           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2442         }
2443     }
2444
2445   if (current_lang_name == lang_name_cplusplus)
2446     strict_prototype = strict_prototypes_lang_cplusplus;
2447   else if (current_lang_name == lang_name_c)
2448     strict_prototype = strict_prototypes_lang_c;
2449
2450   /* If we were in the middle of compiling a function, restore our
2451      state.  */
2452   if (s->need_pop_function_context)
2453     pop_function_context_from (NULL_TREE);
2454   current_function_decl = s->function_decl;
2455
2456   free (s);
2457 }
2458 \f
2459 /* Push a definition of struct, union or enum tag "name".
2460    into binding_level "b".   "type" should be the type node, 
2461    We assume that the tag "name" is not already defined.
2462
2463    Note that the definition may really be just a forward reference.
2464    In that case, the TYPE_SIZE will be a NULL_TREE.
2465
2466    C++ gratuitously puts all these tags in the name space.  */
2467
2468 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2469    record the shadowed value for this binding contour.  TYPE is
2470    the type that ID maps to.  */
2471
2472 static void
2473 set_identifier_type_value_with_scope (id, type, b)
2474      tree id;
2475      tree type;
2476      struct binding_level *b;
2477 {
2478   if (!b->namespace_p)
2479     {
2480       /* Shadow the marker, not the real thing, so that the marker
2481          gets restored later. */
2482       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2483       b->type_shadowed
2484         = tree_cons (id, old_type_value, b->type_shadowed);
2485     }
2486   else
2487     {
2488       tree binding = binding_for_name (id, current_namespace);
2489       BINDING_TYPE (binding) = type;
2490       /* Store marker instead of real type. */
2491       type = global_type_node;
2492     }
2493   SET_IDENTIFIER_TYPE_VALUE (id, type);
2494 }
2495
2496 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2497
2498 void
2499 set_identifier_type_value (id, type)
2500      tree id;
2501      tree type;
2502 {
2503   set_identifier_type_value_with_scope (id, type, current_binding_level);
2504 }
2505
2506 /* Return the type associated with id. */
2507
2508 tree
2509 identifier_type_value (id)
2510      tree id;
2511 {
2512   /* There is no type with that name, anywhere. */
2513   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2514     return NULL_TREE;
2515   /* This is not the type marker, but the real thing. */
2516   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2517     return REAL_IDENTIFIER_TYPE_VALUE (id);
2518   /* Have to search for it. It must be on the global level, now.
2519      Ask lookup_name not to return non-types. */
2520   id = lookup_name_real (id, 2, 1, 0);
2521   if (id)
2522     return TREE_TYPE (id);
2523   return NULL_TREE;
2524 }
2525
2526 /* Pop off extraneous binding levels left over due to syntax errors.
2527
2528    We don't pop past namespaces, as they might be valid.  */
2529
2530 void
2531 pop_everything ()
2532 {
2533 #ifdef DEBUG_CP_BINDING_LEVELS
2534   fprintf (stderr, "XXX entering pop_everything ()\n");
2535 #endif
2536   while (!toplevel_bindings_p ())
2537     {
2538       if (current_binding_level->parm_flag == 2)
2539         pop_nested_class ();
2540       else
2541         poplevel (0, 0, 0);
2542     }
2543 #ifdef DEBUG_CP_BINDING_LEVELS
2544   fprintf (stderr, "XXX leaving pop_everything ()\n");
2545 #endif
2546 }
2547
2548 /* The type TYPE is being declared.  If it is a class template, or a
2549    specialization of a class template, do any processing required and
2550    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2551    being declared a friend.  B is the binding level at which this TYPE
2552    should be bound.
2553
2554    Returns the TYPE_DECL for TYPE, which may have been altered by this
2555    processing.  */
2556
2557 static tree 
2558 maybe_process_template_type_declaration (type, globalize, b)
2559      tree type;
2560      int globalize;
2561      struct binding_level* b;
2562 {
2563   tree decl = TYPE_NAME (type);
2564  
2565   if (processing_template_parmlist)
2566     /* You can't declare a new template type in a template parameter
2567        list.  But, you can declare a non-template type:
2568        
2569          template <class A*> struct S;
2570        
2571        is a forward-declaration of `A'.  */
2572     ;
2573   else 
2574     {
2575       maybe_check_template_type (type);
2576
2577       my_friendly_assert (IS_AGGR_TYPE (type) 
2578                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2579                           
2580                           
2581       if (processing_template_decl)
2582         {
2583           /* This may change after the call to
2584              push_template_decl_real, but we want the original value.  */
2585           tree name = DECL_NAME (decl);
2586
2587           decl = push_template_decl_real (decl, globalize);
2588           /* If the current binding level is the binding level for the
2589              template parameters (see the comment in
2590              begin_template_parm_list) and the enclosing level is a class
2591              scope, and we're not looking at a friend, push the
2592              declaration of the member class into the class scope.  In the
2593              friend case, push_template_decl will already have put the
2594              friend into global scope, if appropriate.  */
2595           if (TREE_CODE (type) != ENUMERAL_TYPE
2596               && !globalize && b->pseudo_global
2597               && b->level_chain->parm_flag == 2)
2598             {
2599               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2600               /* Put this tag on the list of tags for the class, since
2601                  that won't happen below because B is not the class
2602                  binding level, but is instead the pseudo-global level.  */
2603               b->level_chain->tags = 
2604                 tree_cons (name, type, b->level_chain->tags);
2605               if (TYPE_SIZE (current_class_type) == NULL_TREE)
2606                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2607             }
2608         }
2609     }
2610
2611   return decl;
2612 }
2613
2614 /* In C++, you don't have to write `struct S' to refer to `S'; you
2615    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2616    if the user had written `typedef struct S S'.  Create and return
2617    the TYPE_DECL for TYPE.  */
2618
2619 tree
2620 create_implicit_typedef (name, type)
2621      tree name;
2622      tree type;
2623 {
2624   tree decl;
2625
2626   decl = build_decl (TYPE_DECL, name, type);
2627   SET_DECL_ARTIFICIAL (decl);
2628   /* There are other implicit type declarations, like the one *within*
2629      a class that allows you to write `S::S'.  We must distinguish
2630      amongst these.  */
2631   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2632   TYPE_NAME (type) = decl;
2633
2634   return decl;
2635 }
2636
2637 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2638    Normally put it into the inner-most non-tag-transparent scope,
2639    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2640    The latter is needed for implicit declarations.  */
2641
2642 void
2643 pushtag (name, type, globalize)
2644      tree name, type;
2645      int globalize;
2646 {
2647   register struct binding_level *b;
2648
2649   b = current_binding_level;
2650   while (b->tag_transparent
2651          || (globalize && b->parm_flag == 2))
2652     b = b->level_chain;
2653
2654   b->tags = tree_cons (name, type, b->tags);
2655
2656   if (name)
2657     {
2658       /* Do C++ gratuitous typedefing.  */
2659       if (IDENTIFIER_TYPE_VALUE (name) != type)
2660         {
2661           register tree d = NULL_TREE;
2662           int in_class = 0;
2663           tree context = TYPE_CONTEXT (type);
2664
2665           if (! context)
2666             {
2667               tree cs = current_scope ();
2668
2669               if (! globalize)
2670                 context = cs;
2671               else if (cs != NULL_TREE 
2672                        && TREE_CODE_CLASS (TREE_CODE (cs)) == 't')
2673                 /* When declaring a friend class of a local class, we want
2674                    to inject the newly named class into the scope
2675                    containing the local class, not the namespace scope.  */
2676                 context = hack_decl_function_context (get_type_decl (cs));
2677             }
2678           if (!context)
2679             context = current_namespace;
2680
2681           if ((b->pseudo_global && b->level_chain->parm_flag == 2)
2682               || b->parm_flag == 2)
2683             in_class = 1;
2684
2685           if (current_lang_name == lang_name_java)
2686             TYPE_FOR_JAVA (type) = 1;
2687
2688           d = create_implicit_typedef (name, type);
2689           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2690           if (! in_class)
2691             set_identifier_type_value_with_scope (name, type, b);
2692
2693           d = maybe_process_template_type_declaration (type,
2694                                                        globalize, b);
2695
2696           if (b->parm_flag == 2)
2697             {
2698               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2699                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2700                    class.  But if it's a member template class, we
2701                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2702                    is done later.  */
2703                 finish_member_declaration (d);
2704               else
2705                 pushdecl_class_level (d);
2706             }
2707           else
2708             d = pushdecl_with_scope (d, b);
2709
2710           if (ANON_AGGRNAME_P (name))
2711             DECL_IGNORED_P (d) = 1;
2712
2713           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2714           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2715           if (!uses_template_parms (type))
2716             DECL_ASSEMBLER_NAME (d)
2717               = get_identifier (build_overload_name (type, 1, 1));
2718         }
2719       if (b->parm_flag == 2)
2720         {
2721           if (TYPE_SIZE (current_class_type) == NULL_TREE)
2722             CLASSTYPE_TAGS (current_class_type) = b->tags;
2723         }
2724     }
2725
2726   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2727     /* Use the canonical TYPE_DECL for this node.  */
2728     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2729   else
2730     {
2731       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2732          will be the tagged type we just added to the current
2733          binding level.  This fake NULL-named TYPE_DECL node helps
2734          dwarfout.c to know when it needs to output a
2735          representation of a tagged type, and it also gives us a
2736          convenient place to record the "scope start" address for
2737          the tagged type.  */
2738
2739       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2740       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2741     }
2742 }
2743
2744 /* Counter used to create anonymous type names.  */
2745
2746 static int anon_cnt = 0;
2747
2748 /* Return an IDENTIFIER which can be used as a name for
2749    anonymous structs and unions.  */
2750
2751 tree
2752 make_anon_name ()
2753 {
2754   char buf[32];
2755
2756   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2757   return get_identifier (buf);
2758 }
2759
2760 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2761    This keeps dbxout from getting confused.  */
2762
2763 void
2764 clear_anon_tags ()
2765 {
2766   register struct binding_level *b;
2767   register tree tags;
2768   static int last_cnt = 0;
2769
2770   /* Fast out if no new anon names were declared.  */
2771   if (last_cnt == anon_cnt)
2772     return;
2773
2774   b = current_binding_level;
2775   while (b->tag_transparent)
2776     b = b->level_chain;
2777   tags = b->tags;
2778   while (tags)
2779     {
2780       /* A NULL purpose means we have already processed all tags
2781          from here to the end of the list.  */
2782       if (TREE_PURPOSE (tags) == NULL_TREE)
2783         break;
2784       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2785         TREE_PURPOSE (tags) = NULL_TREE;
2786       tags = TREE_CHAIN (tags);
2787     }
2788   last_cnt = anon_cnt;
2789 }
2790 \f
2791 /* Subroutine of duplicate_decls: return truthvalue of whether
2792    or not types of these decls match.
2793
2794    For C++, we must compare the parameter list so that `int' can match
2795    `int&' in a parameter position, but `int&' is not confused with
2796    `const int&'.  */
2797
2798 int
2799 decls_match (newdecl, olddecl)
2800      tree newdecl, olddecl;
2801 {
2802   int types_match;
2803
2804   if (newdecl == olddecl)
2805     return 1;
2806
2807   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2808     /* If the two DECLs are not even the same kind of thing, we're not
2809        interested in their types.  */
2810     return 0;
2811
2812   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2813     {
2814       tree f1 = TREE_TYPE (newdecl);
2815       tree f2 = TREE_TYPE (olddecl);
2816       tree p1 = TYPE_ARG_TYPES (f1);
2817       tree p2 = TYPE_ARG_TYPES (f2);
2818
2819       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl)
2820           && ! (DECL_LANGUAGE (newdecl) == lang_c
2821                 && DECL_LANGUAGE (olddecl) == lang_c))
2822         return 0;
2823
2824       /* When we parse a static member function definition,
2825          we put together a FUNCTION_DECL which thinks its type
2826          is METHOD_TYPE.  Change that to FUNCTION_TYPE, and
2827          proceed.  */
2828       if (TREE_CODE (f1) == METHOD_TYPE && DECL_STATIC_FUNCTION_P (olddecl))
2829         revert_static_member_fn (&newdecl, &f1, &p1);
2830       else if (TREE_CODE (f2) == METHOD_TYPE
2831                && DECL_STATIC_FUNCTION_P (newdecl))
2832         revert_static_member_fn (&olddecl, &f2, &p2);
2833
2834       /* Here we must take care of the case where new default
2835          parameters are specified.  Also, warn if an old
2836          declaration becomes ambiguous because default
2837          parameters may cause the two to be ambiguous.  */
2838       if (TREE_CODE (f1) != TREE_CODE (f2))
2839         {
2840           if (TREE_CODE (f1) == OFFSET_TYPE)
2841             cp_compiler_error ("`%D' redeclared as member function", newdecl);
2842           else
2843             cp_compiler_error ("`%D' redeclared as non-member function", newdecl);
2844           return 0;
2845         }
2846
2847       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2848         {
2849           if (! strict_prototypes_lang_c && DECL_LANGUAGE (olddecl) == lang_c
2850               && p2 == NULL_TREE)
2851             {
2852               types_match = self_promoting_args_p (p1);
2853               if (p1 == void_list_node)
2854                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2855             }
2856           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2857                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2858             {
2859               types_match = self_promoting_args_p (p2);
2860               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2861             }
2862           else
2863             types_match = compparms (p1, p2);
2864         }
2865       else
2866         types_match = 0;
2867     }
2868   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2869     {
2870       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2871                                 DECL_TEMPLATE_PARMS (olddecl)))
2872         return 0;
2873       
2874       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2875         types_match = 1;
2876       else
2877         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2878                                    DECL_TEMPLATE_RESULT (newdecl));
2879     }
2880   else
2881     {
2882       if (TREE_TYPE (newdecl) == error_mark_node)
2883         types_match = TREE_TYPE (olddecl) == error_mark_node;
2884       else if (TREE_TYPE (olddecl) == NULL_TREE)
2885         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2886       else if (TREE_TYPE (newdecl) == NULL_TREE)
2887         types_match = 0;
2888       else
2889         types_match = comptypes (TREE_TYPE (newdecl),
2890                                  TREE_TYPE (olddecl),
2891                                  COMPARE_REDECLARATION);
2892     }
2893
2894   return types_match;
2895 }
2896
2897 /* If NEWDECL is `static' and an `extern' was seen previously,
2898    warn about it.  OLDDECL is the previous declaration.
2899
2900    Note that this does not apply to the C++ case of declaring
2901    a variable `extern const' and then later `const'.
2902
2903    Don't complain about built-in functions, since they are beyond
2904    the user's control.  */
2905
2906 static void
2907 warn_extern_redeclared_static (newdecl, olddecl)
2908      tree newdecl, olddecl;
2909 {
2910   static const char *explicit_extern_static_warning
2911     = "`%D' was declared `extern' and later `static'";
2912   static const char *implicit_extern_static_warning
2913     = "`%D' was declared implicitly `extern' and later `static'";
2914
2915   tree name;
2916
2917   if (TREE_CODE (newdecl) == TYPE_DECL)
2918     return;
2919   
2920   /* Don't get confused by static member functions; that's a different
2921      use of `static'.  */
2922   if (TREE_CODE (newdecl) == FUNCTION_DECL
2923       && DECL_STATIC_FUNCTION_P (newdecl))
2924     return;
2925
2926   /* If the old declaration was `static', or the new one isn't, then
2927      then everything is OK.  */
2928   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
2929     return;
2930
2931   /* It's OK to declare a builtin function as `static'.  */
2932   if (TREE_CODE (olddecl) == FUNCTION_DECL
2933       && DECL_ARTIFICIAL (olddecl))
2934     return;
2935
2936   name = DECL_ASSEMBLER_NAME (newdecl);
2937   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
2938               ? implicit_extern_static_warning
2939               : explicit_extern_static_warning, newdecl);
2940   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
2941 }
2942
2943 /* Handle when a new declaration NEWDECL has the same name as an old
2944    one OLDDECL in the same binding contour.  Prints an error message
2945    if appropriate.
2946
2947    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
2948    Otherwise, return 0.  */
2949
2950 int
2951 duplicate_decls (newdecl, olddecl)
2952      tree newdecl, olddecl;
2953 {
2954   unsigned olddecl_uid = DECL_UID (olddecl);
2955   int olddecl_friend = 0, types_match = 0;
2956   int new_defines_function = 0;
2957
2958   if (newdecl == olddecl)
2959     return 1;
2960
2961   types_match = decls_match (newdecl, olddecl);
2962
2963   /* If either the type of the new decl or the type of the old decl is an
2964      error_mark_node, then that implies that we have already issued an
2965      error (earlier) for some bogus type specification, and in that case,
2966      it is rather pointless to harass the user with yet more error message
2967      about the same declaration, so just pretend the types match here.  */
2968   if (TREE_TYPE (newdecl) == error_mark_node
2969       || TREE_TYPE (olddecl) == error_mark_node)
2970     types_match = 1;
2971  
2972   /* Check for redeclaration and other discrepancies. */
2973   if (TREE_CODE (olddecl) == FUNCTION_DECL
2974       && DECL_ARTIFICIAL (olddecl))
2975     {
2976       if (TREE_CODE (newdecl) != FUNCTION_DECL)
2977         {
2978           /* If you declare a built-in or predefined function name as static,
2979              the old definition is overridden, but optionally warn this was a
2980              bad choice of name.  */
2981           if (! TREE_PUBLIC (newdecl))
2982             {
2983               if (warn_shadow)
2984                 cp_warning ("shadowing %s function `%#D'",
2985                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
2986                             olddecl);
2987               /* Discard the old built-in function.  */
2988               return 0;
2989             }
2990           /* If the built-in is not ansi, then programs can override
2991              it even globally without an error.  */
2992           else if (! DECL_BUILT_IN (olddecl))
2993             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
2994                         olddecl, newdecl);
2995           else
2996             {
2997               cp_error ("declaration of `%#D'", newdecl);
2998               cp_error ("conflicts with built-in declaration `%#D'",
2999                         olddecl);
3000             }
3001           return 0;
3002         }
3003       else if (!types_match)
3004         {
3005           if ((DECL_LANGUAGE (newdecl) == lang_c
3006                && DECL_LANGUAGE (olddecl) == lang_c)
3007               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3008                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3009             {
3010               /* A near match; override the builtin.  */
3011
3012               if (TREE_PUBLIC (newdecl))
3013                 {
3014                   cp_warning ("new declaration `%#D'", newdecl);
3015                   cp_warning ("ambiguates built-in declaration `%#D'",
3016                               olddecl);
3017                 }
3018               else if (warn_shadow)
3019                 cp_warning ("shadowing %s function `%#D'",
3020                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3021                             olddecl);
3022             }
3023           else
3024             /* Discard the old built-in function.  */
3025             return 0;
3026         }
3027       
3028       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3029         {
3030           /* If a builtin function is redeclared as `static', merge
3031              the declarations, but make the original one static.  */
3032           DECL_THIS_STATIC (olddecl) = 1;
3033           TREE_PUBLIC (olddecl) = 0;
3034
3035           /* Make the olddeclaration consistent with the new one so that
3036              all remnants of the builtin-ness of this function will be
3037              banished.  */
3038           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3039           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3040           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3041           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3042                                        newdecl);
3043         }
3044     }
3045   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3046     {
3047       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3048            && TREE_CODE (newdecl) != TYPE_DECL
3049            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3050                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3051           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3052               && TREE_CODE (olddecl) != TYPE_DECL
3053               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3054                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3055                         == TYPE_DECL))))
3056         {
3057           /* We do nothing special here, because C++ does such nasty
3058              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3059              get shadowed, and know that if we need to find a TYPE_DECL
3060              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3061              slot of the identifier.  */
3062           return 0;
3063         }
3064
3065       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3066            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3067           || (TREE_CODE (olddecl) == FUNCTION_DECL
3068               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3069         return 0;
3070
3071       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3072       if (TREE_CODE (olddecl) == TREE_LIST)
3073         olddecl = TREE_VALUE (olddecl);
3074       cp_error_at ("previous declaration of `%#D'", olddecl);
3075
3076       /* New decl is completely inconsistent with the old one =>
3077          tell caller to replace the old one.  */
3078
3079       return 0;
3080     }
3081   else if (!types_match)
3082     {
3083       if (DECL_REAL_CONTEXT (newdecl) != DECL_REAL_CONTEXT (olddecl))
3084         /* These are certainly not duplicate declarations; they're
3085            from different scopes.  */
3086         return 0;
3087
3088       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3089         {
3090           /* The name of a class template may not be declared to refer to
3091              any other template, class, function, object, namespace, value,
3092              or type in the same scope.  */
3093           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3094               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3095             {
3096               cp_error ("declaration of template `%#D'", newdecl);
3097               cp_error_at ("conflicts with previous declaration `%#D'",
3098                            olddecl);
3099             }
3100           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3101                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3102                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3103                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3104                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3105                                            DECL_TEMPLATE_PARMS (olddecl)))
3106             {
3107               cp_error ("new declaration `%#D'", newdecl);
3108               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3109             }
3110           return 0;
3111         }
3112       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3113         {
3114           if (DECL_LANGUAGE (newdecl) == lang_c
3115               && DECL_LANGUAGE (olddecl) == lang_c)
3116             {
3117               cp_error ("declaration of C function `%#D' conflicts with",
3118                         newdecl);
3119               cp_error_at ("previous declaration `%#D' here", olddecl);
3120             }
3121           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3122                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3123             {
3124               cp_error ("new declaration `%#D'", newdecl);
3125               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3126             }
3127           else
3128             return 0;
3129         }
3130
3131       /* Already complained about this, so don't do so again.  */
3132       else if (current_class_type == NULL_TREE
3133           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3134         {
3135           cp_error ("conflicting types for `%#D'", newdecl);
3136           cp_error_at ("previous declaration as `%#D'", olddecl);
3137         }
3138     }
3139   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3140             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3141                  && (!DECL_TEMPLATE_INFO (newdecl)
3142                      || (DECL_TI_TEMPLATE (newdecl) 
3143                          != DECL_TI_TEMPLATE (olddecl))))
3144                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3145                     && (!DECL_TEMPLATE_INFO (olddecl)
3146                         || (DECL_TI_TEMPLATE (olddecl) 
3147                             != DECL_TI_TEMPLATE (newdecl))))))
3148     /* It's OK to have a template specialization and a non-template
3149        with the same type, or to have specializations of two
3150        different templates with the same type.  Note that if one is a
3151        specialization, and the other is an instantiation of the same
3152        template, that we do not exit at this point.  That situation
3153        can occur if we instantiate a template class, and then
3154        specialize one of its methods.  This situation is legal, but
3155        the declarations must be merged in the usual way.  */
3156     return 0;
3157   else if (TREE_CODE (newdecl) == FUNCTION_DECL 
3158            && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 
3159                 && !DECL_USE_TEMPLATE (newdecl))
3160                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3161                    && !DECL_USE_TEMPLATE (olddecl))))
3162     /* One of the declarations is a template instantiation, and the
3163        other is not a template at all.  That's OK.  */
3164     return 0;
3165   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3166            && DECL_NAMESPACE_ALIAS (newdecl)
3167            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3168     /* Redeclaration of namespace alias, ignore it. */
3169     return 1;
3170   else
3171     {
3172       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3173       if (errmsg)
3174         {
3175           cp_error (errmsg, newdecl);
3176           if (DECL_NAME (olddecl) != NULL_TREE)
3177             cp_error_at ((DECL_INITIAL (olddecl)
3178                           && namespace_bindings_p ())
3179                          ? "`%#D' previously defined here"
3180                          : "`%#D' previously declared here", olddecl);
3181         }
3182       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3183                && DECL_INITIAL (olddecl) != NULL_TREE
3184                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3185                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3186         {
3187           /* Prototype decl follows defn w/o prototype.  */
3188           cp_warning_at ("prototype for `%#D'", newdecl);
3189           cp_warning_at ("follows non-prototype definition here", olddecl);
3190         }
3191       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3192                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3193         {
3194           /* extern "C" int foo ();
3195              int foo () { bar (); }
3196              is OK.  */
3197           if (current_lang_stack
3198               == &VARRAY_TREE (current_lang_base, 0))
3199             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3200           else
3201             {
3202               cp_error_at ("previous declaration of `%#D' with %L linkage",
3203                            olddecl, DECL_LANGUAGE (olddecl));
3204               cp_error ("conflicts with new declaration with %L linkage",
3205                         DECL_LANGUAGE (newdecl));
3206             }
3207         }
3208
3209       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3210         ;
3211       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3212         {
3213           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3214           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3215           int i = 1;
3216
3217           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3218             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3219         
3220           for (; t1 && t1 != void_list_node;
3221                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3222             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3223               {
3224                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3225                                            TREE_PURPOSE (t2)))
3226                   {
3227                     if (pedantic)
3228                       {
3229                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3230                                     i, newdecl);
3231                         cp_pedwarn_at ("after previous specification in `%#D'",
3232                                        olddecl);
3233                       }
3234                   }
3235                 else
3236                   {
3237                     cp_error ("default argument given for parameter %d of `%#D'",
3238                               i, newdecl);
3239                     cp_error_at ("after previous specification in `%#D'",
3240                                  olddecl);
3241                   }
3242               }
3243
3244           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3245               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3246             {
3247               cp_warning ("`%#D' was used before it was declared inline",
3248                           newdecl);
3249               cp_warning_at ("previous non-inline declaration here",
3250                              olddecl);
3251             }
3252         }
3253     }
3254
3255   /* If new decl is `static' and an `extern' was seen previously,
3256      warn about it.  */
3257   warn_extern_redeclared_static (newdecl, olddecl);
3258
3259   /* We have committed to returning 1 at this point.  */
3260   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3261     {
3262       /* Now that functions must hold information normally held
3263          by field decls, there is extra work to do so that
3264          declaration information does not get destroyed during
3265          definition.  */
3266       if (DECL_VINDEX (olddecl))
3267         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3268       if (DECL_CONTEXT (olddecl))
3269         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3270       if (DECL_CLASS_CONTEXT (olddecl))
3271         DECL_CLASS_CONTEXT (newdecl) = DECL_CLASS_CONTEXT (olddecl);
3272       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3273         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3274       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3275       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3276       DECL_ABSTRACT_VIRTUAL_P (newdecl) |= DECL_ABSTRACT_VIRTUAL_P (olddecl);
3277       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3278       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3279       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3280       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3281       
3282       /* Optionally warn about more than one declaration for the same
3283          name, but don't warn about a function declaration followed by a
3284          definition.  */
3285       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3286           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3287           /* Don't warn about extern decl followed by definition. */
3288           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3289           /* Don't warn about friends, let add_friend take care of it. */
3290           && ! DECL_FRIEND_P (newdecl))
3291         {
3292           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3293           cp_warning_at ("previous declaration of `%D'", olddecl);
3294         }
3295     }
3296
3297   /* Deal with C++: must preserve virtual function table size.  */
3298   if (TREE_CODE (olddecl) == TYPE_DECL)
3299     {
3300       register tree newtype = TREE_TYPE (newdecl);
3301       register tree oldtype = TREE_TYPE (olddecl);
3302
3303       if (newtype != error_mark_node && oldtype != error_mark_node
3304           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3305         {
3306           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3307           CLASSTYPE_FRIEND_CLASSES (newtype)
3308             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3309         }
3310     }
3311
3312   /* Copy all the DECL_... slots specified in the new decl
3313      except for any that we copy here from the old type.  */
3314   DECL_MACHINE_ATTRIBUTES (newdecl) 
3315     = merge_machine_decl_attributes (olddecl, newdecl);
3316
3317   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3318     {
3319       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3320                              DECL_TEMPLATE_RESULT (olddecl)))
3321         cp_error ("invalid redeclaration of %D", newdecl);
3322       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3323       DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 
3324         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3325                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3326  
3327       return 1;
3328     }
3329     
3330   if (types_match)
3331     {
3332       /* Automatically handles default parameters.  */
3333       tree oldtype = TREE_TYPE (olddecl);
3334       tree newtype;
3335
3336       /* Make sure we put the new type in the same obstack as the old one.  */
3337       if (oldtype)
3338         push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
3339       else
3340         push_permanent_obstack ();
3341
3342       /* Merge the data types specified in the two decls.  */
3343       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3344
3345       if (TREE_CODE (newdecl) == VAR_DECL)
3346         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3347       /* Do this after calling `common_type' so that default
3348          parameters don't confuse us.  */
3349       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3350           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3351               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3352         {
3353           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3354                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3355           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3356                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3357
3358           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3359               && DECL_SOURCE_LINE (olddecl) != 0
3360               && flag_exceptions
3361               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3362                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3363             {
3364               cp_error ("declaration of `%F' throws different exceptions",
3365                         newdecl);
3366               cp_error_at ("to previous declaration `%F'", olddecl);
3367             }
3368         }
3369       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3370
3371       /* Lay the type out, unless already done.  */
3372       if (! same_type_p (newtype, oldtype)
3373           && TREE_TYPE (newdecl) != error_mark_node
3374           && !(processing_template_decl && uses_template_parms (newdecl)))
3375         layout_type (TREE_TYPE (newdecl));
3376
3377       if ((TREE_CODE (newdecl) == VAR_DECL
3378            || TREE_CODE (newdecl) == PARM_DECL
3379            || TREE_CODE (newdecl) == RESULT_DECL
3380            || TREE_CODE (newdecl) == FIELD_DECL
3381            || TREE_CODE (newdecl) == TYPE_DECL)
3382           && !(processing_template_decl && uses_template_parms (newdecl)))
3383         layout_decl (newdecl, 0);
3384
3385       /* Merge the type qualifiers.  */
3386       if (TREE_READONLY (newdecl))
3387         TREE_READONLY (olddecl) = 1;
3388       if (TREE_THIS_VOLATILE (newdecl))
3389         TREE_THIS_VOLATILE (olddecl) = 1;
3390
3391       /* Merge the initialization information.  */
3392       if (DECL_INITIAL (newdecl) == NULL_TREE
3393           && DECL_INITIAL (olddecl) != NULL_TREE)
3394         {
3395           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3396           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3397           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3398           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3399               && DECL_LANG_SPECIFIC (newdecl)
3400               && DECL_LANG_SPECIFIC (olddecl))
3401             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3402         }
3403
3404       /* Merge the section attribute.
3405          We want to issue an error if the sections conflict but that must be
3406          done later in decl_attributes since we are called before attributes
3407          are assigned.  */
3408       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3409         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3410
3411       /* Keep the old rtl since we can safely use it.  */
3412       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3413
3414       pop_obstacks ();
3415     }
3416   /* If cannot merge, then use the new type and qualifiers,
3417      and don't preserve the old rtl.  */
3418   else
3419     {
3420       /* Clean out any memory we had of the old declaration.  */
3421       tree oldstatic = value_member (olddecl, static_aggregates);
3422       if (oldstatic)
3423         TREE_VALUE (oldstatic) = error_mark_node;
3424
3425       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3426       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3427       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3428       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3429     }
3430
3431   /* Merge the storage class information.  */
3432   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3433   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3434   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3435   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3436   if (! DECL_EXTERNAL (olddecl))
3437     DECL_EXTERNAL (newdecl) = 0;
3438   
3439   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3440     {
3441       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3442       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3443       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3444       DECL_TEMPLATE_INSTANTIATED (newdecl) 
3445         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3446       /* Don't really know how much of the language-specific
3447          values we should copy from old to new.  */
3448       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3449       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3450       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3451       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3452       olddecl_friend = DECL_FRIEND_P (olddecl);
3453
3454       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3455       if (TREE_CODE (newdecl) == FUNCTION_DECL
3456           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3457         DECL_BEFRIENDING_CLASSES (newdecl)
3458           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3459                      DECL_BEFRIENDING_CLASSES (olddecl));
3460     }
3461
3462   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3463     {
3464       if (DECL_TEMPLATE_INSTANTIATION (olddecl) 
3465           && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 
3466         {
3467           /* If newdecl is not a specialization, then it is not a
3468              template-related function at all.  And that means that we
3469              shoud have exited above, returning 0.  */
3470           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3471                               0);
3472
3473           if (TREE_USED (olddecl)) 
3474             /* From [temp.expl.spec]:
3475                
3476                If a template, a member template or the member of a class
3477                template is explicitly specialized then that
3478                specialization shall be declared before the first use of
3479                that specialization that would cause an implicit
3480                instantiation to take place, in every translation unit in
3481                which such a use occurs.  */
3482             cp_error ("explicit specialization of %D after first use", 
3483                       olddecl);
3484
3485           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3486         }
3487       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3488
3489       /* If either decl says `inline', this fn is inline, unless its
3490          definition was passed already.  */
3491       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3492         DECL_INLINE (olddecl) = 1;
3493       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3494
3495       if (! types_match)
3496         {
3497           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3498           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3499           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3500         }
3501       if (! types_match || new_defines_function)
3502         {
3503           /* These need to be copied so that the names are available.
3504              Note that if the types do match, we'll preserve inline
3505              info and other bits, but if not, we won't.  */
3506           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3507           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3508         }
3509       if (new_defines_function)
3510         /* If defining a function declared with other language
3511            linkage, use the previously declared language linkage.  */
3512         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3513       else if (types_match)
3514         {
3515           /* If redeclaring a builtin function, and not a definition,
3516              it stays built in.  */
3517           if (DECL_BUILT_IN (olddecl))
3518             {
3519               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3520               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3521               /* If we're keeping the built-in definition, keep the rtl,
3522                  regardless of declaration matches.  */
3523               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3524             }
3525           else
3526             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3527
3528           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3529           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3530             /* Previously saved insns go together with
3531                the function's previous definition.  */
3532             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3533           /* Don't clear out the arguments if we're redefining a function.  */
3534           if (DECL_ARGUMENTS (olddecl))
3535             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3536         }
3537       if (DECL_LANG_SPECIFIC (olddecl))
3538         DECL_MAIN_VARIANT (newdecl) = DECL_MAIN_VARIANT (olddecl);
3539     }
3540
3541   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3542     {
3543       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3544     }
3545
3546   /* Now preserve various other info from the definition.  */
3547   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3548   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3549   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3550   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3551
3552   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3553     {
3554       int function_size;
3555
3556       function_size = sizeof (struct tree_decl);
3557
3558       bcopy ((char *) newdecl + sizeof (struct tree_common),
3559              (char *) olddecl + sizeof (struct tree_common),
3560              function_size - sizeof (struct tree_common));
3561
3562       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3563         {
3564           /* If newdecl is a template instantiation, it is possible that
3565              the following sequence of events has occurred:
3566
3567              o A friend function was declared in a class template.  The
3568              class template was instantiated.  
3569
3570              o The instantiation of the friend declaration was 
3571              recorded on the instantiation list, and is newdecl.  
3572
3573              o Later, however, instantiate_class_template called pushdecl
3574              on the newdecl to perform name injection.  But, pushdecl in
3575              turn called duplicate_decls when it discovered that another
3576              declaration of a global function with the same name already
3577              existed. 
3578
3579              o Here, in duplicate_decls, we decided to clobber newdecl.
3580
3581              If we're going to do that, we'd better make sure that
3582              olddecl, and not newdecl, is on the list of
3583              instantiations so that if we try to do the instantiation
3584              again we won't get the clobbered declaration.  */
3585
3586           tree tmpl = DECL_TI_TEMPLATE (newdecl); 
3587           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); 
3588
3589           for (; decls; decls = TREE_CHAIN (decls))
3590             if (TREE_VALUE (decls) == newdecl)
3591               TREE_VALUE (decls) = olddecl;
3592         }
3593     }
3594   else
3595     {
3596       bcopy ((char *) newdecl + sizeof (struct tree_common),
3597              (char *) olddecl + sizeof (struct tree_common),
3598              sizeof (struct tree_decl) - sizeof (struct tree_common)
3599              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3600     }
3601
3602   DECL_UID (olddecl) = olddecl_uid;
3603   if (olddecl_friend)
3604     DECL_FRIEND_P (olddecl) = 1;
3605
3606   /* NEWDECL contains the merged attribute lists.
3607      Update OLDDECL to be the same.  */
3608   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3609
3610   return 1;
3611 }
3612
3613 /* Record a decl-node X as belonging to the current lexical scope.
3614    Check for errors (such as an incompatible declaration for the same
3615    name already seen in the same scope).
3616
3617    Returns either X or an old decl for the same name.
3618    If an old decl is returned, it may have been smashed
3619    to agree with what X says.  */
3620
3621 tree
3622 pushdecl (x)
3623      tree x;
3624 {
3625   register tree t;
3626   register tree name;
3627   int need_new_binding;
3628
3629   /* We shouldn't be calling pushdecl when we're generating RTL for a
3630      function that we already did semantic analysis on previously.  */
3631   my_friendly_assert (!current_function || doing_semantic_analysis_p (),
3632                       19990913);
3633
3634   name = DECL_ASSEMBLER_NAME (x);
3635   need_new_binding = 1;
3636
3637   if (DECL_TEMPLATE_PARM_P (x))
3638     /* Template parameters have no context; they are not X::T even
3639        when declared within a class or namespace.  */
3640     ;
3641   else
3642     {
3643       if (current_function_decl && x != current_function_decl
3644           /* A local declaration for a function doesn't constitute
3645              nesting.  */
3646           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3647           /* A local declaration for an `extern' variable is in the
3648              scoped of the current namespace, not the current
3649              function.  */
3650           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3651           /* Don't change DECL_CONTEXT of virtual methods.  */
3652           && (TREE_CODE (x) != FUNCTION_DECL || !DECL_VIRTUAL_P (x))
3653           && !DECL_CONTEXT (x))
3654         DECL_CONTEXT (x) = current_function_decl;
3655       if (!DECL_CONTEXT (x))
3656         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3657     }
3658
3659   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3660      compiler wants to use.  */
3661   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3662       || TREE_CODE (x) == NAMESPACE_DECL)
3663     name = DECL_NAME (x);
3664
3665   if (name)
3666     {
3667 #if 0
3668       /* Not needed...see below.  */
3669       char *file;
3670       int line;
3671 #endif
3672       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3673         name = TREE_OPERAND (name, 0);
3674       
3675       /* Namespace-scoped variables are not found in the current level. */
3676       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3677         t = namespace_binding (name, DECL_CONTEXT (x));
3678       else
3679         t = lookup_name_current_level (name);
3680       if (t == error_mark_node)
3681         {
3682           /* error_mark_node is 0 for a while during initialization!  */
3683           t = NULL_TREE;
3684           cp_error_at ("`%#D' used prior to declaration", x);
3685         }
3686
3687       else if (t != NULL_TREE)
3688         {
3689 #if 0
3690           /* This is turned off until I have time to do it right (bpk).  */
3691           /* With the code below that uses it...  */
3692           file = DECL_SOURCE_FILE (t);
3693           line = DECL_SOURCE_LINE (t);
3694 #endif
3695           if (TREE_CODE (t) == PARM_DECL)
3696             {
3697               if (DECL_CONTEXT (t) == NULL_TREE)
3698                 fatal ("parse errors have confused me too much");
3699
3700               /* Check for duplicate params.  */
3701               if (duplicate_decls (x, t))
3702                 return t;
3703             }
3704           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3705                     || DECL_FUNCTION_TEMPLATE_P (x))
3706                    && is_overloaded_fn (t))
3707             /* Don't do anything just yet. */;
3708           else if (t == wchar_decl_node)
3709             {
3710               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3711                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3712
3713               /* Throw away the redeclaration.  */
3714               return t;
3715             }
3716           else if (TREE_CODE (t) != TREE_CODE (x))
3717             {
3718               if (duplicate_decls (x, t))
3719                 return t;
3720             }
3721           else if (duplicate_decls (x, t))
3722             {
3723 #if 0
3724               /* This is turned off until I have time to do it right (bpk).  */
3725
3726               /* Also warn if they did a prototype with `static' on it, but
3727                  then later left the `static' off.  */
3728               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3729                 {
3730                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3731                     return t;
3732
3733                   if (extra_warnings)
3734                     {
3735                       cp_warning ("`static' missing from declaration of `%D'",
3736                                   t);
3737                       warning_with_file_and_line (file, line,
3738                                                   "previous declaration of `%s'",
3739                                                   decl_as_string (t, 0));
3740                     }
3741
3742                   /* Now fix things so it'll do what they expect.  */
3743                   if (current_function_decl)
3744                     TREE_PUBLIC (current_function_decl) = 0;
3745                 }
3746               /* Due to interference in memory reclamation (X may be
3747                  obstack-deallocated at this point), we must guard against
3748                  one really special case.  [jason: This should be handled
3749                  by start_function]  */
3750               if (current_function_decl == x)
3751                 current_function_decl = t;
3752 #endif
3753               if (TREE_CODE (t) == TYPE_DECL)
3754                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3755               else if (TREE_CODE (t) == FUNCTION_DECL)
3756                 check_default_args (t);
3757
3758               return t;
3759             }
3760           else if (DECL_MAIN_P (x))
3761             {
3762               /* A redeclaration of main, but not a duplicate of the
3763                  previous one. 
3764
3765                  [basic.start.main]
3766
3767                  This function shall not be overloaded.  */
3768               cp_error_at ("invalid redeclaration of `%D'", t);
3769               cp_error ("as `%D'", x);
3770               /* We don't try to push this declaration since that
3771                  causes a crash.  */
3772               return x;
3773             }
3774         }
3775
3776       check_template_shadow (x);
3777
3778       /* If this is a function conjured up by the backend, massage it
3779          so it looks friendly.  */
3780       if (TREE_CODE (x) == FUNCTION_DECL
3781           && ! DECL_LANG_SPECIFIC (x))
3782         {
3783           retrofit_lang_decl (x);
3784           DECL_LANGUAGE (x) = lang_c;
3785         }
3786
3787       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3788         {
3789           t = push_overloaded_decl (x, PUSH_LOCAL);
3790           if (t != x)
3791             return t;
3792           if (!namespace_bindings_p ())
3793             /* We do not need to create a binding for this name;
3794                push_overloaded_decl will have already done so if
3795                necessary.  */
3796             need_new_binding = 0;
3797         }
3798       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3799         {
3800           t = push_overloaded_decl (x, PUSH_GLOBAL);
3801           if (t == x)
3802             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3803           return t;
3804         }
3805
3806       /* If declaring a type as a typedef, copy the type (unless we're
3807          at line 0), and install this TYPE_DECL as the new type's typedef
3808          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3809       if (TREE_CODE (x) == TYPE_DECL)
3810         {
3811           tree type = TREE_TYPE (x);
3812           if (DECL_SOURCE_LINE (x) == 0)
3813             {
3814               if (TYPE_NAME (type) == 0)
3815                 TYPE_NAME (type) = x;
3816             }
3817           else if (type != error_mark_node && TYPE_NAME (type) != x
3818                    /* We don't want to copy the type when all we're
3819                       doing is making a TYPE_DECL for the purposes of
3820                       inlining.  */
3821                    && (!TYPE_NAME (type) 
3822                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3823             {
3824               push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
3825
3826               DECL_ORIGINAL_TYPE (x) = type;
3827               type = build_type_copy (type);
3828               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3829               TYPE_NAME (type) = x;
3830               TREE_TYPE (x) = type;
3831
3832               pop_obstacks ();
3833             }
3834
3835           if (type != error_mark_node
3836               && TYPE_NAME (type)
3837               && TYPE_IDENTIFIER (type))
3838             set_identifier_type_value_with_scope (DECL_NAME (x), type, 
3839                                                   current_binding_level);
3840
3841         }
3842
3843       /* Multiple external decls of the same identifier ought to match.
3844
3845          We get warnings about inline functions where they are defined.
3846          We get warnings about other functions from push_overloaded_decl.
3847          
3848          Avoid duplicate warnings where they are used.  */
3849       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3850         {
3851           tree decl;
3852
3853           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3854               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3855                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3856             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3857           else
3858             decl = NULL_TREE;
3859
3860           if (decl
3861               /* If different sort of thing, we already gave an error.  */
3862               && TREE_CODE (decl) == TREE_CODE (x)
3863               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3864             {
3865               cp_pedwarn ("type mismatch with previous external decl", x);
3866               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3867             }
3868         }
3869
3870       /* This name is new in its binding level.
3871          Install the new declaration and return it.  */
3872       if (namespace_bindings_p ())
3873         {
3874           /* Install a global value.  */
3875
3876           /* If the first global decl has external linkage,
3877              warn if we later see static one.  */
3878           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3879             TREE_PUBLIC (name) = 1;
3880
3881           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3882                 && t != NULL_TREE)
3883               /* For an ordinary function, we create a binding from
3884                  the mangled name (i.e., NAME) to the DECL.  But, for
3885                  an `extern "C"' function, the mangled name and the
3886                  ordinary name are the same so we need not do this.  */
3887               && !(TREE_CODE (x) == FUNCTION_DECL && 
3888                    DECL_LANGUAGE (x) == lang_c))
3889             {
3890               if (TREE_CODE (x) == FUNCTION_DECL)
3891                 my_friendly_assert 
3892                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3893                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3894               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3895             }
3896
3897           /* Don't forget if the function was used via an implicit decl.  */
3898           if (IDENTIFIER_IMPLICIT_DECL (name)
3899               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3900             TREE_USED (x) = 1;
3901
3902           /* Don't forget if its address was taken in that way.  */
3903           if (IDENTIFIER_IMPLICIT_DECL (name)
3904               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
3905             TREE_ADDRESSABLE (x) = 1;
3906
3907           /* Warn about mismatches against previous implicit decl.  */
3908           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
3909               /* If this real decl matches the implicit, don't complain.  */
3910               && ! (TREE_CODE (x) == FUNCTION_DECL
3911                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
3912             cp_warning
3913               ("`%D' was previously implicitly declared to return `int'", x);
3914
3915           /* If new decl is `static' and an `extern' was seen previously,
3916              warn about it.  */
3917           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
3918             warn_extern_redeclared_static (x, t);
3919         }
3920       else
3921         {
3922           /* Here to install a non-global value.  */
3923           tree oldlocal = IDENTIFIER_VALUE (name);
3924           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
3925
3926           if (need_new_binding)
3927             {
3928               push_local_binding (name, x, 0);
3929               /* Because push_local_binding will hook X on to the
3930                  current_binding_level's name list, we don't want to
3931                  do that again below.  */
3932               need_new_binding = 0;
3933             }
3934
3935           /* If this is a TYPE_DECL, push it into the type value slot.  */
3936           if (TREE_CODE (x) == TYPE_DECL)
3937             set_identifier_type_value_with_scope (name, TREE_TYPE (x), 
3938                                                   current_binding_level);
3939
3940           /* Clear out any TYPE_DECL shadowed by a namespace so that
3941              we won't think this is a type.  The C struct hack doesn't
3942              go through namespaces.  */
3943           if (TREE_CODE (x) == NAMESPACE_DECL)
3944             set_identifier_type_value_with_scope (name, NULL_TREE, 
3945                                                   current_binding_level);
3946
3947           /* If this is an extern function declaration, see if we
3948              have a global definition or declaration for the function.  */
3949           if (oldlocal == NULL_TREE
3950               && DECL_EXTERNAL (x)
3951               && oldglobal != NULL_TREE
3952               && TREE_CODE (x) == FUNCTION_DECL
3953               && TREE_CODE (oldglobal) == FUNCTION_DECL)
3954             {
3955               /* We have one.  Their types must agree.  */
3956               if (decls_match (x, oldglobal))
3957                 /* OK */;
3958               else
3959                 {
3960                   cp_warning ("extern declaration of `%#D' doesn't match", x);
3961                   cp_warning_at ("global declaration `%#D'", oldglobal);
3962                 }
3963             }
3964           /* If we have a local external declaration,
3965              and no file-scope declaration has yet been seen,
3966              then if we later have a file-scope decl it must not be static.  */
3967           if (oldlocal == NULL_TREE
3968               && oldglobal == NULL_TREE
3969               && DECL_EXTERNAL (x)
3970               && TREE_PUBLIC (x))
3971             TREE_PUBLIC (name) = 1;
3972
3973           if (DECL_FROM_INLINE (x))
3974             /* Inline decls shadow nothing.  */;
3975
3976           /* Warn if shadowing an argument at the top level of the body.  */
3977           else if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
3978                    && TREE_CODE (oldlocal) == PARM_DECL
3979                    /* Don't complain if it's from an enclosing function.  */
3980                    && DECL_CONTEXT (oldlocal) == current_function_decl
3981                    && TREE_CODE (x) != PARM_DECL)
3982             {
3983               /* Go to where the parms should be and see if we
3984                  find them there.  */
3985               struct binding_level *b = current_binding_level->level_chain;
3986
3987               if (cleanup_label)
3988                 b = b->level_chain;
3989
3990               /* ARM $8.3 */
3991               if (b->parm_flag == 1)
3992                 cp_error ("declaration of `%#D' shadows a parameter", name);
3993             }
3994           else if (warn_shadow && oldlocal != NULL_TREE
3995                    && current_binding_level->is_for_scope
3996                    && !DECL_DEAD_FOR_LOCAL (oldlocal))
3997             {
3998               warning ("variable `%s' shadows local",
3999                        IDENTIFIER_POINTER (name));
4000               cp_warning_at ("  this is the shadowed declaration", oldlocal);
4001             }              
4002           /* Maybe warn if shadowing something else.  */
4003           else if (warn_shadow && !DECL_EXTERNAL (x)
4004                    /* No shadow warnings for internally generated vars.  */
4005                    && ! DECL_ARTIFICIAL (x)
4006                    /* No shadow warnings for vars made for inlining.  */
4007                    && ! DECL_FROM_INLINE (x))
4008             {
4009               const char *warnstring = NULL;
4010
4011               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4012                 warnstring = "declaration of `%s' shadows a parameter";
4013               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4014                        && current_class_ptr
4015                        && !TREE_STATIC (name))
4016                 warnstring = "declaration of `%s' shadows a member of `this'";
4017               else if (oldlocal != NULL_TREE)
4018                 warnstring = "declaration of `%s' shadows previous local";
4019               else if (oldglobal != NULL_TREE)
4020                 /* XXX shadow warnings in outer-more namespaces */
4021                 warnstring = "declaration of `%s' shadows global declaration";
4022
4023               if (warnstring)
4024                 warning (warnstring, IDENTIFIER_POINTER (name));
4025             }
4026         }
4027
4028       if (TREE_CODE (x) == FUNCTION_DECL)
4029         check_default_args (x);
4030
4031       /* Keep count of variables in this level with incomplete type.  */
4032       if (TREE_CODE (x) == VAR_DECL
4033           && TREE_TYPE (x) != error_mark_node
4034           && ((TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4035                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4036               /* RTTI TD entries are created while defining the type_info.  */
4037               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4038                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4039         current_binding_level->incomplete 
4040           = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4041     }
4042
4043   if (need_new_binding)
4044     add_decl_to_level (x, 
4045                        DECL_NAMESPACE_SCOPE_P (x)
4046                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4047                        : current_binding_level);
4048
4049   return x;
4050 }
4051
4052 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4053    caller to set DECL_CONTEXT properly.  */
4054
4055 static tree
4056 pushdecl_with_scope (x, level)
4057      tree x;
4058      struct binding_level *level;
4059 {
4060   register struct binding_level *b;
4061   tree function_decl = current_function_decl;
4062
4063   current_function_decl = NULL_TREE;
4064   if (level->parm_flag == 2)
4065     {
4066       b = class_binding_level;
4067       class_binding_level = level;
4068       pushdecl_class_level (x);
4069       class_binding_level = b;
4070     }
4071   else
4072     {
4073       b = current_binding_level;
4074       current_binding_level = level;
4075       x = pushdecl (x);
4076       current_binding_level = b;
4077     }
4078   current_function_decl = function_decl;
4079   return x;
4080 }
4081
4082 /* Like pushdecl, only it places X in the current namespace,
4083    if appropriate.  */
4084
4085 tree
4086 pushdecl_namespace_level (x)
4087      tree x;
4088 {
4089   register struct binding_level *b = current_binding_level;
4090   register tree t;
4091
4092   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4093
4094   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4095      what we want.  */
4096   if (TREE_CODE (x) == TYPE_DECL)
4097     {
4098       tree name = DECL_NAME (x);
4099       tree newval;
4100       tree *ptr = (tree *)0;
4101       for (; b != global_binding_level; b = b->level_chain)
4102         {
4103           tree shadowed = b->type_shadowed;
4104           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4105             if (TREE_PURPOSE (shadowed) == name)
4106               {
4107                 ptr = &TREE_VALUE (shadowed);
4108                 /* Can't break out of the loop here because sometimes
4109                    a binding level will have duplicate bindings for
4110                    PT names.  It's gross, but I haven't time to fix it.  */
4111               }
4112         }
4113       newval = TREE_TYPE (x);
4114       if (ptr == (tree *)0)
4115         {
4116           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4117              up here if this is changed to an assertion.  --KR  */
4118           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4119         }
4120       else
4121         {
4122           *ptr = newval;
4123         }
4124     }
4125   return t;
4126 }
4127
4128 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4129    if appropriate.  */
4130
4131 tree
4132 pushdecl_top_level (x)
4133      tree x;
4134 {
4135   push_to_top_level ();
4136   x = pushdecl_namespace_level (x);
4137   pop_from_top_level ();
4138   return x;
4139 }
4140
4141 /* Make the declaration of X appear in CLASS scope.  */
4142
4143 void
4144 pushdecl_class_level (x)
4145      tree x;
4146 {
4147   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4148      scope looks for the pre-mangled name.  */
4149   register tree name;
4150
4151   if (TREE_CODE (x) == OVERLOAD)
4152     x = OVL_CURRENT (x);
4153   name = DECL_NAME (x);
4154
4155   if (name)
4156     {
4157       push_class_level_binding (name, x);
4158       if (TREE_CODE (x) == TYPE_DECL)
4159         set_identifier_type_value (name, TREE_TYPE (x));
4160     }
4161   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4162     {
4163       tree f;
4164
4165       for (f = TYPE_FIELDS (TREE_TYPE (x));
4166            f;
4167            f = TREE_CHAIN (f))
4168         pushdecl_class_level (f);
4169     }
4170 }
4171
4172 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4173    DECL, or a modified version thereof.  */
4174
4175 tree
4176 maybe_push_decl (decl)
4177      tree decl;
4178 {
4179   tree type = TREE_TYPE (decl);
4180
4181   /* Add this decl to the current binding level, but not if it comes
4182      from another scope, e.g. a static member variable.  TEM may equal
4183      DECL or it may be a previous decl of the same name.  */
4184   if ((TREE_CODE (decl) != PARM_DECL 
4185        && DECL_CONTEXT (decl) != NULL_TREE 
4186        /* Definitions of namespace members outside their namespace are
4187           possible. */
4188        && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4189       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4190       || TREE_CODE (type) == UNKNOWN_TYPE
4191       /* The declaration of a template specialization does not affect
4192          the functions available for overload resolution, so we do not
4193          call pushdecl.  */
4194       || (TREE_CODE (decl) == FUNCTION_DECL
4195           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4196     return decl;
4197   else
4198     return pushdecl (decl);
4199 }
4200
4201 #if 0
4202 /* This function is used to push the mangled decls for nested types into
4203    the appropriate scope.  Previously pushdecl_top_level was used, but that
4204    is incorrect for members of local classes.  */
4205
4206 void
4207 pushdecl_nonclass_level (x)
4208      tree x;
4209 {
4210   struct binding_level *b = current_binding_level;
4211
4212   my_friendly_assert (b->parm_flag != 2, 180);
4213
4214 #if 0
4215   /* Get out of template binding levels */
4216   while (b->pseudo_global)
4217     b = b->level_chain;
4218 #endif
4219
4220   pushdecl_with_scope (x, b);
4221 }
4222 #endif
4223
4224 /* Make the declaration(s) of X appear in CLASS scope
4225    under the name NAME.  */
4226
4227 void
4228 push_class_level_binding (name, x)
4229      tree name;
4230      tree x;
4231 {
4232   tree binding;
4233   /* The class_binding_level will be NULL if x is a template 
4234      parameter name in a member template.  */
4235   if (!class_binding_level)
4236     return;
4237
4238   /* Make sure that this new member does not have the same name
4239      as a template parameter.  */
4240   if (TYPE_BEING_DEFINED (current_class_type))
4241     check_template_shadow (x);
4242
4243   /* If this declaration shadows a declaration from an enclosing
4244      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4245      we leave this class.  Record the shadowed declaration here.  */
4246   binding = IDENTIFIER_BINDING (name);
4247   if (binding 
4248       && ((TREE_CODE (x) == OVERLOAD
4249            && BINDING_VALUE (binding)
4250            && is_overloaded_fn (BINDING_VALUE (binding)))
4251           || INHERITED_VALUE_BINDING_P (binding)))
4252     {
4253       tree shadow;
4254       tree old_decl;
4255
4256       /* If the old binding was from a base class, and was for a tag
4257          name, slide it over to make room for the new binding.  The
4258          old binding is still visible if explicitly qualified with a
4259          class-key.  */
4260       if (INHERITED_VALUE_BINDING_P (binding)
4261           && BINDING_VALUE (binding)
4262           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4263           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4264           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4265         {
4266           old_decl = BINDING_TYPE (binding);
4267           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4268           BINDING_VALUE (binding) = NULL_TREE;
4269           INHERITED_VALUE_BINDING_P (binding) = 0;
4270         }
4271       else
4272         old_decl = BINDING_VALUE (binding);
4273
4274       /* There was already a binding for X containing fewer
4275          functions than are named in X.  Find the previous
4276          declaration of X on the class-shadowed list, and update it.  */
4277       for (shadow = class_binding_level->class_shadowed;
4278            shadow;
4279            shadow = TREE_CHAIN (shadow))
4280         if (TREE_PURPOSE (shadow) == name
4281             && TREE_TYPE (shadow) == old_decl)
4282           {
4283             BINDING_VALUE (binding) = x;
4284             INHERITED_VALUE_BINDING_P (binding) = 0;
4285             TREE_TYPE (shadow) = x;
4286             return;
4287           }
4288     }
4289
4290   /* If we didn't replace an existing binding, put the binding on the
4291      stack of bindings for the identifier, and update
4292      IDENTIFIER_CLASS_VALUE.  */
4293   if (push_class_binding (name, x))
4294     {
4295       class_binding_level->class_shadowed
4296         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4297                      class_binding_level->class_shadowed);
4298       /* Record the value we are binding NAME to so that we can know
4299          what to pop later.  */
4300       TREE_TYPE (class_binding_level->class_shadowed) = x;
4301     }
4302 }
4303
4304 /* Insert another USING_DECL into the current binding level,
4305    returning this declaration. If this is a redeclaration,
4306    do nothing and return NULL_TREE.  */
4307
4308 tree
4309 push_using_decl (scope, name)
4310      tree scope;
4311      tree name;
4312 {
4313   tree decl;
4314   
4315   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4316   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4317   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4318     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4319       break;
4320   if (decl)
4321     return NULL_TREE;
4322   decl = build_lang_decl (USING_DECL, name, void_type_node);
4323   DECL_INITIAL (decl) = scope;
4324   TREE_CHAIN (decl) = current_binding_level->usings;
4325   current_binding_level->usings = decl;
4326   return decl;
4327 }
4328
4329 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4330    changed (i.e. there was already a directive), or the fresh
4331    TREE_LIST otherwise.  */
4332
4333 tree
4334 push_using_directive (used)
4335      tree used;
4336 {
4337   tree ud = current_binding_level->using_directives;
4338   tree iter, ancestor;
4339   
4340   /* Check if we already have this. */
4341   if (purpose_member (used, ud) != NULL_TREE)
4342     return NULL_TREE;
4343
4344   /* Recursively add all namespaces used. */
4345   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4346     push_using_directive (TREE_PURPOSE (iter));
4347
4348   ancestor = namespace_ancestor (current_decl_namespace (), used);
4349   ud = current_binding_level->using_directives;
4350   ud = tree_cons (used, ancestor, ud);
4351   current_binding_level->using_directives = ud;
4352   return ud;
4353 }
4354
4355 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4356    other definitions already in place.  We get around this by making
4357    the value of the identifier point to a list of all the things that
4358    want to be referenced by that name.  It is then up to the users of
4359    that name to decide what to do with that list.
4360
4361    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its DECL_RESULT
4362    slot.  It is dealt with the same way.
4363
4364    FLAGS is a bitwise-or of the following values:
4365      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4366                  namespace scope.
4367      PUSH_USING: DECL is being pushed as the result of a using
4368                  declaration. 
4369
4370    The value returned may be a previous declaration if we guessed wrong
4371    about what language DECL should belong to (C or C++).  Otherwise,
4372    it's always DECL (and never something that's not a _DECL).  */
4373
4374 tree
4375 push_overloaded_decl (decl, flags)
4376      tree decl;
4377      int flags;
4378 {
4379   tree name = DECL_NAME (decl);
4380   tree old;
4381   tree new_binding;
4382   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4383
4384   if (doing_global)
4385     old = namespace_binding (name, DECL_CONTEXT (decl));
4386   else
4387     old = lookup_name_current_level (name);
4388
4389   if (old)
4390     {
4391       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4392         {
4393           tree t = TREE_TYPE (old);
4394           if (IS_AGGR_TYPE (t) && warn_shadow
4395               && (! DECL_IN_SYSTEM_HEADER (decl)
4396                   || ! DECL_IN_SYSTEM_HEADER (old)))
4397             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4398           old = NULL_TREE;
4399         }
4400       else if (is_overloaded_fn (old))
4401         {
4402           tree tmp;
4403           
4404           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4405             {
4406               tree fn = OVL_CURRENT (tmp);
4407
4408               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4409                   && !(flags & PUSH_USING)
4410                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4411                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4412                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4413                           decl, fn);
4414               
4415               if (duplicate_decls (decl, fn))
4416                 return fn;
4417             }
4418         }
4419       else
4420         {
4421           cp_error_at ("previous non-function declaration `%#D'", old);
4422           cp_error ("conflicts with function declaration `%#D'", decl);
4423           return decl;
4424         }
4425     }
4426
4427   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4428     {
4429       if (old && TREE_CODE (old) != OVERLOAD)
4430         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4431       else
4432         new_binding = ovl_cons (decl, old);
4433       if (flags & PUSH_USING)
4434         OVL_USED (new_binding) = 1;
4435     }
4436   else
4437     /* NAME is not ambiguous.  */
4438     new_binding = decl;
4439
4440   if (doing_global)
4441     set_namespace_binding (name, current_namespace, new_binding);
4442   else
4443     {
4444       /* We only create an OVERLOAD if there was a previous binding at
4445          this level, or if decl is a template. In the former case, we
4446          need to remove the old binding and replace it with the new
4447          binding.  We must also run through the NAMES on the binding
4448          level where the name was bound to update the chain.  */
4449
4450       if (TREE_CODE (new_binding) == OVERLOAD && old)
4451         {
4452           tree *d;
4453           
4454           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4455                *d;
4456                d = &TREE_CHAIN (*d))
4457             if (*d == old
4458                 || (TREE_CODE (*d) == TREE_LIST
4459                     && TREE_VALUE (*d) == old))
4460               {
4461                 if (TREE_CODE (*d) == TREE_LIST)
4462                   /* Just replace the old binding with the new.  */
4463                   TREE_VALUE (*d) = new_binding;
4464                 else
4465                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4466                   *d = tree_cons (NULL_TREE, new_binding, 
4467                                   TREE_CHAIN (*d));
4468
4469                 /* And update the CPLUS_BINDING node.  */
4470                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4471                   = new_binding;
4472                 return decl;
4473               }
4474
4475           /* We should always find a previous binding in this case.  */
4476           my_friendly_abort (0);
4477         }
4478
4479       /* Install the new binding.  */
4480       push_local_binding (name, new_binding, flags);
4481     }
4482
4483   return decl;
4484 }
4485 \f
4486 /* Generate an implicit declaration for identifier FUNCTIONID
4487    as a function of type int ().  Print a warning if appropriate.  */
4488
4489 tree
4490 implicitly_declare (functionid)
4491      tree functionid;
4492 {
4493   register tree decl;
4494   int temp = allocation_temporary_p ();
4495
4496   push_obstacks_nochange ();
4497
4498   /* Save the decl permanently so we can warn if definition follows.
4499      In ANSI C, warn_implicit is usually false, so the saves little space.
4500      But in C++, it's usually true, hence the extra code.  */
4501   if (temp && (! warn_implicit || toplevel_bindings_p ()))
4502     end_temporary_allocation ();
4503
4504   /* We used to reuse an old implicit decl here,
4505      but this loses with inline functions because it can clobber
4506      the saved decl chains.  */
4507   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4508
4509   DECL_EXTERNAL (decl) = 1;
4510   TREE_PUBLIC (decl) = 1;
4511
4512   /* ANSI standard says implicit declarations are in the innermost block.
4513      So we record the decl in the standard fashion.  */
4514   pushdecl (decl);
4515   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4516
4517   if (warn_implicit
4518       /* Only one warning per identifier.  */
4519       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4520     {
4521       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4522     }
4523
4524   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4525
4526   pop_obstacks ();
4527
4528   return decl;
4529 }
4530
4531 /* Return zero if the declaration NEWDECL is valid
4532    when the declaration OLDDECL (assumed to be for the same name)
4533    has already been seen.
4534    Otherwise return an error message format string with a %s
4535    where the identifier should go.  */
4536
4537 static const char *
4538 redeclaration_error_message (newdecl, olddecl)
4539      tree newdecl, olddecl;
4540 {
4541   if (TREE_CODE (newdecl) == TYPE_DECL)
4542     {
4543       /* Because C++ can put things into name space for free,
4544          constructs like "typedef struct foo { ... } foo"
4545          would look like an erroneous redeclaration.  */
4546       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4547         return 0;
4548       else
4549         return "redefinition of `%#D'";
4550     }
4551   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4552     {
4553       /* If this is a pure function, its olddecl will actually be
4554          the original initialization to `0' (which we force to call
4555          abort()).  Don't complain about redefinition in this case.  */
4556       if (DECL_LANG_SPECIFIC (olddecl) && DECL_ABSTRACT_VIRTUAL_P (olddecl))
4557         return 0;
4558
4559       /* If both functions come from different namespaces, this is not
4560          a redeclaration - this is a conflict with a used function. */
4561       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4562           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4563         return "`%D' conflicts with used function";
4564
4565       /* We'll complain about linkage mismatches in
4566          warn_extern_redeclared_static.  */
4567
4568       /* Defining the same name twice is no good.  */
4569       if (DECL_INITIAL (olddecl) != NULL_TREE
4570           && DECL_INITIAL (newdecl) != NULL_TREE)
4571         {
4572           if (DECL_NAME (olddecl) == NULL_TREE)
4573             return "`%#D' not declared in class";
4574           else
4575             return "redefinition of `%#D'";
4576         }
4577       return 0;
4578     }
4579   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4580     {
4581       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4582            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4583            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4584           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4585               && TYPE_SIZE (TREE_TYPE (newdecl))
4586               && TYPE_SIZE (TREE_TYPE (olddecl))))
4587         return "redefinition of `%#D'";
4588       return 0;
4589     }
4590   else if (toplevel_bindings_p ())
4591     {
4592       /* Objects declared at top level:  */
4593       /* If at least one is a reference, it's ok.  */
4594       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4595         return 0;
4596       /* Reject two definitions.  */
4597       return "redefinition of `%#D'";
4598     }
4599   else
4600     {
4601       /* Objects declared with block scope:  */
4602       /* Reject two definitions, and reject a definition
4603          together with an external reference.  */
4604       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4605         return "redeclaration of `%#D'";
4606       return 0;
4607     }
4608 }
4609 \f
4610 /* Create a new label, named ID.  */
4611
4612 static tree
4613 make_label_decl (id, local_p)
4614      tree id;
4615      int local_p;
4616 {
4617   tree decl;
4618
4619   decl = build_decl (LABEL_DECL, id, void_type_node);
4620   if (expanding_p)
4621     /* Make sure every label has an rtx.  */
4622     label_rtx (decl);
4623
4624   DECL_CONTEXT (decl) = current_function_decl;
4625   DECL_MODE (decl) = VOIDmode;
4626   C_DECLARED_LABEL_FLAG (decl) = local_p;
4627
4628   /* Say where one reference is to the label, for the sake of the
4629      error if it is not defined.  */
4630   DECL_SOURCE_LINE (decl) = lineno;
4631   DECL_SOURCE_FILE (decl) = input_filename;
4632
4633   /* Record the fact that this identifier is bound to this label.  */
4634   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4635
4636   /* Record this label on the list of used labels so that we can check
4637      at the end of the function to see whether or not the label was
4638      actually defined.  */
4639   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4640       && (named_label_uses == NULL
4641           || named_label_uses->names_in_scope != current_binding_level->names
4642           || named_label_uses->label_decl != decl))
4643     {
4644       struct named_label_list *new_ent;
4645       new_ent
4646         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4647       new_ent->label_decl = decl;
4648       new_ent->names_in_scope = current_binding_level->names;
4649       new_ent->binding_level = current_binding_level;
4650       new_ent->lineno_o_goto = lineno;
4651       new_ent->filename_o_goto = input_filename;
4652       new_ent->next = named_label_uses;
4653       named_label_uses = new_ent;
4654     }
4655
4656   return decl;
4657 }
4658
4659 /* Look for a label named ID in the current function.  If one cannot
4660    be found, create one.  (We keep track of used, but undefined,
4661    labels, and complain about them at the end of a function.)  */
4662
4663 tree 
4664 lookup_label (id)
4665      tree id;
4666 {
4667   tree decl;
4668
4669   /* You can't use labels at global scope.  */
4670   if (current_function_decl == NULL_TREE)
4671     {
4672       error ("label `%s' referenced outside of any function",
4673              IDENTIFIER_POINTER (id));
4674       return NULL_TREE;
4675     }
4676   
4677   /* See if we've already got this label.  */
4678   decl = IDENTIFIER_LABEL_VALUE (id);
4679   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4680     return decl;
4681
4682   /* Record this label on the list of labels used in this function.
4683      We do this before calling make_label_decl so that we get the
4684      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4685   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4686                             named_labels);
4687   /* We need a new label.  */
4688   decl = make_label_decl (id, /*local_p=*/0);
4689   /* Now fill in the information we didn't have before.  */
4690   TREE_VALUE (named_labels) = decl;
4691
4692   return decl;
4693 }
4694
4695 /* Declare a local label named ID.  */
4696
4697 tree
4698 declare_local_label (id)
4699      tree id;
4700 {
4701   tree decl;
4702
4703   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4704      this scope we can restore the old value of
4705      IDENTIFIER_TYPE_VALUE.  */
4706   current_binding_level->shadowed_labels 
4707     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4708                  current_binding_level->shadowed_labels);
4709   /* Look for the label.  */
4710   decl = make_label_decl (id, /*local_p=*/1);
4711   /* Now fill in the information we didn't have before.  */
4712   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4713   
4714   return decl;
4715 }
4716
4717 /* Define a label, specifying the location in the source file.
4718    Return the LABEL_DECL node for the label, if the definition is valid.
4719    Otherwise return 0.  */
4720
4721 tree
4722 define_label (filename, line, name)
4723      char *filename;
4724      int line;
4725      tree name;
4726 {
4727   tree decl = lookup_label (name);
4728
4729   /* After labels, make any new cleanups go into their
4730      own new (temporary) binding contour.  */
4731   current_binding_level->more_cleanups_ok = 0;
4732
4733   if (name == get_identifier ("wchar_t"))
4734     cp_pedwarn ("label named wchar_t");
4735
4736   if (DECL_INITIAL (decl) != NULL_TREE)
4737     {
4738       cp_error ("duplicate label `%D'", decl);
4739       return 0;
4740     }
4741   else
4742     {
4743       struct named_label_list *uses, *prev;
4744       int identified = 0;
4745       int saw_eh = 0;
4746
4747       /* Mark label as having been defined.  */
4748       DECL_INITIAL (decl) = error_mark_node;
4749       /* Say where in the source.  */
4750       DECL_SOURCE_FILE (decl) = filename;
4751       DECL_SOURCE_LINE (decl) = line;
4752
4753       prev = NULL;
4754       uses = named_label_uses;
4755       while (uses != NULL)
4756         if (uses->label_decl == decl)
4757           {
4758             struct binding_level *b = current_binding_level;
4759             while (b)
4760               {
4761                 tree new_decls = b->names;
4762                 tree old_decls = (b == uses->binding_level)
4763                                   ? uses->names_in_scope : NULL_TREE;
4764                 while (new_decls != old_decls)
4765                   {
4766                     if (TREE_CODE (new_decls) == VAR_DECL
4767                         /* Don't complain about crossing initialization
4768                            of internal entities.  They can't be accessed,
4769                            and they should be cleaned up
4770                            by the time we get to the label.  */
4771                         && ! DECL_ARTIFICIAL (new_decls)
4772                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4773                              && pod_type_p (TREE_TYPE (new_decls))))
4774                       {
4775                         /* This is really only important if we're crossing
4776                            an initialization.  The POD stuff is just
4777                            pedantry; why should it matter if the class
4778                            contains a field of pointer to member type?  */
4779                         int problem = (DECL_INITIAL (new_decls)
4780                                        || (TYPE_NEEDS_CONSTRUCTING
4781                                            (TREE_TYPE (new_decls))));
4782
4783                         if (! identified)
4784                           {
4785                             if (problem)
4786                               {
4787                                 cp_error ("jump to label `%D'", decl);
4788                                 error_with_file_and_line
4789                                   (uses->filename_o_goto,
4790                                    uses->lineno_o_goto, "  from here");
4791                               }
4792                             else
4793                               {
4794                                 cp_pedwarn ("jump to label `%D'", decl);
4795                                 pedwarn_with_file_and_line
4796                                   (uses->filename_o_goto,
4797                                    uses->lineno_o_goto, "  from here");
4798                               }
4799                             identified = 1;
4800                           }
4801
4802                         if (problem)
4803                           cp_error_at ("  crosses initialization of `%#D'",
4804                                        new_decls);
4805                         else
4806                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4807                                          new_decls);
4808                       }
4809                     new_decls = TREE_CHAIN (new_decls);
4810                   }
4811                 if (b == uses->binding_level)
4812                   break;
4813                 if (b->eh_region && ! saw_eh)
4814                   {
4815                     if (! identified)
4816                       {
4817                         cp_error ("jump to label `%D'", decl);
4818                         error_with_file_and_line
4819                           (uses->filename_o_goto,
4820                            uses->lineno_o_goto, "  from here");
4821                         identified = 1;
4822                       }
4823                     error ("  enters exception handling block");
4824                     saw_eh = 1;
4825                   }
4826                 b = b->level_chain;
4827               }
4828
4829             if (prev != NULL)
4830               prev->next = uses->next;
4831             else
4832               named_label_uses = uses->next;
4833
4834             uses = uses->next;
4835           }
4836         else
4837           {
4838             prev = uses;
4839             uses = uses->next;
4840           }
4841       current_function_return_value = NULL_TREE;
4842       return decl;
4843     }
4844 }
4845
4846 struct cp_switch
4847 {
4848   struct binding_level *level;
4849   struct cp_switch *next;
4850 };
4851
4852 static struct cp_switch *switch_stack;
4853
4854 void
4855 push_switch ()
4856 {
4857   struct cp_switch *p
4858     = (struct cp_switch *) oballoc (sizeof (struct cp_switch));
4859   p->level = current_binding_level;
4860   p->next = switch_stack;
4861   switch_stack = p;
4862 }
4863
4864 void
4865 pop_switch ()
4866 {
4867   switch_stack = switch_stack->next;
4868 }
4869
4870 /* Note that we've seen a definition of a case label, and complain if this
4871    is a bad place for one.  */
4872
4873 void
4874 define_case_label ()
4875 {
4876   tree cleanup = last_cleanup_this_contour ();
4877   struct binding_level *b = current_binding_level;
4878   int identified = 0;
4879
4880   if (! switch_stack)
4881     /* Don't crash; we'll complain in do_case.  */
4882     return;
4883   
4884   if (cleanup)
4885     {
4886       static int explained = 0;
4887       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4888       warning ("where case label appears here");
4889       if (!explained)
4890         {
4891           warning ("(enclose actions of previous case statements requiring");
4892           warning ("destructors in their own binding contours.)");
4893           explained = 1;
4894         }
4895     }
4896
4897   for (; b && b != switch_stack->level; b = b->level_chain)
4898     {
4899       tree new_decls = b->names;
4900       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4901         {
4902           if (TREE_CODE (new_decls) == VAR_DECL
4903               /* Don't complain about crossing initialization
4904                  of internal entities.  They can't be accessed,
4905                  and they should be cleaned up
4906                  by the time we get to the label.  */
4907               && ! DECL_ARTIFICIAL (new_decls)
4908               && ((DECL_INITIAL (new_decls) != NULL_TREE
4909                    && DECL_INITIAL (new_decls) != error_mark_node)
4910                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4911             {
4912               if (! identified)
4913                 error ("jump to case label");
4914               identified = 1;
4915               cp_error_at ("  crosses initialization of `%#D'",
4916                            new_decls);
4917             }
4918         }
4919     }
4920
4921   /* After labels, make any new cleanups go into their
4922      own new (temporary) binding contour.  */
4923
4924   current_binding_level->more_cleanups_ok = 0;
4925   current_function_return_value = NULL_TREE;
4926 }
4927 \f
4928 /* Return the list of declarations of the current level.
4929    Note that this list is in reverse order unless/until
4930    you nreverse it; and when you do nreverse it, you must
4931    store the result back using `storedecls' or you will lose.  */
4932
4933 tree
4934 getdecls ()
4935 {
4936   return current_binding_level->names;
4937 }
4938
4939 /* Return the list of type-tags (for structs, etc) of the current level.  */
4940
4941 tree
4942 gettags ()
4943 {
4944   return current_binding_level->tags;
4945 }
4946
4947 /* Store the list of declarations of the current level.
4948    This is done for the parameter declarations of a function being defined,
4949    after they are modified in the light of any missing parameters.  */
4950
4951 static void
4952 storedecls (decls)
4953      tree decls;
4954 {
4955   current_binding_level->names = decls;
4956 }
4957
4958 /* Similarly, store the list of tags of the current level.  */
4959
4960 void
4961 storetags (tags)
4962      tree tags;
4963 {
4964   current_binding_level->tags = tags;
4965 }
4966 \f
4967 /* Given NAME, an IDENTIFIER_NODE,
4968    return the structure (or union or enum) definition for that name.
4969    Searches binding levels from BINDING_LEVEL up to the global level.
4970    If THISLEVEL_ONLY is nonzero, searches only the specified context
4971    (but skips any tag-transparent contexts to find one that is
4972    meaningful for tags).
4973    FORM says which kind of type the caller wants;
4974    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
4975    If the wrong kind of type is found, and it's not a template, an error is
4976    reported.  */
4977
4978 static tree
4979 lookup_tag (form, name, binding_level, thislevel_only)
4980      enum tree_code form;
4981      tree name;
4982      struct binding_level *binding_level;
4983      int thislevel_only;
4984 {
4985   register struct binding_level *level;
4986   /* Non-zero if, we should look past a pseudo-global level, even if
4987      THISLEVEL_ONLY.  */
4988   int allow_pseudo_global = 1;
4989
4990   for (level = binding_level; level; level = level->level_chain)
4991     {
4992       register tree tail;
4993       if (ANON_AGGRNAME_P (name))
4994         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
4995           {
4996             /* There's no need for error checking here, because
4997                anon names are unique throughout the compilation.  */
4998             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
4999               return TREE_VALUE (tail);
5000           }
5001       else if (level->namespace_p)
5002         /* Do namespace lookup. */
5003         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5004           {
5005             tree old = binding_for_name (name, tail);
5006
5007             /* If we just skipped past a pseudo global level, even
5008                though THISLEVEL_ONLY, and we find a template class
5009                declaration, then we use the _TYPE node for the
5010                template.  See the example below.  */
5011             if (thislevel_only && !allow_pseudo_global
5012                 && old && BINDING_VALUE (old) 
5013                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5014               old = TREE_TYPE (BINDING_VALUE (old));
5015             else 
5016               old = BINDING_TYPE (old);
5017
5018             /* If it has an original type, it is a typedef, and we
5019                should not return it.  */
5020             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5021               old = NULL_TREE;
5022             if (old && TREE_CODE (old) != form
5023                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5024               {
5025                 cp_error ("`%#D' redeclared as %C", old, form);
5026                 return NULL_TREE;
5027               }
5028             if (old)
5029               return old;
5030             if (thislevel_only || tail == global_namespace)
5031               return NULL_TREE;
5032           }
5033       else
5034         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5035           {
5036             if (TREE_PURPOSE (tail) == name)
5037               {
5038                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5039                 /* Should tighten this up; it'll probably permit
5040                    UNION_TYPE and a struct template, for example.  */
5041                 if (code != form
5042                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5043                   {
5044                     /* Definition isn't the kind we were looking for.  */
5045                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5046                               form);
5047                     return NULL_TREE;
5048                   }
5049                 return TREE_VALUE (tail);
5050               }
5051           }
5052       if (thislevel_only && ! level->tag_transparent)
5053         {
5054           if (level->pseudo_global && allow_pseudo_global)
5055             {
5056               /* We must deal with cases like this:
5057                  
5058                    template <class T> struct S;
5059                    template <class T> struct S {};
5060                    
5061                  When looking up `S', for the second declaration, we
5062                  would like to find the first declaration.  But, we
5063                  are in the pseudo-global level created for the
5064                  template parameters, rather than the (surrounding)
5065                  namespace level.  Thus, we keep going one more level,
5066                  even though THISLEVEL_ONLY is non-zero.  */
5067               allow_pseudo_global = 0;
5068               continue;
5069             }
5070           else
5071             return NULL_TREE;
5072         }
5073     }
5074   return NULL_TREE;
5075 }
5076
5077 #if 0
5078 void
5079 set_current_level_tags_transparency (tags_transparent)
5080      int tags_transparent;
5081 {
5082   current_binding_level->tag_transparent = tags_transparent;
5083 }
5084 #endif
5085
5086 /* Given a type, find the tag that was defined for it and return the tag name.
5087    Otherwise return 0.  However, the value can never be 0
5088    in the cases in which this is used.
5089
5090    C++: If NAME is non-zero, this is the new name to install.  This is
5091    done when replacing anonymous tags with real tag names.  */
5092
5093 static tree
5094 lookup_tag_reverse (type, name)
5095      tree type;
5096      tree name;
5097 {
5098   register struct binding_level *level;
5099
5100   for (level = current_binding_level; level; level = level->level_chain)
5101     {
5102       register tree tail;
5103       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5104         {
5105           if (TREE_VALUE (tail) == type)
5106             {
5107               if (name)
5108                 TREE_PURPOSE (tail) = name;
5109               return TREE_PURPOSE (tail);
5110             }
5111         }
5112     }
5113   return NULL_TREE;
5114 }
5115 \f
5116 /* Look up NAME in the NAMESPACE.  */
5117
5118 tree
5119 lookup_namespace_name (namespace, name)
5120      tree namespace, name;
5121 {
5122   tree val;
5123   tree template_id = NULL_TREE;
5124
5125   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5126
5127   if (TREE_CODE (name) == NAMESPACE_DECL)
5128     /* This happens for A::B<int> when B is a namespace. */
5129     return name;
5130   else if (TREE_CODE (name) == TEMPLATE_DECL)
5131     {
5132       /* This happens for A::B where B is a template, and there are no
5133          template arguments.  */
5134       cp_error ("invalid use of `%D'", name);
5135       return error_mark_node;
5136     }
5137
5138   namespace = ORIGINAL_NAMESPACE (namespace);
5139
5140   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5141     {
5142       template_id = name;
5143       name = TREE_OPERAND (name, 0);
5144       if (TREE_CODE (name) == OVERLOAD)
5145         name = DECL_NAME (OVL_CURRENT (name));
5146       else if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
5147         name = DECL_NAME (name);
5148     }
5149
5150   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5151   
5152   val = make_node (CPLUS_BINDING);
5153   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5154     return error_mark_node;
5155
5156   if (BINDING_VALUE (val))
5157     {
5158       val = BINDING_VALUE (val);
5159
5160       if (template_id)
5161         {
5162           if (DECL_CLASS_TEMPLATE_P (val))
5163             val = lookup_template_class (val, 
5164                                          TREE_OPERAND (template_id, 1),
5165                                          /*in_decl=*/NULL_TREE,
5166                                          /*context=*/NULL_TREE,
5167                                          /*entering_scope=*/0);
5168           else if (DECL_FUNCTION_TEMPLATE_P (val)
5169                    || TREE_CODE (val) == OVERLOAD)
5170             val = lookup_template_function (val, 
5171                                             TREE_OPERAND (template_id, 1));
5172           else
5173             {
5174               cp_error ("`%D::%D' is not a template",
5175                         namespace, name);
5176               return error_mark_node;
5177             }
5178         }
5179
5180       /* If we have a single function from a using decl, pull it out.  */
5181       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5182         val = OVL_FUNCTION (val);
5183       return val;
5184     }
5185
5186   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5187   return error_mark_node;
5188 }
5189
5190 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5191
5192 static unsigned long
5193 typename_hash (k)
5194      hash_table_key k;
5195 {
5196   unsigned long hash;
5197   tree t;
5198
5199   t = (tree) k;
5200   hash = (((unsigned long) TYPE_CONTEXT (t))
5201           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5202
5203   return hash;
5204 }
5205
5206 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5207
5208 static boolean
5209 typename_compare (k1, k2)
5210      hash_table_key k1;
5211      hash_table_key k2;
5212 {
5213   tree t1;
5214   tree t2;
5215   tree d1;
5216   tree d2;
5217
5218   t1 = (tree) k1;
5219   t2 = (tree) k2;
5220   d1 = TYPE_NAME (t1);
5221   d2 = TYPE_NAME (t2);
5222   
5223   return (DECL_NAME (d1) == DECL_NAME (d2)
5224           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5225           && ((TREE_TYPE (t1) != NULL_TREE) 
5226               == (TREE_TYPE (t2) != NULL_TREE))
5227           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5228           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5229 }
5230
5231 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5232    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5233    is non-NULL, this type is being created by the implicit typename
5234    extension, and BASE_TYPE is a type named `t' in some base class of
5235    `T' which depends on template parameters.  
5236
5237    Returns the new TYPENAME_TYPE.  */
5238
5239 tree
5240 build_typename_type (context, name, fullname, base_type)
5241      tree context;
5242      tree name;
5243      tree fullname;
5244      tree base_type;
5245 {
5246   tree t;
5247   tree d;
5248   struct hash_entry* e;
5249
5250   static struct hash_table ht;
5251
5252   push_obstacks (&permanent_obstack, &permanent_obstack);
5253
5254   if (!ht.table)
5255     {
5256       static struct hash_table *h = &ht;
5257       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash, 
5258                             &typename_compare))
5259         fatal ("virtual memory exhausted");
5260       ggc_add_tree_hash_table_root (&h, 1);
5261     }
5262
5263   /* Build the TYPENAME_TYPE.  */
5264   t = make_lang_type (TYPENAME_TYPE);
5265   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5266   TYPENAME_TYPE_FULLNAME (t) = fullname;
5267   TREE_TYPE (t) = base_type;
5268
5269   /* Build the corresponding TYPE_DECL.  */
5270   d = build_decl (TYPE_DECL, name, t);
5271   TYPE_NAME (TREE_TYPE (d)) = d;
5272   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5273   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5274   DECL_ARTIFICIAL (d) = 1;
5275
5276   /* See if we already have this type.  */
5277   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5278   if (e)
5279     t = (tree) e->key;
5280   else
5281     /* Insert the type into the table.  */
5282     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5283
5284   pop_obstacks ();
5285
5286   return t;
5287 }
5288
5289 tree
5290 make_typename_type (context, name)
5291      tree context, name;
5292 {
5293   tree fullname;
5294
5295   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
5296     {
5297       if (!(TYPE_LANG_SPECIFIC (name) 
5298             && (CLASSTYPE_IS_TEMPLATE (name) 
5299                 || CLASSTYPE_USE_TEMPLATE (name))))
5300         name = TYPE_IDENTIFIER (name);
5301       else
5302         /* Create a TEMPLATE_ID_EXPR for the type.  */
5303         name = build_nt (TEMPLATE_ID_EXPR,
5304                          CLASSTYPE_TI_TEMPLATE (name),
5305                          CLASSTYPE_TI_ARGS (name));
5306     }
5307   else if (TREE_CODE (name) == TYPE_DECL)
5308     name = DECL_NAME (name);
5309
5310   fullname = name;
5311
5312   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5313     {
5314       name = TREE_OPERAND (name, 0);
5315       if (TREE_CODE (name) == TEMPLATE_DECL)
5316         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5317     }
5318   if (TREE_CODE (name) != IDENTIFIER_NODE)
5319     my_friendly_abort (2000);
5320
5321   if (TREE_CODE (context) == NAMESPACE_DECL)
5322     {
5323       /* We can get here from typename_sub0 in the explicit_template_type
5324          expansion.  Just fail.  */
5325       cp_error ("no class template named `%#T' in `%#T'",
5326                 name, context);
5327       return error_mark_node;
5328     }
5329
5330   if (! uses_template_parms (context)
5331       || currently_open_class (context))
5332     {
5333       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5334         {
5335           tree tmpl = NULL_TREE;
5336           if (IS_AGGR_TYPE (context))
5337             tmpl = lookup_field (context, name, 0, 0);
5338           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5339             {
5340               cp_error ("no class template named `%#T' in `%#T'",
5341                         name, context);
5342               return error_mark_node;
5343             }
5344
5345           return lookup_template_class (tmpl, 
5346                                         TREE_OPERAND (fullname, 1),
5347                                         NULL_TREE, context, 
5348                                         /*entering_scope=*/0);
5349         }
5350       else
5351         {
5352           tree t;
5353           
5354           if (!IS_AGGR_TYPE (context))
5355             {
5356               cp_error ("no type named `%#T' in `%#T'", name, context);
5357               return error_mark_node;
5358             }
5359
5360           t = lookup_field (context, name, 0, 1);
5361           if (t)
5362             return TREE_TYPE (t);
5363         }
5364     }
5365
5366   /* If the CONTEXT is not a template type, then either the field is
5367      there now or its never going to be.  */
5368   if (!uses_template_parms (context))
5369     {
5370       cp_error ("no type named `%#T' in `%#T'", name, context);
5371       return error_mark_node;
5372     }
5373     
5374   
5375   return build_typename_type (context, name, fullname,  NULL_TREE);
5376 }
5377
5378 /* Select the right _DECL from multiple choices. */
5379
5380 static tree
5381 select_decl (binding, flags)
5382      tree binding;
5383      int flags;
5384 {
5385   tree val;
5386   val = BINDING_VALUE (binding);
5387   if (LOOKUP_NAMESPACES_ONLY (flags))
5388     {
5389       /* We are not interested in types. */
5390       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5391         return val;
5392       return NULL_TREE;
5393     }
5394   
5395   /* If we could have a type and
5396      we have nothing or we need a type and have none.  */
5397   if (BINDING_TYPE (binding)
5398       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5399                    && TREE_CODE (val) != TYPE_DECL)))
5400     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5401   /* Don't return non-types if we really prefer types. */
5402   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5403            && (TREE_CODE (val) != TEMPLATE_DECL
5404                || !DECL_CLASS_TEMPLATE_P (val)))
5405     val = NULL_TREE;
5406
5407   return val;
5408 }
5409
5410 /* Unscoped lookup of a global: iterate over current namespaces,
5411    considering using-directives.  If SPACESP is non-NULL, store a list
5412    of the namespaces we've considered in it.  */
5413
5414 tree
5415 unqualified_namespace_lookup (name, flags, spacesp)
5416      tree name;
5417      int flags;
5418      tree *spacesp;
5419 {
5420   tree b = make_node (CPLUS_BINDING);
5421   tree initial = current_decl_namespace();
5422   tree scope = initial;
5423   tree siter;
5424   struct binding_level *level;
5425   tree val = NULL_TREE;
5426
5427   if (spacesp)
5428     *spacesp = NULL_TREE;
5429
5430   for (; !val; scope = CP_DECL_CONTEXT (scope))
5431     {
5432       if (spacesp)
5433         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5434       val = binding_for_name (name, scope);
5435
5436       /* Initialize binding for this context. */
5437       BINDING_VALUE (b) = BINDING_VALUE (val);
5438       BINDING_TYPE (b) = BINDING_TYPE (val);
5439
5440       /* Add all _DECLs seen through local using-directives. */
5441       for (level = current_binding_level; 
5442            !level->namespace_p;
5443            level = level->level_chain)
5444         if (!lookup_using_namespace (name, b, level->using_directives,
5445                                      scope, flags, spacesp))
5446           /* Give up because of error. */
5447           return error_mark_node;
5448
5449       /* Add all _DECLs seen through global using-directives. */
5450       /* XXX local and global using lists should work equally. */
5451       siter = initial;
5452       while (1)
5453         {
5454           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter), 
5455                                        scope, flags, spacesp))
5456             /* Give up because of error. */
5457             return error_mark_node;
5458           if (siter == scope) break;
5459           siter = CP_DECL_CONTEXT (siter);
5460         }
5461
5462       val = select_decl (b, flags);
5463       if (scope == global_namespace)
5464         break;
5465     }
5466   return val;
5467 }
5468
5469 /* Combine prefer_type and namespaces_only into flags.  */
5470
5471 static int
5472 lookup_flags (prefer_type, namespaces_only)
5473   int prefer_type, namespaces_only;
5474 {
5475   if (namespaces_only)
5476     return LOOKUP_PREFER_NAMESPACES;
5477   if (prefer_type > 1)
5478     return LOOKUP_PREFER_TYPES;
5479   if (prefer_type > 0)
5480     return LOOKUP_PREFER_BOTH;
5481   return 0;
5482 }
5483
5484 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5485    ignore it or not.  Subroutine of lookup_name_real.  */
5486
5487 static tree
5488 qualify_lookup (val, flags)
5489      tree val;
5490      int flags;
5491 {
5492   if (val == NULL_TREE)
5493     return val;
5494   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5495     return val;
5496   if ((flags & LOOKUP_PREFER_TYPES)
5497       && (TREE_CODE (val) == TYPE_DECL
5498           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5499               && DECL_CLASS_TEMPLATE_P (val))))
5500     return val;
5501   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5502     return NULL_TREE;
5503   return val;
5504 }
5505
5506 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5507    that.  */
5508
5509 static void
5510 warn_about_implicit_typename_lookup (typename, binding)
5511      tree typename;
5512      tree binding;
5513 {
5514   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5515   tree name = DECL_NAME (typename);
5516
5517   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5518          && CLASSTYPE_TEMPLATE_INFO (subtype)
5519          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5520       && ! (TREE_CODE (binding) == TYPE_DECL
5521             && same_type_p (TREE_TYPE (binding), subtype)))
5522     {
5523       cp_warning ("lookup of `%D' finds `%#D'", 
5524                   name, binding);
5525       cp_warning ("  instead of `%D' from dependent base class",
5526                   typename);
5527       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5528                   constructor_name (current_class_type), name);
5529     }
5530 }
5531
5532 /* Look up NAME in the current binding level and its superiors in the
5533    namespace of variables, functions and typedefs.  Return a ..._DECL
5534    node of some kind representing its definition if there is only one
5535    such declaration, or return a TREE_LIST with all the overloaded
5536    definitions if there are many, or return 0 if it is undefined.
5537
5538    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5539    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5540    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5541    Otherwise we prefer non-TYPE_DECLs.  
5542
5543    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5544    using IDENTIFIER_CLASS_VALUE.  */
5545
5546 static tree
5547 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5548      tree name;
5549      int prefer_type, nonclass, namespaces_only;
5550 {
5551   tree t;
5552   tree val = NULL_TREE;
5553   int yylex = 0;
5554   tree from_obj = NULL_TREE;
5555   int flags;
5556   int val_is_implicit_typename = 0;
5557
5558   /* Hack: copy flag set by parser, if set. */
5559   if (only_namespace_names)
5560     namespaces_only = 1;
5561
5562   if (prefer_type == -2)
5563     {
5564       extern int looking_for_typename;
5565       tree type = NULL_TREE;
5566
5567       yylex = 1;
5568       prefer_type = looking_for_typename;
5569
5570       flags = lookup_flags (prefer_type, namespaces_only);
5571       /* If the next thing is '<', class templates are types. */
5572       if (looking_for_template)
5573         flags |= LOOKUP_TEMPLATES_EXPECTED;
5574
5575       /* std:: becomes :: for now.  */
5576       if (got_scope == std_node)
5577         got_scope = void_type_node;
5578
5579       if (got_scope)
5580         type = got_scope;
5581       else if (got_object != error_mark_node)
5582         type = got_object;
5583       
5584       if (type)
5585         {
5586           if (type == error_mark_node)
5587             return error_mark_node;
5588           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5589             type = TREE_TYPE (type);
5590
5591           if (TYPE_P (type))
5592             type = complete_type (type);
5593
5594           if (TREE_CODE (type) == VOID_TYPE)
5595             type = global_namespace;
5596           if (TREE_CODE (type) == NAMESPACE_DECL)
5597             {
5598               val = make_node (CPLUS_BINDING);
5599               flags |= LOOKUP_COMPLAIN;
5600               if (!qualified_lookup_using_namespace (name, type, val, flags))
5601                 return NULL_TREE;
5602               val = select_decl (val, flags);
5603             }
5604           else if (! IS_AGGR_TYPE (type)
5605                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5606                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5607                    || TREE_CODE (type) == TYPENAME_TYPE)
5608             /* Someone else will give an error about this if needed.  */
5609             val = NULL_TREE;
5610           else if (type == current_class_type)
5611             val = IDENTIFIER_CLASS_VALUE (name);
5612           else
5613             val = lookup_member (type, name, 0, prefer_type);
5614         }
5615       else
5616         val = NULL_TREE;
5617
5618       if (got_scope)
5619         goto done;
5620       else if (got_object && val)
5621         from_obj = val;
5622     }
5623   else
5624     {
5625       flags = lookup_flags (prefer_type, namespaces_only);
5626       /* If we're not parsing, we need to complain. */
5627       flags |= LOOKUP_COMPLAIN;
5628     }
5629
5630   /* First, look in non-namespace scopes.  */
5631
5632   if (current_class_type == NULL_TREE)
5633     nonclass = 1;
5634
5635   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5636     {
5637       tree binding;
5638
5639       if (!LOCAL_BINDING_P (t) && nonclass)
5640         /* We're not looking for class-scoped bindings, so keep going.  */
5641         continue;
5642       
5643       /* If this is the kind of thing we're looking for, we're done.  */
5644       if (qualify_lookup (BINDING_VALUE (t), flags))
5645         binding = BINDING_VALUE (t);
5646       else if ((flags & LOOKUP_PREFER_TYPES) 
5647                && qualify_lookup (BINDING_TYPE (t), flags))
5648         binding = BINDING_TYPE (t);
5649       else
5650         binding = NULL_TREE;
5651
5652       if (binding
5653           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5654         {
5655           if (val_is_implicit_typename && !yylex)
5656             warn_about_implicit_typename_lookup (val, binding);
5657           val = binding;
5658           val_is_implicit_typename 
5659             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5660           if (!val_is_implicit_typename)
5661             break;
5662         }
5663     }
5664
5665   /* Now lookup in namespace scopes.  */
5666   if (!val || val_is_implicit_typename)
5667     {
5668       t = unqualified_namespace_lookup (name, flags, 0);
5669       if (t)
5670         {
5671           if (val_is_implicit_typename && !yylex)
5672             warn_about_implicit_typename_lookup (val, t);
5673           val = t;
5674         }
5675     }
5676
5677  done:
5678   if (val)
5679     {
5680       /* This should only warn about types used in qualified-ids.  */
5681       if (from_obj && from_obj != val)
5682         {
5683           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5684               && TREE_CODE (val) == TYPE_DECL
5685               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5686             {
5687               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5688                           name, got_object, TREE_TYPE (from_obj));
5689               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5690                           TREE_TYPE (val));
5691             }
5692
5693           /* We don't change val to from_obj if got_object depends on
5694              template parms because that breaks implicit typename for
5695              destructor calls.  */
5696           if (! uses_template_parms (got_object))
5697             val = from_obj;
5698         }
5699
5700       /* If we have a single function from a using decl, pull it out.  */
5701       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5702         val = OVL_FUNCTION (val);
5703     }
5704   else if (from_obj)
5705     val = from_obj;
5706
5707   return val;
5708 }
5709
5710 tree
5711 lookup_name_nonclass (name)
5712      tree name;
5713 {
5714   return lookup_name_real (name, 0, 1, 0);
5715 }
5716
5717 tree
5718 lookup_function_nonclass (name, args)
5719      tree name;
5720      tree args;
5721 {
5722   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5723 }
5724
5725 tree
5726 lookup_name_namespace_only (name)
5727      tree name;
5728 {
5729   /* type-or-namespace, nonclass, namespace_only */
5730   return lookup_name_real (name, 1, 1, 1);
5731 }
5732
5733 tree
5734 lookup_name (name, prefer_type)
5735      tree name;
5736      int prefer_type;
5737 {
5738   return lookup_name_real (name, prefer_type, 0, 0);
5739 }
5740
5741 /* Similar to `lookup_name' but look only in the innermost non-class
5742    binding level.  */
5743
5744 tree
5745 lookup_name_current_level (name)
5746      tree name;
5747 {
5748   struct binding_level *b;
5749   tree t = NULL_TREE;
5750
5751   b = current_binding_level;
5752   while (b->parm_flag == 2)
5753     b = b->level_chain;
5754
5755   if (b->namespace_p)
5756     {
5757       t = IDENTIFIER_NAMESPACE_VALUE (name);
5758
5759       /* extern "C" function() */
5760       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5761         t = TREE_VALUE (t);
5762     }
5763   else if (IDENTIFIER_BINDING (name) 
5764            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5765     {
5766       while (1)
5767         {
5768           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5769             return IDENTIFIER_VALUE (name);
5770           
5771           if (b->keep == 2)
5772             b = b->level_chain;
5773           else
5774             break;
5775         }
5776     }
5777
5778   return t;
5779 }
5780
5781 /* Like lookup_name_current_level, but for types.  */
5782
5783 tree
5784 lookup_type_current_level (name)
5785      tree name;
5786 {
5787   register tree t = NULL_TREE;
5788
5789   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5790
5791   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5792       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5793     {
5794       struct binding_level *b = current_binding_level;
5795       while (1)
5796         {
5797           if (purpose_member (name, b->type_shadowed))
5798             return REAL_IDENTIFIER_TYPE_VALUE (name);
5799           if (b->keep == 2)
5800             b = b->level_chain;
5801           else
5802             break;
5803         }
5804     }
5805
5806   return t;
5807 }
5808
5809 void
5810 begin_only_namespace_names ()
5811 {
5812   only_namespace_names = 1;
5813 }
5814
5815 void
5816 end_only_namespace_names ()
5817 {
5818   only_namespace_names = 0;
5819 }
5820 \f
5821 /* Arrange for the user to get a source line number, even when the
5822    compiler is going down in flames, so that she at least has a
5823    chance of working around problems in the compiler.  We used to
5824    call error(), but that let the segmentation fault continue
5825    through; now, it's much more passive by asking them to send the
5826    maintainers mail about the problem.  */
5827
5828 static void
5829 signal_catch (sig)
5830      int sig ATTRIBUTE_UNUSED;
5831 {
5832   signal (SIGSEGV, SIG_DFL);
5833 #ifdef SIGIOT
5834   signal (SIGIOT, SIG_DFL);
5835 #endif
5836 #ifdef SIGILL
5837   signal (SIGILL, SIG_DFL);
5838 #endif
5839 #ifdef SIGABRT
5840   signal (SIGABRT, SIG_DFL);
5841 #endif
5842 #ifdef SIGBUS
5843   signal (SIGBUS, SIG_DFL);
5844 #endif
5845   my_friendly_abort (0);
5846 }
5847
5848 /* Push the declarations of builtin types into the namespace.
5849    RID_INDEX, if < RID_MAX is the index of the builtin type
5850    in the array RID_POINTERS.  NAME is the name used when looking
5851    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5852
5853 static void
5854 record_builtin_type (rid_index, name, type)
5855      enum rid rid_index;
5856      const char *name;
5857      tree type;
5858 {
5859   tree rname = NULL_TREE, tname = NULL_TREE;
5860   tree tdecl = NULL_TREE;
5861
5862   if ((int) rid_index < (int) RID_MAX)
5863     rname = ridpointers[(int) rid_index];
5864   if (name)
5865     tname = get_identifier (name);
5866
5867   TYPE_BUILT_IN (type) = 1;
5868   
5869   if (tname)
5870     {
5871       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5872       set_identifier_type_value (tname, NULL_TREE);
5873       if ((int) rid_index < (int) RID_MAX)
5874         /* Built-in types live in the global namespace. */
5875         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5876     }
5877   if (rname != NULL_TREE)
5878     {
5879       if (tname != NULL_TREE)
5880         {
5881           set_identifier_type_value (rname, NULL_TREE);
5882           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5883         }
5884       else
5885         {
5886           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5887           set_identifier_type_value (rname, NULL_TREE);
5888         }
5889     }
5890 }
5891
5892 /* Record one of the standard Java types.
5893  * Declare it as having the given NAME.
5894  * If SIZE > 0, it is the size of one of the integral types;
5895  * otherwise it is the negative of the size of one of the other types.  */
5896
5897 static tree
5898 record_builtin_java_type (name, size)
5899      const char *name;
5900      int size;
5901 {
5902   tree type, decl;
5903   if (size > 0)
5904     type = make_signed_type (size);
5905   else if (size > -32)
5906     { /* "__java_char" or ""__java_boolean". */
5907       type = make_unsigned_type (-size);
5908       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
5909     }
5910   else
5911     { /* "__java_float" or ""__java_double". */
5912       type = make_node (REAL_TYPE);
5913       TYPE_PRECISION (type) = - size;
5914       layout_type (type);
5915     }
5916   record_builtin_type (RID_MAX, name, type);
5917   decl = TYPE_NAME (type);
5918
5919   /* Suppress generate debug symbol entries for these types,
5920      since for normal C++ they are just clutter.
5921      However, push_lang_context undoes this if extern "Java" is seen. */
5922   DECL_IGNORED_P (decl) = 1;
5923
5924   TYPE_FOR_JAVA (type) = 1;
5925   return type;
5926 }
5927
5928 /* Push a type into the namespace so that the back-ends ignore it. */
5929
5930 static void
5931 record_unknown_type (type, name)
5932      tree type;
5933      const char *name;
5934 {
5935   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
5936   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
5937   DECL_IGNORED_P (decl) = 1;
5938   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5939   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
5940   TYPE_ALIGN (type) = 1;
5941   TYPE_MODE (type) = TYPE_MODE (void_type_node);
5942
5943
5944 /* Push overloaded decl, in global scope, with one argument so it
5945    can be used as a callback from define_function.  */
5946
5947 static void
5948 push_overloaded_decl_1 (x)
5949      tree x;
5950 {
5951   push_overloaded_decl (x, PUSH_GLOBAL);
5952 }
5953
5954 #ifdef __GNUC__
5955 __inline
5956 #endif
5957 tree
5958 auto_function (name, type)
5959      tree name, type;
5960 {
5961   return define_function
5962     (IDENTIFIER_POINTER (name), type, push_overloaded_decl_1,
5963      IDENTIFIER_POINTER (build_decl_overload (name, TYPE_ARG_TYPES (type),
5964                                               0)));
5965 }
5966
5967 /* Create the predefined scalar types of C,
5968    and some nodes representing standard constants (0, 1, (void *)0).
5969    Initialize the global binding level.
5970    Make definitions for built-in primitive functions.  */
5971
5972 void
5973 init_decl_processing ()
5974 {
5975   tree fields[20];
5976   int wchar_type_size;
5977   tree array_domain_type;
5978
5979   /* Have to make these distinct before we try using them.  */
5980   lang_name_cplusplus = get_identifier ("C++");
5981   lang_name_c = get_identifier ("C");
5982   lang_name_java = get_identifier ("Java");
5983
5984   /* Let the back-end now how to save and restore language-specific
5985      per-function globals.  */
5986   init_lang_status = &push_cp_function_context;
5987   free_lang_status = &pop_cp_function_context;
5988   mark_lang_status = &mark_cp_function_context;
5989
5990   cp_parse_init ();
5991   init_decl2 ();
5992   init_pt ();
5993
5994   /* Create the global variables.  */
5995   push_to_top_level ();
5996
5997   /* Enter the global namespace. */
5998   my_friendly_assert (global_namespace == NULL_TREE, 375);
5999   push_namespace (get_identifier ("::"));
6000   global_namespace = current_namespace;
6001   current_lang_name = NULL_TREE;
6002
6003   if (flag_strict_prototype == 2)
6004     flag_strict_prototype = pedantic;
6005   if (! flag_permissive && ! pedantic)
6006     flag_pedantic_errors = 1;
6007
6008   strict_prototypes_lang_c = flag_strict_prototype;
6009
6010   /* Initially, C.  */
6011   current_lang_name = lang_name_c;
6012
6013   current_function_decl = NULL_TREE;
6014   current_binding_level = NULL_BINDING_LEVEL;
6015   free_binding_level = NULL_BINDING_LEVEL;
6016
6017   /* Because most segmentation signals can be traced back into user
6018      code, catch them and at least give the user a chance of working
6019      around compiler bugs.  */
6020   signal (SIGSEGV, signal_catch);
6021
6022   /* We will also catch aborts in the back-end through signal_catch and
6023      give the user a chance to see where the error might be, and to defeat
6024      aborts in the back-end when there have been errors previously in their
6025      code.  */
6026 #ifdef SIGIOT
6027   signal (SIGIOT, signal_catch);
6028 #endif
6029 #ifdef SIGILL
6030   signal (SIGILL, signal_catch);
6031 #endif
6032 #ifdef SIGABRT
6033   signal (SIGABRT, signal_catch);
6034 #endif
6035 #ifdef SIGBUS
6036   signal (SIGBUS, signal_catch);
6037 #endif
6038
6039   build_common_tree_nodes (flag_signed_char);
6040
6041   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6042   TREE_TYPE (error_mark_list) = error_mark_node;
6043
6044   /* Make the binding_level structure for global names.  */
6045   pushlevel (0);
6046   global_binding_level = current_binding_level;
6047   /* The global level is the namespace level of ::.  */
6048   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6049   declare_namespace_level ();
6050
6051   this_identifier = get_identifier (THIS_NAME);
6052   in_charge_identifier = get_identifier (IN_CHARGE_NAME);
6053   ctor_identifier = get_identifier (CTOR_NAME);
6054   dtor_identifier = get_identifier (DTOR_NAME);
6055   pfn_identifier = get_identifier (VTABLE_PFN_NAME);
6056   index_identifier = get_identifier (VTABLE_INDEX_NAME);
6057   delta_identifier = get_identifier (VTABLE_DELTA_NAME);
6058   delta2_identifier = get_identifier (VTABLE_DELTA2_NAME);
6059   pfn_or_delta2_identifier = get_identifier ("__pfn_or_delta2");
6060
6061   /* Define `int' and `char' first so that dbx will output them first.  */
6062   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6063   record_builtin_type (RID_CHAR, "char", char_type_node);
6064
6065   /* `signed' is the same as `int' */
6066   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6067   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6068   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6069   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6070   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6071   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6072   record_builtin_type (RID_MAX, "long long unsigned int",
6073                        long_long_unsigned_type_node);
6074   record_builtin_type (RID_MAX, "long long unsigned",
6075                        long_long_unsigned_type_node);
6076   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6077   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6078   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6079
6080   ptrdiff_type_node
6081     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6082
6083   /* Define both `signed char' and `unsigned char'.  */
6084   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6085   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6086
6087   /* `unsigned long' is the standard type for sizeof.
6088      Note that stddef.h uses `unsigned long',
6089      and this must agree, even if long and int are the same size.  */
6090   set_sizetype
6091     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6092
6093   /* Create the widest literal types. */
6094   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6095   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6096                         widest_integer_literal_type_node));
6097
6098   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6099   pushdecl (build_decl (TYPE_DECL, NULL_TREE, 
6100                         widest_unsigned_literal_type_node));
6101
6102   /* These are types that type_for_size and type_for_mode use.  */
6103   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6104   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6105   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6106   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6107 #if HOST_BITS_PER_WIDE_INT >= 64
6108   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6109 #endif
6110   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6111   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6112   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6113   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6114 #if HOST_BITS_PER_WIDE_INT >= 64
6115   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6116 #endif
6117
6118   build_common_tree_nodes_2 (flag_short_double);
6119
6120   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6121   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6122   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6123   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6124   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6125   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6126   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6127   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6128
6129   integer_two_node = build_int_2 (2, 0);
6130   TREE_TYPE (integer_two_node) = integer_type_node;
6131   integer_three_node = build_int_2 (3, 0);
6132   TREE_TYPE (integer_three_node) = integer_type_node;
6133
6134   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6135   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6136   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6137   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6138   TYPE_PRECISION (boolean_type_node) = 1;
6139   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6140   boolean_false_node = build_int_2 (0, 0);
6141   TREE_TYPE (boolean_false_node) = boolean_type_node;
6142   boolean_true_node = build_int_2 (1, 0);
6143   TREE_TYPE (boolean_true_node) = boolean_type_node;
6144
6145   signed_size_zero_node = build_int_2 (0, 0);  record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6146   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6147   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6148
6149   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6150                         complex_integer_type_node));
6151   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6152                         complex_float_type_node));
6153   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6154                         complex_double_type_node));
6155   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6156                         complex_long_double_type_node));
6157
6158   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6159
6160   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6161   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6162   TREE_PARMLIST (void_list_node) = 1;
6163
6164   /* Used for expressions that do nothing, but are not errors.  */
6165   void_zero_node = build_int_2 (0, 0);
6166   TREE_TYPE (void_zero_node) = void_type_node;
6167
6168   string_type_node = build_pointer_type (char_type_node);
6169   const_string_type_node
6170     = build_pointer_type (build_qualified_type (char_type_node, 
6171                                                 TYPE_QUAL_CONST));
6172   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6173 #if 0
6174   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6175 #endif
6176
6177   /* Make a type to be the domain of a few array types
6178      whose domains don't really matter.
6179      200 is small enough that it always fits in size_t
6180      and large enough that it can hold most function names for the
6181      initializations of __FUNCTION__ and __PRETTY_FUNCTION__.  */
6182   array_domain_type = build_index_type (build_int_2 (200, 0));
6183
6184   /* Make a type for arrays of characters.
6185      With luck nothing will ever really depend on the length of this
6186      array type.  */
6187   char_array_type_node
6188     = build_array_type (char_type_node, array_domain_type);
6189   /* Likewise for arrays of ints.  */
6190   int_array_type_node
6191     = build_array_type (integer_type_node, array_domain_type);
6192
6193   /* This is just some anonymous class type.  Nobody should ever
6194      need to look inside this envelope.  */
6195   class_star_type_node = build_pointer_type (make_lang_type (RECORD_TYPE));
6196
6197   if (flag_huge_objects)
6198     delta_type_node = long_integer_type_node;
6199   else
6200     delta_type_node = short_integer_type_node;
6201
6202   default_function_type
6203     = build_function_type (integer_type_node, NULL_TREE);
6204
6205   ptr_type_node = build_pointer_type (void_type_node);
6206   const_ptr_type_node
6207     = build_pointer_type (build_qualified_type (void_type_node,
6208                                                 TYPE_QUAL_CONST));
6209   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6210
6211   void_ftype_ptr
6212     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6213
6214   /* C++ extensions */
6215
6216   unknown_type_node = make_node (UNKNOWN_TYPE);
6217   record_unknown_type (unknown_type_node, "unknown type");
6218
6219   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6220   TREE_TYPE (unknown_type_node) = unknown_type_node;
6221
6222   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6223
6224   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6225      result.  */
6226   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6227   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6228
6229   /* This is special for C++ so functions can be overloaded.  */
6230   wchar_type_node = get_identifier (flag_short_wchar
6231                                     ? "short unsigned int"
6232                                     : WCHAR_TYPE);
6233   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6234   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6235   signed_wchar_type_node = make_signed_type (wchar_type_size);
6236   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6237   wchar_type_node
6238     = TREE_UNSIGNED (wchar_type_node)
6239       ? unsigned_wchar_type_node
6240       : signed_wchar_type_node;
6241   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6242
6243   /* Artificial declaration of wchar_t -- can be bashed */
6244   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6245                                 wchar_type_node);
6246   pushdecl (wchar_decl_node);
6247
6248   /* This is for wide string constants.  */
6249   wchar_array_type_node
6250     = build_array_type (wchar_type_node, array_domain_type);
6251
6252   if (flag_vtable_thunks)
6253     {
6254       /* Make sure we get a unique function type, so we can give
6255          its pointer type a name.  (This wins for gdb.) */
6256       tree vfunc_type = make_node (FUNCTION_TYPE);
6257       TREE_TYPE (vfunc_type) = integer_type_node;
6258       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6259       layout_type (vfunc_type);
6260
6261       vtable_entry_type = build_pointer_type (vfunc_type);
6262     }
6263   else
6264     {
6265       vtable_entry_type = make_lang_type (RECORD_TYPE);
6266       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6267                                    delta_type_node);
6268       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6269                                    delta_type_node);
6270       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6271                                    ptr_type_node);
6272       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6273                            double_type_node);
6274
6275       /* Make this part of an invisible union.  */
6276       fields[3] = copy_node (fields[2]);
6277       TREE_TYPE (fields[3]) = delta_type_node;
6278       DECL_NAME (fields[3]) = delta2_identifier;
6279       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6280       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6281       TREE_UNSIGNED (fields[3]) = 0;
6282       TREE_CHAIN (fields[2]) = fields[3];
6283       vtable_entry_type = build_qualified_type (vtable_entry_type,
6284                                                 TYPE_QUAL_CONST);
6285     }
6286   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6287
6288   vtbl_type_node
6289     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6290   layout_type (vtbl_type_node);
6291   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6292   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6293   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6294   layout_type (vtbl_ptr_type_node);
6295   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6296
6297   std_node = build_decl (NAMESPACE_DECL, 
6298                          get_identifier (flag_honor_std ? "fake std":"std"),
6299                          void_type_node);
6300   pushdecl (std_node);
6301
6302   global_type_node = make_node (LANG_TYPE);
6303   record_unknown_type (global_type_node, "global type");
6304
6305   /* Now, C++.  */
6306   current_lang_name = lang_name_cplusplus;
6307
6308   {
6309     tree bad_alloc_type_node, newtype, deltype;
6310     if (flag_honor_std)
6311       push_namespace (get_identifier ("std"));
6312     bad_alloc_type_node = xref_tag
6313       (class_type_node, get_identifier ("bad_alloc"), 1);
6314     if (flag_honor_std)
6315       pop_namespace ();
6316     newtype = build_exception_variant
6317       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6318     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6319     auto_function (ansi_opname[(int) NEW_EXPR], newtype);
6320     auto_function (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6321     global_delete_fndecl = auto_function (ansi_opname[(int) DELETE_EXPR],
6322                                           deltype);
6323     auto_function (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6324   }
6325
6326   abort_fndecl
6327     = define_function ("__pure_virtual", void_ftype, 0, 0);
6328
6329   /* Perform other language dependent initializations.  */
6330   init_class_processing ();
6331   init_init_processing ();
6332   init_search_processing ();
6333   init_rtti_processing ();
6334
6335   if (flag_exceptions)
6336     init_exception_processing ();
6337   if (flag_no_inline)
6338     {
6339       flag_inline_functions = 0;
6340     }
6341
6342   if (! supports_one_only ())
6343     flag_weak = 0;
6344
6345   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6346   declare_function_name ();
6347
6348   /* Prepare to check format strings against argument lists.  */
6349   init_function_format_info ();
6350
6351   /* Show we use EH for cleanups.  */
6352   using_eh_for_cleanups ();
6353
6354   print_error_function = lang_print_error_function;
6355   lang_get_alias_set = &c_get_alias_set;
6356   valid_lang_attribute = cp_valid_lang_attribute;
6357
6358   /* Maintain consistency.  Perhaps we should just complain if they
6359      say -fwritable-strings?  */
6360   if (flag_writable_strings)
6361     flag_const_strings = 0;
6362
6363   /* Add GC roots for all of our global variables.  */
6364   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6365   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6366   ggc_add_tree_root (&integer_three_node, 1);
6367   ggc_add_tree_root (&integer_two_node, 1);
6368   ggc_add_tree_root (&signed_size_zero_node, 1);
6369   ggc_add_tree_root (&size_one_node, 1);
6370   ggc_add_tree_root (&size_zero_node, 1);
6371   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6372                 mark_binding_level);
6373   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6374   ggc_add_tree_root (&static_ctors, 1);
6375   ggc_add_tree_root (&static_dtors, 1);
6376   ggc_add_tree_root (&lastiddecl, 1);
6377
6378   ggc_add_tree_root (&enum_next_value, 1);
6379   ggc_add_tree_root (&last_function_parm_tags, 1);
6380   ggc_add_tree_root (&current_function_return_value, 1);
6381   ggc_add_tree_root (&current_function_parms, 1);
6382   ggc_add_tree_root (&current_function_parm_tags, 1);
6383   ggc_add_tree_root (&last_function_parms, 1);
6384   ggc_add_tree_root (&error_mark_list, 1);
6385
6386   ggc_add_tree_root (&global_namespace, 1);
6387   ggc_add_tree_root (&global_type_node, 1);
6388   ggc_add_tree_root (&anonymous_namespace_name, 1);
6389
6390   ggc_add_tree_root (&got_object, 1);
6391   ggc_add_tree_root (&got_scope, 1);
6392
6393   ggc_add_tree_root (&current_lang_name, 1);
6394   ggc_add_tree_root (&static_aggregates, 1);
6395 }
6396
6397 /* Function to print any language-specific context for an error message.  */
6398
6399 static void
6400 lang_print_error_function (file)
6401      const char *file;
6402 {
6403   default_print_error_function (file);
6404   maybe_print_template_context ();
6405 }
6406
6407 /* Make a definition for a builtin function named NAME and whose data type
6408    is TYPE.  TYPE should be a function type with argument types.
6409
6410    If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6411    the name to be called if we can't opencode the function.  */
6412
6413 tree
6414 define_function (name, type, pfn, library_name)
6415      const char *name;
6416      tree type;
6417      void (*pfn) PROTO((tree));
6418      const char *library_name;
6419 {
6420   tree decl = build_lang_decl (FUNCTION_DECL, get_identifier (name), type);
6421   DECL_EXTERNAL (decl) = 1;
6422   TREE_PUBLIC (decl) = 1;
6423   DECL_ARTIFICIAL (decl) = 1;
6424
6425   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6426   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6427
6428   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6429      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6430      function in the namespace.  */
6431   if (pfn) (*pfn) (decl);
6432   if (library_name)
6433     DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
6434   make_function_rtl (decl);
6435   return decl;
6436 }
6437
6438
6439 /* Wrapper around define_function, for the benefit of 
6440    c_common_nodes_and_builtins.
6441    FUNCTION_CODE tells later passes how to compile calls to this function.
6442    See tree.h for its possible values.  */
6443
6444 tree
6445 builtin_function (name, type, code, class, libname)
6446      const char *name;
6447      tree type;
6448      int code;
6449      enum built_in_class class;
6450      const char *libname;
6451 {
6452   tree decl = define_function (name, type, (void (*) PROTO((tree)))pushdecl,
6453                                libname);
6454   DECL_BUILT_IN_CLASS (decl) = class;
6455   DECL_FUNCTION_CODE (decl) = code;
6456   return decl;
6457 }
6458 \f
6459 /* When we call finish_struct for an anonymous union, we create
6460    default copy constructors and such.  But, an anonymous union
6461    shouldn't have such things; this function undoes the damage to the
6462    anonymous union type T.
6463
6464    (The reason that we create the synthesized methods is that we don't
6465    distinguish `union { int i; }' from `typedef union { int i; } U'.
6466    The first is an anonymous union; the second is just an ordinary
6467    union type.)  */
6468
6469 void
6470 fixup_anonymous_aggr (t)
6471      tree t;
6472 {
6473   tree *q;
6474
6475   /* Wipe out memory of synthesized methods */
6476   TYPE_HAS_CONSTRUCTOR (t) = 0;
6477   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6478   TYPE_HAS_INIT_REF (t) = 0;
6479   TYPE_HAS_CONST_INIT_REF (t) = 0;
6480   TYPE_HAS_ASSIGN_REF (t) = 0;
6481   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6482
6483   /* Splice the implicitly generated functions out of the TYPE_METHODS
6484      list.  */
6485   q = &TYPE_METHODS (t);
6486   while (*q)
6487     {
6488       if (DECL_ARTIFICIAL (*q))
6489         *q = TREE_CHAIN (*q);
6490       else
6491         q = &TREE_CHAIN (*q);
6492     }
6493
6494   /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
6495      function members.  */
6496   if (TYPE_METHODS (t))
6497     error ("an anonymous union cannot have function members");
6498 }
6499
6500 /* Make sure that a declaration with no declarator is well-formed, i.e.
6501    just defines a tagged type or anonymous union.
6502
6503    Returns the type defined, if any.  */
6504
6505 tree
6506 check_tag_decl (declspecs)
6507      tree declspecs;
6508 {
6509   int found_type = 0;
6510   tree ob_modifier = NULL_TREE;
6511   register tree link;
6512   register tree t = NULL_TREE;
6513
6514   for (link = declspecs; link; link = TREE_CHAIN (link))
6515     {
6516       register tree value = TREE_VALUE (link);
6517
6518       if (TYPE_P (value))
6519         {
6520           ++found_type;
6521
6522           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6523             {
6524               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6525               t = value;
6526             }
6527         }
6528       else if (value == ridpointers[(int) RID_FRIEND])
6529         {
6530           if (current_class_type == NULL_TREE
6531               || current_scope () != current_class_type)
6532             ob_modifier = value;
6533         }
6534       else if (value == ridpointers[(int) RID_STATIC]
6535                || value == ridpointers[(int) RID_EXTERN]
6536                || value == ridpointers[(int) RID_AUTO]
6537                || value == ridpointers[(int) RID_REGISTER]
6538                || value == ridpointers[(int) RID_INLINE]
6539                || value == ridpointers[(int) RID_VIRTUAL]
6540                || value == ridpointers[(int) RID_CONST]
6541                || value == ridpointers[(int) RID_VOLATILE]
6542                || value == ridpointers[(int) RID_EXPLICIT])
6543         ob_modifier = value;
6544     }
6545
6546   if (found_type > 1)
6547     error ("multiple types in one declaration");
6548
6549   /* Inside a class, we might be in a friend or access declaration.
6550      Until we have a good way of detecting the latter, don't warn.  */
6551   if (t == NULL_TREE && ! current_class_type)
6552     pedwarn ("declaration does not declare anything");
6553
6554   /* Check for an anonymous union.  We're careful
6555      accessing TYPE_IDENTIFIER because some built-in types, like
6556      pointer-to-member types, do not have TYPE_NAME.  */
6557   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6558            && TYPE_NAME (t)
6559            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6560     {
6561       /* Anonymous unions are objects, so they can have specifiers.  */;
6562       SET_ANON_AGGR_TYPE_P (t);
6563
6564       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6565         pedwarn ("ISO C++ prohibits anonymous structs");
6566     }
6567
6568   else if (ob_modifier)
6569     {
6570       if (ob_modifier == ridpointers[(int) RID_INLINE]
6571           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6572         cp_error ("`%D' can only be specified for functions", ob_modifier);
6573       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6574         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6575       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6576         cp_error ("`%D' can only be specified for constructors",
6577                   ob_modifier);
6578       else
6579         cp_error ("`%D' can only be specified for objects and functions",
6580                   ob_modifier);
6581     }
6582
6583   return t;
6584 }
6585
6586 /* Called when a declaration is seen that contains no names to declare.
6587    If its type is a reference to a structure, union or enum inherited
6588    from a containing scope, shadow that tag name for the current scope
6589    with a forward reference.
6590    If its type defines a new named structure or union
6591    or defines an enum, it is valid but we need not do anything here.
6592    Otherwise, it is an error.
6593
6594    C++: may have to grok the declspecs to learn about static,
6595    complain for anonymous unions.  */
6596
6597 void
6598 shadow_tag (declspecs)
6599      tree declspecs;
6600 {
6601   tree t = check_tag_decl (declspecs);
6602
6603   if (t)
6604     maybe_process_partial_specialization (t);
6605
6606   /* This is where the variables in an anonymous union are
6607      declared.  An anonymous union declaration looks like:
6608      union { ... } ;
6609      because there is no declarator after the union, the parser
6610      sends that declaration here.  */
6611   if (t && ANON_AGGR_TYPE_P (t))
6612     {
6613       fixup_anonymous_aggr (t);
6614
6615       if (TYPE_FIELDS (t))
6616         {
6617           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6618                                       NULL_TREE);
6619           finish_anon_union (decl);
6620         }
6621     }
6622 }
6623 \f
6624 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6625
6626 tree
6627 groktypename (typename)
6628      tree typename;
6629 {
6630   if (TREE_CODE (typename) != TREE_LIST)
6631     return typename;
6632   return grokdeclarator (TREE_VALUE (typename),
6633                          TREE_PURPOSE (typename),
6634                          TYPENAME, 0, NULL_TREE);
6635 }
6636
6637 /* Decode a declarator in an ordinary declaration or data definition.
6638    This is called as soon as the type information and variable name
6639    have been parsed, before parsing the initializer if any.
6640    Here we create the ..._DECL node, fill in its type,
6641    and put it on the list of decls for the current context.
6642    The ..._DECL node is returned as the value.
6643
6644    Exception: for arrays where the length is not specified,
6645    the type is left null, to be filled in by `cp_finish_decl'.
6646
6647    Function definitions do not come here; they go to start_function
6648    instead.  However, external and forward declarations of functions
6649    do go through here.  Structure field declarations are done by
6650    grokfield and not through here.  */
6651
6652 /* Set this to zero to debug not using the temporary obstack
6653    to parse initializers.  */
6654 int debug_temp_inits = 1;
6655
6656 tree
6657 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6658      tree declarator, declspecs;
6659      int initialized;
6660      tree attributes, prefix_attributes;
6661 {
6662   register tree decl;
6663   register tree type, tem;
6664   tree context;
6665   extern int have_extern_spec;
6666   extern int used_extern_spec;
6667   tree attrlist;
6668
6669 #if 0
6670   /* See code below that used this.  */
6671   int init_written = initialized;
6672 #endif
6673
6674   /* This should only be done once on the top most decl.  */
6675   if (have_extern_spec && !used_extern_spec)
6676     {
6677       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6678                                   declspecs);
6679       used_extern_spec = 1;
6680     }
6681
6682   if (attributes || prefix_attributes)
6683     attrlist = build_scratch_list (attributes, prefix_attributes);
6684   else
6685     attrlist = NULL_TREE;
6686
6687   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6688                          attrlist);
6689                          
6690   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6691     return NULL_TREE;
6692
6693   type = TREE_TYPE (decl);
6694
6695   if (type == error_mark_node)
6696     return NULL_TREE;
6697
6698   context
6699     = (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
6700       ? DECL_CLASS_CONTEXT (decl)
6701       : DECL_CONTEXT (decl);
6702
6703   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6704       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6705     {
6706       /* When parsing the initializer, lookup should use the object's
6707          namespace. */
6708       push_decl_namespace (context);
6709     }
6710
6711   /* We are only interested in class contexts, later. */
6712   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6713     context = NULL_TREE;
6714
6715   if (initialized)
6716     /* Is it valid for this decl to have an initializer at all?
6717        If not, set INITIALIZED to zero, which will indirectly
6718        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6719     switch (TREE_CODE (decl))
6720       {
6721       case TYPE_DECL:
6722         /* typedef foo = bar  means give foo the same type as bar.
6723            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6724            Any other case of an initialization in a TYPE_DECL is an error.  */
6725         if (pedantic || list_length (declspecs) > 1)
6726           {
6727             cp_error ("typedef `%D' is initialized", decl);
6728             initialized = 0;
6729           }
6730         break;
6731
6732       case FUNCTION_DECL:
6733         cp_error ("function `%#D' is initialized like a variable", decl);
6734         initialized = 0;
6735         break;
6736
6737       default:
6738         break;
6739       }
6740
6741   if (initialized)
6742     {
6743       if (! toplevel_bindings_p ()
6744           && DECL_EXTERNAL (decl))
6745         cp_warning ("declaration of `%#D' has `extern' and is initialized",
6746                     decl);
6747       DECL_EXTERNAL (decl) = 0;
6748       if (toplevel_bindings_p ())
6749         TREE_STATIC (decl) = 1;
6750
6751       /* Tell `pushdecl' this is an initialized decl
6752          even though we don't yet have the initializer expression.
6753          Also tell `cp_finish_decl' it may store the real initializer.  */
6754       DECL_INITIAL (decl) = error_mark_node;
6755     }
6756
6757 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6758   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
6759 #endif
6760   
6761   /* Set attributes here so if duplicate decl, will have proper attributes.  */
6762   cplus_decl_attributes (decl, attributes, prefix_attributes);
6763
6764   if (context && TYPE_SIZE (complete_type (context)) != NULL_TREE)
6765     {
6766       push_nested_class (context, 2);
6767
6768       if (TREE_CODE (decl) == VAR_DECL)
6769         {
6770           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
6771           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
6772             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
6773           else
6774             {
6775               if (DECL_CONTEXT (field) != context)
6776                 {
6777                   cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'",
6778                               DECL_CONTEXT (field), DECL_NAME (decl),
6779                               context, DECL_NAME (decl));
6780                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
6781                 }
6782               /* Static data member are tricky; an in-class initialization
6783                  still doesn't provide a definition, so the in-class
6784                  declaration will have DECL_EXTERNAL set, but will have an
6785                  initialization.  Thus, duplicate_decls won't warn
6786                  about this situation, and so we check here.  */
6787               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
6788                 cp_error ("duplicate initialization of %D", decl);
6789               if (duplicate_decls (decl, field))
6790                 decl = field;
6791             }
6792         }
6793       else
6794         {
6795           tree field = check_classfn (context, decl);
6796           if (field && duplicate_decls (decl, field))
6797             decl = field;
6798         }
6799
6800       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
6801       DECL_IN_AGGR_P (decl) = 0;
6802       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 
6803           || CLASSTYPE_USE_TEMPLATE (context))
6804         {
6805           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
6806           /* [temp.expl.spec] An explicit specialization of a static data
6807              member of a template is a definition if the declaration
6808              includes an initializer; otherwise, it is a declaration.
6809
6810              We check for processing_specialization so this only applies
6811              to the new specialization syntax.  */
6812           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
6813             DECL_EXTERNAL (decl) = 1;
6814         }
6815
6816       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
6817         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
6818                     decl);
6819     }
6820
6821   /* Enter this declaration into the symbol table.  */
6822   tem = maybe_push_decl (decl);
6823
6824   if (processing_template_decl)
6825     {
6826       if (at_function_scope_p ())
6827         push_permanent_obstack ();
6828       tem = push_template_decl (tem);
6829       if (at_function_scope_p ())
6830         pop_obstacks ();
6831     }
6832
6833
6834 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
6835   /* Tell the back-end to use or not use .common as appropriate.  If we say
6836      -fconserve-space, we want this to save .data space, at the expense of
6837      wrong semantics.  If we say -fno-conserve-space, we want this to
6838      produce errors about redefs; to do this we force variables into the
6839      data segment.  */
6840   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
6841 #endif
6842   
6843   if (! processing_template_decl)
6844     start_decl_1 (tem);
6845
6846   /* Corresponding pop_obstacks is done in `cp_finish_decl'.  */
6847   push_obstacks_nochange ();
6848
6849   return tem;
6850 }
6851
6852 void
6853 start_decl_1 (decl)
6854      tree decl;
6855 {
6856   tree type = TREE_TYPE (decl);
6857   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
6858
6859   if (type == error_mark_node)
6860     return;
6861
6862   /* If this type of object needs a cleanup, and control may
6863      jump past it, make a new binding level so that it is cleaned
6864      up only when it is initialized first.  */
6865   if (TYPE_NEEDS_DESTRUCTOR (type)
6866       && current_binding_level->more_cleanups_ok == 0)
6867     pushlevel_temporary (1);
6868
6869   if (initialized)
6870     /* Is it valid for this decl to have an initializer at all?
6871        If not, set INITIALIZED to zero, which will indirectly
6872        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6873     {
6874       /* Don't allow initializations for incomplete types except for
6875          arrays which might be completed by the initialization.  */
6876       if (TYPE_SIZE (complete_type (type)) != NULL_TREE)
6877         ;                       /* A complete type is ok.  */
6878       else if (TREE_CODE (type) != ARRAY_TYPE)
6879         {
6880           cp_error ("variable `%#D' has initializer but incomplete type",
6881                     decl);
6882           initialized = 0;
6883           type = TREE_TYPE (decl) = error_mark_node;
6884         }
6885       else if (TYPE_SIZE (complete_type (TREE_TYPE (type))) == NULL_TREE)
6886         {
6887           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
6888             cp_error ("elements of array `%#D' have incomplete type", decl);
6889           /* else we already gave an error in start_decl.  */
6890           initialized = 0;
6891         }
6892     }
6893
6894   if (!initialized
6895       && TREE_CODE (decl) != TYPE_DECL
6896       && TREE_CODE (decl) != TEMPLATE_DECL
6897       && IS_AGGR_TYPE (type) && ! DECL_EXTERNAL (decl))
6898     {
6899       if ((! processing_template_decl || ! uses_template_parms (type))
6900           && TYPE_SIZE (complete_type (type)) == NULL_TREE)
6901         {
6902           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
6903                  decl);
6904           /* Change the type so that assemble_variable will give
6905              DECL an rtl we can live with: (mem (const_int 0)).  */
6906           type = TREE_TYPE (decl) = error_mark_node;
6907         }
6908       else
6909         {
6910           /* If any base type in the hierarchy of TYPE needs a constructor,
6911              then we set initialized to 1.  This way any nodes which are
6912              created for the purposes of initializing this aggregate
6913              will live as long as it does.  This is necessary for global
6914              aggregates which do not have their initializers processed until
6915              the end of the file.  */
6916           initialized = TYPE_NEEDS_CONSTRUCTING (type);
6917         }
6918     }
6919
6920   if (! initialized)
6921     DECL_INITIAL (decl) = NULL_TREE;
6922 }
6923
6924 /* Handle initialization of references.
6925    These three arguments are from `cp_finish_decl', and have the
6926    same meaning here that they do there.
6927
6928    Quotes on semantics can be found in ARM 8.4.3.  */
6929
6930 static void
6931 grok_reference_init (decl, type, init)
6932      tree decl, type, init;
6933 {
6934   tree tmp;
6935
6936   if (init == NULL_TREE)
6937     {
6938       if ((DECL_LANG_SPECIFIC (decl) == 0
6939            || DECL_IN_AGGR_P (decl) == 0)
6940           && ! DECL_THIS_EXTERN (decl))
6941         cp_error ("`%D' declared as reference but not initialized", decl);
6942       return;
6943     }
6944
6945   if (init == error_mark_node)
6946     return;
6947
6948   if (TREE_CODE (init) == CONSTRUCTOR)
6949     {
6950       cp_error ("ANSI C++ forbids use of initializer list to initialize reference `%D'", decl);
6951       return;
6952     }
6953
6954   if (TREE_CODE (init) == TREE_LIST)
6955     init = build_compound_expr (init);
6956
6957   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
6958     init = convert_from_reference (init);
6959
6960   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
6961       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
6962     {
6963       /* Note: default conversion is only called in very special cases.  */
6964       init = default_conversion (init);
6965     }
6966   
6967   /* Convert INIT to the reference type TYPE.  This may involve the
6968      creation of a temporary, whose lifetime must be the same as that
6969      of the reference.  If so, a DECL_STMT for the temporary will be
6970      added just after the DECL_STMT for DECL.  That's why we don't set
6971      DECL_INITIAL for local references (instead assigning to them
6972      explicitly); we need to allow the temporary to be initialized
6973      first.  */
6974   tmp = convert_to_reference
6975     (type, init, CONV_IMPLICIT,
6976      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
6977
6978   if (tmp == error_mark_node)
6979     return;
6980   else if (tmp != NULL_TREE)
6981     {
6982       init = tmp;
6983       tmp = save_expr (tmp);
6984       if (building_stmt_tree ())
6985         {
6986           /* Initialize the declaration.  */
6987           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
6988           /* Setting TREE_SIDE_EFFECTS prevents expand_expr from
6989              omitting this expression entirely.  */
6990           TREE_SIDE_EFFECTS (tmp) = 1;
6991           finish_expr_stmt (tmp);
6992         }
6993       else
6994         DECL_INITIAL (decl) = tmp;
6995     }
6996   else
6997     {
6998       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
6999       return;
7000     }
7001
7002   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7003     {
7004       expand_static_init (decl, DECL_INITIAL (decl));
7005       DECL_INITIAL (decl) = NULL_TREE;
7006     }
7007   return;
7008 }
7009
7010 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7011    mucking with forces it does not comprehend (i.e. initialization with a
7012    constructor).  If we are at global scope and won't go into COMMON, fill
7013    it in with a dummy CONSTRUCTOR to force the variable into .data;
7014    otherwise we can use error_mark_node.  */
7015
7016 static tree
7017 obscure_complex_init (decl, init)
7018      tree decl, init;
7019 {
7020   if (! flag_no_inline && TREE_STATIC (decl))
7021     {
7022       if (extract_init (decl, init))
7023         return NULL_TREE;
7024     }
7025
7026 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7027   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7028     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7029                                  NULL_TREE);
7030   else
7031 #endif
7032     DECL_INITIAL (decl) = error_mark_node;
7033
7034   return init;
7035 }
7036
7037 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7038    array until we finish parsing the initializer.  If that's the
7039    situation we're in, update DECL accordingly.  */
7040
7041 static void
7042 maybe_deduce_size_from_array_init (decl, init)
7043      tree decl;
7044      tree init;
7045 {
7046   tree type = TREE_TYPE (decl);
7047
7048   if (TREE_CODE (type) == ARRAY_TYPE
7049       && TYPE_DOMAIN (type) == NULL_TREE
7050       && TREE_CODE (decl) != TYPE_DECL)
7051     {
7052       int do_default
7053         = (TREE_STATIC (decl)
7054            /* Even if pedantic, an external linkage array
7055               may have incomplete type at first.  */
7056            ? pedantic && ! DECL_EXTERNAL (decl)
7057            : !DECL_EXTERNAL (decl));
7058       tree initializer = init ? init : DECL_INITIAL (decl);
7059       int failure = complete_array_type (type, initializer, do_default);
7060
7061       if (failure == 1)
7062         cp_error ("initializer fails to determine size of `%D'", decl);
7063
7064       if (failure == 2)
7065         {
7066           if (do_default)
7067             cp_error ("array size missing in `%D'", decl);
7068           /* If a `static' var's size isn't known, make it extern as
7069              well as static, so it does not get allocated.  If it's not
7070              `static', then don't mark it extern; finish_incomplete_decl
7071              will give it a default size and it will get allocated.  */
7072           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7073             DECL_EXTERNAL (decl) = 1;
7074         }
7075
7076       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7077           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7078                               integer_zero_node))
7079         cp_error ("zero-size array `%D'", decl);
7080
7081       layout_decl (decl, 0);
7082     }
7083 }
7084
7085 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7086    any appropriate error messages regarding the layout.  */
7087
7088 static void
7089 layout_var_decl (decl)
7090      tree decl;
7091 {
7092   tree type = TREE_TYPE (decl);
7093   tree ttype = target_type (type);
7094
7095   /* If we haven't already layed out this declaration, do so now.
7096      Note that we must not call complete type for an external object
7097      because it's type might involve templates that we are not
7098      supposed to isntantiate yet.  (And it's perfectly legal to say 
7099      `extern X x' for some incomplete type `X'.)  */
7100   if (!DECL_EXTERNAL (decl))
7101     complete_type (type);
7102   if (!DECL_SIZE (decl)&& TYPE_SIZE (type))
7103     layout_decl (decl, 0);
7104
7105   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7106     {
7107       /* An automatic variable with an incomplete type: that is an error.
7108          Don't talk about array types here, since we took care of that
7109          message in grokdeclarator.  */
7110       cp_error ("storage size of `%D' isn't known", decl);
7111       TREE_TYPE (decl) = error_mark_node;
7112     }
7113   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7114     /* Let debugger know it should output info for this type.  */
7115     note_debug_info_needed (ttype);
7116
7117   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7118     note_debug_info_needed (DECL_CONTEXT (decl));
7119
7120   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7121       && DECL_SIZE (decl) != NULL_TREE
7122       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7123     {
7124       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7125         constant_expression_warning (DECL_SIZE (decl));
7126       else
7127         cp_error ("storage size of `%D' isn't constant", decl);
7128     }
7129 }
7130
7131 /* If a local static variable is declared in an inline function, or if
7132    we have a weak definition, we must endeavor to create only one
7133    instance of the variable at link-time.  */
7134
7135 static void
7136 maybe_commonize_var (decl)
7137      tree decl;
7138 {
7139   /* Static data in a function with comdat linkage also has comdat
7140      linkage.  */
7141   if (TREE_STATIC (decl)
7142       /* Don't mess with __FUNCTION__.  */
7143       && ! TREE_ASM_WRITTEN (decl)
7144       && current_function_decl
7145       && DECL_CONTEXT (decl) == current_function_decl
7146       && (DECL_THIS_INLINE (current_function_decl)
7147           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7148       && TREE_PUBLIC (current_function_decl))
7149     {
7150       /* Rather than try to get this right with inlining, we suppress
7151          inlining of such functions.  */
7152       current_function_cannot_inline
7153         = "function with static variable cannot be inline";
7154
7155       /* If flag_weak, we don't need to mess with this, as we can just
7156          make the function weak, and let it refer to its unique local
7157          copy.  This works because we don't allow the function to be
7158          inlined.  */
7159       if (! flag_weak)
7160         {
7161           if (DECL_INTERFACE_KNOWN (current_function_decl))
7162             {
7163               TREE_PUBLIC (decl) = 1;
7164               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7165             }
7166           else if (DECL_INITIAL (decl) == NULL_TREE
7167                    || DECL_INITIAL (decl) == error_mark_node)
7168             {
7169               TREE_PUBLIC (decl) = 1;
7170               DECL_COMMON (decl) = 1;
7171             }
7172           /* else we lose. We can only do this if we can use common,
7173              which we can't if it has been initialized.  */
7174
7175           if (TREE_PUBLIC (decl))
7176             DECL_ASSEMBLER_NAME (decl)
7177               = build_static_name (current_function_decl, DECL_NAME (decl));
7178           else if (! DECL_ARTIFICIAL (decl))
7179             {
7180               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7181               cp_warning_at ("  you can work around this by removing the initializer", decl);
7182             }
7183         }
7184     }
7185   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7186     /* Set it up again; we might have set DECL_INITIAL since the last
7187        time.  */
7188     comdat_linkage (decl);
7189 }
7190
7191 /* Issue an error message if DECL is an uninitialized const variable.  */
7192
7193 static void
7194 check_for_uninitialized_const_var (decl)
7195      tree decl;
7196 {
7197   tree type = TREE_TYPE (decl);
7198
7199   /* ``Unless explicitly declared extern, a const object does not have
7200      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7201      7.1.6 */
7202   if (TREE_CODE (decl) == VAR_DECL
7203       && TREE_CODE (type) != REFERENCE_TYPE
7204       && CP_TYPE_CONST_P (type)
7205       && !TYPE_NEEDS_CONSTRUCTING (type)
7206       && !DECL_INITIAL (decl))
7207     cp_error ("uninitialized const `%D'", decl);
7208 }
7209
7210 /* Verify INIT (the initializer for DECL), and record the
7211    initialization in DECL_INITIAL, if appropriate.  Returns a new
7212    value for INIT.  */
7213
7214 static tree
7215 check_initializer (decl, init)
7216      tree decl;
7217      tree init;
7218 {
7219   tree type;
7220
7221   if (TREE_CODE (decl) == FIELD_DECL)
7222     return init;
7223
7224   type = TREE_TYPE (decl);
7225
7226   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7227   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7228     init = NULL_TREE;
7229
7230   /* Check the initializer.  */
7231   if (init)
7232     {
7233       /* Things that are going to be initialized need to have complete
7234          type.  */
7235       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7236
7237       if (type == error_mark_node)
7238         /* We will have already complained.  */
7239         init = NULL_TREE;
7240       else if (TYPE_SIZE (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7241         {
7242           cp_error ("variable-sized object `%D' may not be initialized", decl);
7243           init = NULL_TREE;
7244         }
7245       else if (TREE_CODE (type) == ARRAY_TYPE
7246                && !TYPE_SIZE (TREE_TYPE (type)))
7247         {
7248           cp_error ("elements of array `%#D' have incomplete type", decl);
7249           init = NULL_TREE;
7250         }
7251       else if (!TYPE_SIZE (type))
7252         {
7253           cp_error ("`%D' has incomplete type", decl);
7254           TREE_TYPE (decl) = error_mark_node;
7255           init = NULL_TREE;
7256         }
7257     }
7258
7259   if (TREE_CODE (decl) == CONST_DECL)
7260     {
7261       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7262
7263       DECL_INITIAL (decl) = init;
7264
7265       /* This will keep us from needing to worry about our obstacks.  */
7266       my_friendly_assert (init != NULL_TREE, 149);
7267       init = NULL_TREE;
7268     }
7269   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7270     {
7271       if (TREE_STATIC (decl))
7272         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7273       grok_reference_init (decl, type, init);
7274       init = NULL_TREE;
7275     }
7276   else if (init)
7277     {
7278       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7279         {
7280           if (TREE_CODE (type) == ARRAY_TYPE)
7281             init = digest_init (type, init, (tree *) 0);
7282           else if (TREE_CODE (init) == CONSTRUCTOR
7283                    && TREE_HAS_CONSTRUCTOR (init))
7284             {
7285               if (TYPE_NON_AGGREGATE_CLASS (type))
7286                 {
7287                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7288                             decl);
7289                   init = error_mark_node;
7290                 }
7291               else
7292                 goto dont_use_constructor;
7293             }
7294         }
7295       else
7296         {
7297         dont_use_constructor:
7298           if (TREE_CODE (init) != TREE_VEC)
7299             init = store_init_value (decl, init);
7300         }
7301
7302       if (init)
7303         /* We must hide the initializer so that expand_decl
7304            won't try to do something it does not understand.  */
7305         init = obscure_complex_init (decl, init);
7306     }
7307   else if (DECL_EXTERNAL (decl))
7308     ;
7309   else if (TREE_CODE_CLASS (TREE_CODE (type)) == 't'
7310            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7311     {
7312       tree core_type = strip_array_types (type);
7313
7314       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7315         {
7316           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7317             cp_error ("structure `%D' with uninitialized const members", decl);
7318           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7319             cp_error ("structure `%D' with uninitialized reference members",
7320                       decl);
7321         }
7322
7323       check_for_uninitialized_const_var (decl);
7324
7325       if (TYPE_SIZE (type) != NULL_TREE
7326           && TYPE_NEEDS_CONSTRUCTING (type))
7327         init = obscure_complex_init (decl, NULL_TREE);
7328
7329     }
7330   else
7331     check_for_uninitialized_const_var (decl);
7332   
7333   return init;
7334 }
7335
7336 /* If DECL is not a local variable, give it RTL.  */
7337
7338 static void
7339 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7340      tree decl;
7341      tree init;
7342      const char *asmspec;
7343 {
7344   int toplev;
7345   tree type;
7346
7347   type = TREE_TYPE (decl);
7348   toplev = toplevel_bindings_p ();
7349
7350   /* Handle non-variables up front.  */
7351   if (TREE_CODE (decl) != VAR_DECL)
7352     {
7353       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7354       return;
7355     }
7356
7357   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7358   if (asmspec)
7359     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7360
7361   if (DECL_VIRTUAL_P (decl))
7362     make_decl_rtl (decl, NULL_PTR, toplev);
7363   else if (TREE_READONLY (decl)
7364            && DECL_INITIAL (decl) != NULL_TREE
7365            && DECL_INITIAL (decl) != error_mark_node
7366            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7367     {
7368       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7369
7370       if (! toplev
7371           && TREE_STATIC (decl)
7372           && ! TREE_SIDE_EFFECTS (decl)
7373           && ! TREE_PUBLIC (decl)
7374           && ! DECL_EXTERNAL (decl)
7375           && ! TYPE_NEEDS_DESTRUCTOR (type)
7376           && DECL_MODE (decl) != BLKmode)
7377         {
7378           /* If this variable is really a constant, then fill its DECL_RTL
7379              slot with something which won't take up storage.
7380              If something later should take its address, we can always give
7381              it legitimate RTL at that time.  */
7382           DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
7383           store_expr (DECL_INITIAL (decl), DECL_RTL (decl), 0);
7384           TREE_ASM_WRITTEN (decl) = 1;
7385         }
7386       else if (toplev && ! TREE_PUBLIC (decl))
7387         {
7388           /* If this is a static const, change its apparent linkage
7389              if it belongs to a #pragma interface.  */
7390           if (!interface_unknown)
7391             {
7392               TREE_PUBLIC (decl) = 1;
7393               DECL_EXTERNAL (decl) = interface_only;
7394             }
7395           make_decl_rtl (decl, asmspec, toplev);
7396         }
7397       else if (toplev)
7398         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7399     }
7400   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7401     {
7402       my_friendly_assert (TREE_STATIC (decl), 19990828);
7403
7404       if (init == NULL_TREE
7405 #ifdef DEFAULT_STATIC_DEFS
7406           /* If this code is dead, then users must
7407              explicitly declare static member variables
7408              outside the class def'n as well.  */
7409           && TYPE_NEEDS_CONSTRUCTING (type)
7410 #endif
7411           )
7412         {
7413           DECL_EXTERNAL (decl) = 1;
7414           make_decl_rtl (decl, asmspec, 1);
7415         }
7416       else
7417         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7418     }
7419   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7420            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7421     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7422 }
7423
7424 /* The old ARM scoping rules injected variables declared in the
7425    initialization statement of a for-statement into the surrounding
7426    scope.  We support this usage, in order to be backward-compatible.
7427    DECL is a just-declared VAR_DECL; if necessary inject its
7428    declaration into the surrounding scope.  */
7429
7430 void
7431 maybe_inject_for_scope_var (decl)
7432      tree decl;
7433 {
7434   if (current_binding_level->is_for_scope)
7435     {
7436       struct binding_level *outer 
7437         = current_binding_level->level_chain;
7438
7439       /* Check to see if the same name is already bound at the outer
7440          level, either because it was directly declared, or because a
7441          dead for-decl got preserved.  In either case, the code would
7442          not have been valid under the ARM scope rules, so clear
7443          is_for_scope for the current_binding_level.
7444
7445          Otherwise, we need to preserve the temp slot for decl to last
7446          into the outer binding level.  */
7447
7448       tree outer_binding 
7449         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7450               
7451       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7452           && (TREE_CODE (BINDING_VALUE (outer_binding)) 
7453               == VAR_DECL)
7454           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7455         {
7456           BINDING_VALUE (outer_binding)
7457             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7458           current_binding_level->is_for_scope = 0;
7459         }
7460       else if (DECL_IN_MEMORY_P (decl))
7461         preserve_temp_slots (DECL_RTL (decl));
7462     }
7463 }
7464
7465 /* Generate code to initialize DECL (a local variable).  */
7466
7467 void
7468 initialize_local_var (decl, init, flags)
7469      tree decl;
7470      tree init;
7471      int flags;
7472 {
7473   tree type = TREE_TYPE (decl);
7474
7475   /* If the type is bogus, don't bother initializing the variable.  */
7476   if (type == error_mark_node)
7477     return;
7478
7479   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7480     {
7481       /* If we used it already as memory, it must stay in memory.  */
7482       DECL_INITIAL (decl) = NULL_TREE;
7483       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7484     }
7485
7486   /* Local statics are handled differently from ordinary automatic
7487      variables.  */
7488   if (TREE_STATIC (decl))
7489     {
7490       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7491           || TYPE_NEEDS_DESTRUCTOR (type))
7492         expand_static_init (decl, init);
7493       return;
7494     }
7495
7496   if (DECL_SIZE (decl) && type != error_mark_node)
7497     {
7498       int already_used;
7499   
7500       /* Compute and store the initial value.  */
7501       already_used = TREE_USED (decl) || TREE_USED (type);
7502
7503       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7504         {
7505           int saved_stmts_are_full_exprs_p;
7506
7507           emit_line_note (DECL_SOURCE_FILE (decl),
7508                           DECL_SOURCE_LINE (decl));
7509           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7510           stmts_are_full_exprs_p = 1;
7511           finish_expr_stmt (build_aggr_init (decl, init, flags));
7512           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7513         }
7514
7515       /* Set this to 0 so we can tell whether an aggregate which was
7516          initialized was ever used.  Don't do this if it has a
7517          destructor, so we don't complain about the 'resource
7518          allocation is initialization' idiom.  Now set
7519          attribute((unused)) on types so decls of that type will be
7520          marked used. (see TREE_USED, above.)  */
7521       if (TYPE_NEEDS_CONSTRUCTING (type)
7522           && ! already_used
7523           && !TYPE_NEEDS_DESTRUCTOR (type) 
7524           && DECL_NAME (decl))
7525         TREE_USED (decl) = 0;
7526       else if (already_used)
7527         TREE_USED (decl) = 1;
7528     }
7529 }
7530
7531 /* Generate code to destroy DECL (a local variable).  */
7532
7533 void 
7534 destroy_local_var (decl)
7535      tree decl;
7536 {
7537   tree type = TREE_TYPE (decl);
7538   tree cleanup;
7539
7540   /* Only variables get cleaned up.  */
7541   if (TREE_CODE (decl) != VAR_DECL)
7542     return;
7543   
7544   /* And only things with destructors need cleaning up.  */
7545   if (!TYPE_NEEDS_DESTRUCTOR (type))
7546     return;
7547
7548   if (TREE_CODE (decl) == VAR_DECL &&
7549       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7550     /* We don't clean up things that aren't defined in this
7551        translation unit, or that need a static cleanup.  The latter
7552        are handled by finish_file.  */
7553     return;
7554   
7555   /* Compute the cleanup.  */
7556   cleanup = maybe_build_cleanup (decl);
7557
7558   /* Record the cleanup required for this declaration.  */
7559   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7560       && cleanup)
7561     finish_decl_cleanup (decl, cleanup);
7562 }
7563
7564 /* Let the back-end know about DECL.  */
7565
7566 void
7567 emit_local_var (decl)
7568      tree decl;
7569 {
7570   /* Create RTL for this variable.  */
7571   if (DECL_RTL (decl))
7572     /* Only a RESULT_DECL should have non-NULL RTL when
7573                      arriving here.  All other local variables are
7574                      assigned RTL in this function.  */
7575     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL, 
7576                         19990828);
7577   else
7578     {
7579       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7580         /* The user must have specified an assembler name for this
7581            variable.  Set that up now.  */
7582         rest_of_decl_compilation 
7583           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7584            /*top_level=*/0, /*at_end=*/0);
7585       else
7586         expand_decl (decl);
7587     }
7588
7589   /* Actually do the initialization.  */
7590   expand_start_target_temps ();
7591   expand_decl_init (decl);
7592   expand_end_target_temps ();
7593 }
7594
7595 /* Finish processing of a declaration;
7596    install its line number and initial value.
7597    If the length of an array type is not known before,
7598    it must be determined now, from the initial value, or it is an error.
7599
7600    Call `pop_obstacks' iff NEED_POP is nonzero.
7601
7602    For C++, `cp_finish_decl' must be fairly evasive:  it must keep initializers
7603    for aggregates that have constructors alive on the permanent obstack,
7604    so that the global initializing functions can be written at the end.
7605
7606    INIT0 holds the value of an initializer that should be allowed to escape
7607    the normal rules.
7608
7609    FLAGS is LOOKUP_ONLYCONVERTING is the = init syntax was used, else 0
7610    if the (init) syntax was used.
7611
7612    For functions that take default parameters, DECL points to its
7613    "maximal" instantiation.  `cp_finish_decl' must then also declared its
7614    subsequently lower and lower forms of instantiation, checking for
7615    ambiguity as it goes.  This can be sped up later.  */
7616
7617 void
7618 cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
7619      tree decl, init;
7620      tree asmspec_tree;
7621      int need_pop;
7622      int flags;
7623 {
7624   register tree type;
7625   tree ttype = NULL_TREE;
7626   int temporary = allocation_temporary_p ();
7627   const char *asmspec = NULL;
7628   int was_readonly = 0;
7629
7630   /* If this is 0, then we did not change obstacks.  */
7631   if (! decl)
7632     {
7633       if (init)
7634         error ("assignment (not initialization) in declaration");
7635       return;
7636     }
7637
7638   /* If a name was specified, get the string.  */
7639   if (asmspec_tree)
7640       asmspec = TREE_STRING_POINTER (asmspec_tree);
7641
7642   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7643     {
7644       cp_error ("Cannot initialize `%D' to namespace `%D'",
7645                 decl, init);
7646       init = NULL_TREE;
7647     }
7648
7649   if (current_class_type
7650       && DECL_REAL_CONTEXT (decl) == current_class_type
7651       && TYPE_BEING_DEFINED (current_class_type)
7652       && (DECL_INITIAL (decl) || init))
7653     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7654
7655   if (TREE_CODE (decl) == VAR_DECL 
7656       && DECL_CONTEXT (decl)
7657       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7658       && DECL_CONTEXT (decl) != current_namespace
7659       && init)
7660     {
7661       /* Leave the namespace of the object. */
7662       pop_decl_namespace ();
7663     }
7664
7665   type = TREE_TYPE (decl);
7666
7667   if (type == error_mark_node)
7668     {
7669       if (toplevel_bindings_p () && temporary)
7670         end_temporary_allocation ();
7671
7672       return;
7673     }
7674
7675   /* Add this declaration to the statement-tree.  */
7676   if (building_stmt_tree () 
7677       && TREE_CODE (current_scope ()) == FUNCTION_DECL)
7678     add_decl_stmt (decl);
7679
7680   if (TYPE_HAS_MUTABLE_P (type))
7681     TREE_READONLY (decl) = 0;
7682
7683   if (processing_template_decl)
7684     {
7685       if (init && DECL_INITIAL (decl))
7686         DECL_INITIAL (decl) = init;
7687       goto finish_end0;
7688     }
7689
7690   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7691   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7692
7693   /* Take care of TYPE_DECLs up front.  */
7694   if (TREE_CODE (decl) == TYPE_DECL)
7695     {
7696       if (init && DECL_INITIAL (decl))
7697         {
7698           /* typedef foo = bar; store the type of bar as the type of foo.  */
7699           TREE_TYPE (decl) = type = TREE_TYPE (init);
7700           DECL_INITIAL (decl) = init = NULL_TREE;
7701         }
7702       if (type != error_mark_node
7703           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7704         {
7705           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7706             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7707           set_identifier_type_value (DECL_NAME (decl), type);
7708           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7709         }
7710       GNU_xref_decl (current_function_decl, decl);
7711
7712       /* If we have installed this as the canonical typedef for this
7713          type, and that type has not been defined yet, delay emitting
7714          the debug information for it, as we will emit it later.  */
7715       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7716           && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE)
7717         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7718
7719       rest_of_decl_compilation (decl, NULL_PTR,
7720                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7721       goto finish_end;
7722     }
7723
7724   if (TREE_CODE (decl) != FUNCTION_DECL)
7725     ttype = target_type (type);
7726
7727   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7728       && TYPE_NEEDS_CONSTRUCTING (type))
7729     {
7730       /* Currently, GNU C++ puts constants in text space, making them
7731          impossible to initialize.  In the future, one would hope for
7732          an operating system which understood the difference between
7733          initialization and the running of a program.  */
7734       was_readonly = 1;
7735       TREE_READONLY (decl) = 0;
7736     }
7737
7738   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
7739     {
7740       /* This must override the asm specifier which was placed by
7741          grokclassfn.  Lay this out fresh.  */
7742       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
7743       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7744       make_decl_rtl (decl, asmspec, 0);
7745     }
7746
7747   /* Deduce size of array from initialization, if not already known.  */
7748   maybe_deduce_size_from_array_init (decl, init);
7749   init = check_initializer (decl, init);
7750
7751   GNU_xref_decl (current_function_decl, decl);
7752
7753   /* For top-level declaration, the initial value was read in
7754      the temporary obstack.  MAXINDEX, rtl, etc. to be made below
7755      must go in the permanent obstack; but don't discard the
7756      temporary data yet.  */
7757
7758   if (toplevel_bindings_p () && temporary)
7759     end_temporary_allocation ();
7760
7761   if (TREE_CODE (decl) == VAR_DECL)
7762     layout_var_decl (decl);
7763
7764   /* Output the assembler code and/or RTL code for variables and functions,
7765      unless the type is an undefined structure or union.
7766      If not, it will get done when the type is completed.  */
7767   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
7768       || TREE_CODE (decl) == RESULT_DECL)
7769     {
7770       if (TREE_CODE (decl) == VAR_DECL)
7771         maybe_commonize_var (decl);
7772
7773       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7774
7775       if (TREE_CODE (type) == FUNCTION_TYPE 
7776           || TREE_CODE (type) == METHOD_TYPE)
7777         abstract_virtuals_error (decl, 
7778                                  strip_array_types (TREE_TYPE (type)));
7779       else 
7780         abstract_virtuals_error (decl, strip_array_types (type));
7781
7782       if (TREE_CODE (decl) == FUNCTION_DECL)
7783         ;
7784       else if (DECL_EXTERNAL (decl)
7785                && ! (DECL_LANG_SPECIFIC (decl)
7786                      && DECL_NOT_REALLY_EXTERN (decl)))
7787         {
7788           if (init)
7789             DECL_INITIAL (decl) = init;
7790         }
7791       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
7792         {
7793           /* This is a local declaration.  */
7794           if (doing_semantic_analysis_p ())
7795             maybe_inject_for_scope_var (decl);
7796           /* Initialize the local variable.  But, if we're building a
7797              statement-tree, we'll do the initialization when we
7798              expand the tree.  */
7799           if (processing_template_decl)
7800             {
7801               if (init || DECL_INITIAL (decl) == error_mark_node)
7802                 DECL_INITIAL (decl) = init;
7803             }
7804           else
7805             {
7806               /* If we're not building RTL, then we need to do so
7807                  now.  */
7808               if (!building_stmt_tree ())
7809                 emit_local_var (decl);
7810               /* Initialize the variable.  */
7811               initialize_local_var (decl, init, flags);
7812               /* Clean up the variable.  */
7813               destroy_local_var (decl);
7814             }
7815         }
7816       else if (TREE_STATIC (decl) && type != error_mark_node)
7817         {
7818           /* Cleanups for static variables are handled by `finish_file'.  */
7819           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7820               || TYPE_NEEDS_DESTRUCTOR (type))
7821             expand_static_init (decl, init);
7822         }
7823     finish_end0:
7824
7825       /* Undo call to `pushclass' that was done in `start_decl'
7826          due to initialization of qualified member variable.
7827          I.e., Foo::x = 10;  */
7828       {
7829         tree context = DECL_REAL_CONTEXT (decl);
7830         if (context
7831             && TREE_CODE_CLASS (TREE_CODE (context)) == 't'
7832             && (TREE_CODE (decl) == VAR_DECL
7833                 /* We also have a pushclass done that we need to undo here
7834                    if we're at top level and declare a method.  */
7835                 || TREE_CODE (decl) == FUNCTION_DECL)
7836             /* If size hasn't been set, we're still defining it,
7837                and therefore inside the class body; don't pop
7838                the binding level..  */
7839             && TYPE_SIZE (context) != NULL_TREE
7840             && context == current_class_type)
7841           pop_nested_class ();
7842       }
7843     }
7844
7845  finish_end:
7846
7847   /* If requested, warn about definitions of large data objects.  */
7848
7849   if (warn_larger_than
7850       && ! processing_template_decl
7851       && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
7852       && !DECL_EXTERNAL (decl))
7853     {
7854       register tree decl_size = DECL_SIZE (decl);
7855
7856       if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
7857         {
7858           unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
7859
7860           if (units > larger_than_size)
7861             warning_with_decl (decl, "size of `%s' is %u bytes", units);
7862         }
7863     }
7864
7865   if (need_pop)
7866     /* Resume permanent allocation, if not within a function.  The
7867        corresponding push_obstacks_nochange is in start_decl,
7868        start_method, groktypename, and in grokfield.  */
7869     pop_obstacks ();
7870
7871   if (was_readonly)
7872     TREE_READONLY (decl) = 1;
7873 }
7874
7875 /* This is here for a midend callback from c-common.c */
7876
7877 void
7878 finish_decl (decl, init, asmspec_tree)
7879      tree decl, init;
7880      tree asmspec_tree;
7881 {
7882   cp_finish_decl (decl, init, asmspec_tree, 1, 0);
7883 }
7884
7885 /* Generate code to handle the destruction of the function-scoped
7886    static variable DECL.  */
7887
7888 static void
7889 destroy_local_static (decl)
7890      tree decl;
7891 {
7892   tree cleanup, fcall;
7893   tree compound_stmt;
7894   int saved_flag_access_control;
7895
7896   if (atexit_node == 0)
7897     {
7898       tree atexit_fndecl, PFV, pfvlist;
7899       /* Remember this information until end of file.  */
7900       push_obstacks (&permanent_obstack, &permanent_obstack);
7901       PFV = build_pointer_type (build_function_type
7902                                 (void_type_node, void_list_node));
7903
7904       pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
7905
7906       push_lang_context (lang_name_c);
7907       /* Note that we do not call pushdecl for this function;
7908          there's no reason that this declaration should be
7909          accessible to anyone.  */
7910       atexit_fndecl
7911         = define_function ("atexit",
7912                            build_function_type (void_type_node,
7913                                                 pfvlist),
7914                            /*pfn=*/0, NULL_PTR);
7915       mark_used (atexit_fndecl);
7916       atexit_node = default_conversion (atexit_fndecl);
7917       pop_lang_context ();
7918       pop_obstacks ();
7919     }
7920               
7921   /* Call build_cleanup before we enter the anonymous function so that
7922      any access checks will be done relative to the current scope,
7923      rather than the scope of the anonymous function.  */
7924   build_cleanup (decl);
7925
7926   /* Now start the function.  */
7927   cleanup = start_anon_func ();
7928
7929   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7930      to the original function, rather than the anonymous one.  That
7931      will make the back-end think that nested functions are in use,
7932      which causes confusion.  */
7933   saved_flag_access_control = flag_access_control;
7934   flag_access_control = 0;
7935   fcall = build_cleanup (decl);
7936   flag_access_control = saved_flag_access_control;
7937
7938   /* Create the body of the anonymous function.  */
7939   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
7940   finish_expr_stmt (fcall);
7941   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
7942   end_anon_func ();
7943
7944   /* Call atexit with the cleanup function.  */
7945   mark_addressable (cleanup);
7946   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
7947   fcall = build_function_call (atexit_node,
7948                                tree_cons (NULL_TREE, 
7949                                           cleanup, 
7950                                           NULL_TREE));
7951   finish_expr_stmt (fcall);
7952 }
7953
7954 void
7955 expand_static_init (decl, init)
7956      tree decl;
7957      tree init;
7958 {
7959   tree oldstatic = value_member (decl, static_aggregates);
7960
7961   if (oldstatic)
7962     {
7963       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
7964         cp_error ("multiple initializations given for `%D'", decl);
7965     }
7966   else if (! toplevel_bindings_p ())
7967     {
7968       /* Emit code to perform this initialization but once.  */
7969       tree temp;
7970       tree if_stmt;
7971       tree then_clause;
7972       tree assignment;
7973       tree temp_init;
7974
7975       /* Remember this information until end of file.  */
7976       push_obstacks (&permanent_obstack, &permanent_obstack);
7977
7978       /* Emit code to perform this initialization but once.  This code
7979          looks like:
7980
7981            static int temp = 0;
7982            if (!temp) {
7983              // Do initialization.
7984              temp = 1;
7985              // Register variable for destruction at end of program.
7986            }
7987
7988          Note that the `temp' variable is only set to 1 *after* the
7989          initialization is complete.  This ensures that an exception,
7990          thrown during the construction, will cause the variable to
7991          reinitialized when we pass through this code again, as per:
7992          
7993            [stmt.dcl]
7994
7995            If the initialization exits by throwing an exception, the
7996            initialization is not complete, so it will be tried again
7997            the next time control enters the declaration.
7998
7999          In theory, this process should be thread-safe, too; multiple
8000          threads should not be able to initialize the variable more
8001          than once.  We don't yet attempt to ensure thread-safety.  */
8002       temp = get_temp_name (integer_type_node, 1);
8003       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8004
8005       /* Begin the conditional initialization.  */
8006       if_stmt = begin_if_stmt ();
8007       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8008                                             integer_zero_node), 
8009                            if_stmt);
8010       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8011
8012       /* Do the initialization itself.  */
8013       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8014           || (init && TREE_CODE (init) == TREE_LIST))
8015         assignment = build_aggr_init (decl, init, 0);
8016       else if (init)
8017         {
8018           /* The initialization we're doing here is just a bitwise
8019              copy.  */
8020           assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8021           TREE_SIDE_EFFECTS (assignment) = 1;
8022         }
8023       else
8024         assignment = NULL_TREE;
8025
8026       /* Once the assignment is complete, set TEMP to 1.  Since the
8027          construction of the static object is complete at this point,
8028          we want to make sure TEMP is set to 1 even if a temporary
8029          constructed during the initialization throws an exception
8030          when it is destroyed.  So, we combine the initialization and
8031          the assignment to TEMP into a single expression, ensuring
8032          that when we call finish_expr_stmt the cleanups will not be
8033          run until after TEMP is set to 1.  */
8034       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8035       if (assignment)
8036         {
8037           assignment = tree_cons (NULL_TREE, assignment,
8038                                   build_tree_list (NULL_TREE, 
8039                                                    temp_init));
8040           assignment = build_compound_expr (assignment);
8041         }
8042       else
8043         assignment = temp_init;
8044       finish_expr_stmt (assignment);
8045
8046       /* Use atexit to register a function for destroying this static
8047          variable.  */
8048       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
8049         destroy_local_static (decl);
8050
8051       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8052       finish_then_clause (if_stmt);
8053       finish_if_stmt ();
8054
8055       /* Resume old (possibly temporary) allocation.  */
8056       pop_obstacks ();
8057     }
8058   else
8059     {
8060       /* This code takes into account memory allocation policy of
8061          `start_decl'.  Namely, if TYPE_NEEDS_CONSTRUCTING does not
8062          hold for this object, then we must make permanent the storage
8063          currently in the temporary obstack.  */
8064       if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
8065         preserve_initializer ();
8066       static_aggregates = tree_cons (init, decl, static_aggregates);
8067     }
8068 }
8069
8070 /* Finish the declaration of a catch-parameter.  */
8071
8072 tree
8073 start_handler_parms (declspecs, declarator)
8074      tree declspecs;
8075      tree declarator;
8076 {
8077   tree decl;
8078   if (declspecs)
8079     {
8080       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8081                              1, NULL_TREE);
8082       if (decl == NULL_TREE)
8083         error ("invalid catch parameter");
8084     }
8085   else
8086     decl = NULL_TREE;
8087
8088   return decl;
8089 }
8090
8091 \f
8092 /* Make TYPE a complete type based on INITIAL_VALUE.
8093    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8094    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8095
8096 int
8097 complete_array_type (type, initial_value, do_default)
8098      tree type, initial_value;
8099      int do_default;
8100 {
8101   register tree maxindex = NULL_TREE;
8102   int value = 0;
8103   
8104   /* Allocate on the same obstack as TYPE.  */
8105   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8106   
8107   if (initial_value)
8108     {
8109       /* Note MAXINDEX  is really the maximum index,
8110          one less than the size.  */
8111       if (TREE_CODE (initial_value) == STRING_CST)
8112         {
8113           int eltsize
8114             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8115           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8116                                    / eltsize) - 1, 0);
8117         }
8118       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8119         {
8120           tree elts = CONSTRUCTOR_ELTS (initial_value);
8121           maxindex = size_binop (MINUS_EXPR, integer_zero_node, size_one_node);
8122           for (; elts; elts = TREE_CHAIN (elts))
8123             {
8124               if (TREE_PURPOSE (elts))
8125                 maxindex = TREE_PURPOSE (elts);
8126               else
8127                 maxindex = size_binop (PLUS_EXPR, maxindex, size_one_node);
8128             }
8129           maxindex = copy_node (maxindex);
8130         }
8131       else
8132         {
8133           /* Make an error message unless that happened already.  */
8134           if (initial_value != error_mark_node)
8135             value = 1;
8136           else
8137             initial_value = NULL_TREE;
8138
8139           /* Prevent further error messages.  */
8140           maxindex = build_int_2 (0, 0);
8141         }
8142     }
8143
8144   if (!maxindex)
8145     {
8146       if (do_default)
8147         maxindex = build_int_2 (0, 0);
8148       value = 2;
8149     }
8150
8151   if (maxindex)
8152     {
8153       tree itype;
8154       tree domain;
8155
8156       domain = build_index_type (maxindex);
8157       TYPE_DOMAIN (type) = domain;
8158
8159       if (! TREE_TYPE (maxindex))
8160         TREE_TYPE (maxindex) = domain;
8161       if (initial_value)
8162         itype = TREE_TYPE (initial_value);
8163       else
8164         itype = NULL;
8165       if (itype && !TYPE_DOMAIN (itype))
8166         TYPE_DOMAIN (itype) = domain;
8167       /* The type of the main variant should never be used for arrays
8168          of different sizes.  It should only ever be completed with the
8169          size of the array.  */
8170       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8171         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8172     }
8173
8174   pop_obstacks();
8175   
8176   /* Lay out the type now that we can get the real answer.  */
8177
8178   layout_type (type);
8179
8180   return value;
8181 }
8182 \f
8183 /* Return zero if something is declared to be a member of type
8184    CTYPE when in the context of CUR_TYPE.  STRING is the error
8185    message to print in that case.  Otherwise, quietly return 1.  */
8186
8187 static int
8188 member_function_or_else (ctype, cur_type, string)
8189      tree ctype, cur_type;
8190      const char *string;
8191 {
8192   if (ctype && ctype != cur_type)
8193     {
8194       error (string, TYPE_NAME_STRING (ctype));
8195       return 0;
8196     }
8197   return 1;
8198 }
8199 \f
8200 /* Subroutine of `grokdeclarator'.  */
8201
8202 /* Generate errors possibly applicable for a given set of specifiers.
8203    This is for ARM $7.1.2.  */
8204
8205 static void
8206 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8207      tree object;
8208      const char *type;
8209      int virtualp, quals, friendp, raises, inlinep;
8210 {
8211   if (virtualp)
8212     cp_error ("`%D' declared as a `virtual' %s", object, type);
8213   if (inlinep)
8214     cp_error ("`%D' declared as an `inline' %s", object, type);
8215   if (quals)
8216     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8217               object, type);
8218   if (friendp)
8219     cp_error_at ("`%D' declared as a friend", object);
8220   if (raises)
8221     cp_error_at ("`%D' declared with an exception specification", object);
8222 }
8223
8224 /* CTYPE is class type, or null if non-class.
8225    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8226    or METHOD_TYPE.
8227    DECLARATOR is the function's name.
8228    VIRTUALP is truthvalue of whether the function is virtual or not.
8229    FLAGS are to be passed through to `grokclassfn'.
8230    QUALS are qualifiers indicating whether the function is `const'
8231    or `volatile'.
8232    RAISES is a list of exceptions that this function can raise.
8233    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8234    not look, and -1 if we should not call `grokclassfn' at all.  
8235
8236    Returns `NULL_TREE' if something goes wrong, after issuing
8237    applicable error messages.  */
8238
8239 static tree
8240 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8241             raises, check, friendp, publicp, inlinep, funcdef_flag,
8242             template_count, in_namespace)
8243      tree ctype, type;
8244      tree declarator;
8245      tree orig_declarator;
8246      int virtualp;
8247      enum overload_flags flags;
8248      tree quals, raises;
8249      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8250      tree in_namespace;
8251 {
8252   tree cname, decl;
8253   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8254   int has_default_arg = 0;
8255   tree t;
8256
8257   if (ctype)
8258     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8259       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8260   else
8261     cname = NULL_TREE;
8262
8263   if (raises)
8264     {
8265       type = build_exception_variant (type, raises);
8266     }
8267
8268   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8269   /* Propagate volatile out from type to decl. */
8270   if (TYPE_VOLATILE (type))
8271     TREE_THIS_VOLATILE (decl) = 1;
8272
8273   /* If this decl has namespace scope, set that up.  */
8274   if (in_namespace)
8275     set_decl_namespace (decl, in_namespace, friendp);
8276   else if (publicp && ! ctype)
8277     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8278
8279   /* `main' and builtins have implicit 'C' linkage.  */
8280   if ((MAIN_NAME_P (declarator)
8281        || (IDENTIFIER_LENGTH (declarator) > 10
8282            && IDENTIFIER_POINTER (declarator)[0] == '_'
8283            && IDENTIFIER_POINTER (declarator)[1] == '_'
8284            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8285       && current_lang_name == lang_name_cplusplus
8286       && ctype == NULL_TREE
8287       /* NULL_TREE means global namespace.  */
8288       && DECL_CONTEXT (decl) == NULL_TREE)
8289     DECL_LANGUAGE (decl) = lang_c;
8290
8291   /* Should probably propagate const out from type to decl I bet (mrs).  */
8292   if (staticp)
8293     {
8294       DECL_STATIC_FUNCTION_P (decl) = 1;
8295       DECL_CONTEXT (decl) = ctype;
8296     }
8297
8298   if (ctype)
8299     DECL_CLASS_CONTEXT (decl) = ctype;
8300
8301   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8302     {
8303       if (processing_template_decl)
8304         error ("cannot declare `main' to be a template");
8305       if (inlinep)
8306         error ("cannot declare `main' to be inline");
8307       else if (! publicp)
8308         error ("cannot declare `main' to be static");
8309       inlinep = 0;
8310       publicp = 1;
8311     }
8312
8313   /* Members of anonymous types and local classes have no linkage; make
8314      them internal.  */
8315   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8316                 || hack_decl_function_context (TYPE_MAIN_DECL (ctype))))
8317     publicp = 0;
8318
8319   if (publicp)
8320     {
8321       /* [basic.link]: A name with no linkage (notably, the name of a class
8322          or enumeration declared in a local scope) shall not be used to
8323          declare an entity with linkage.
8324
8325          Only check this for public decls for now.  */
8326       t = no_linkage_check (TREE_TYPE (decl));
8327       if (t)
8328         {
8329           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8330             {
8331               if (DECL_LANGUAGE (decl) == lang_c)
8332                 /* Allow this; it's pretty common in C.  */;
8333               else
8334                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8335                             decl);
8336             }
8337           else
8338             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8339                         decl, t);
8340         }
8341     }
8342
8343   TREE_PUBLIC (decl) = publicp;
8344   if (! publicp)
8345     {
8346       DECL_INTERFACE_KNOWN (decl) = 1;
8347       DECL_NOT_REALLY_EXTERN (decl) = 1;
8348     }
8349
8350   if (inlinep)
8351     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8352
8353   DECL_EXTERNAL (decl) = 1;
8354   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8355     {
8356       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8357                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8358       quals = NULL_TREE;
8359     }
8360
8361   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8362     grok_op_properties (decl, virtualp, check < 0);
8363
8364   if (ctype && hack_decl_function_context (decl))
8365     DECL_NO_STATIC_CHAIN (decl) = 1;
8366
8367   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8368     if (TREE_PURPOSE (t)
8369         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8370       {
8371         has_default_arg = 1;
8372         break;
8373       }
8374
8375   if (friendp
8376       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8377     {
8378       if (funcdef_flag)
8379         cp_error
8380           ("defining explicit specialization `%D' in friend declaration",
8381            orig_declarator);
8382       else
8383         {
8384           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8385             {
8386               /* Something like `template <class T> friend void f<T>()'.  */
8387               cp_error ("template-id `%D' in declaration of primary template", 
8388                         orig_declarator);
8389               return NULL_TREE;
8390             }
8391
8392
8393           /* A friend declaration of the form friend void f<>().  Record
8394              the information in the TEMPLATE_ID_EXPR.  */
8395           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8396           DECL_TEMPLATE_INFO (decl)
8397             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8398                          TREE_OPERAND (orig_declarator, 1),
8399                          NULL_TREE);
8400
8401           if (has_default_arg)
8402             {
8403               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8404                         decl);
8405               return NULL_TREE;
8406             }
8407
8408           if (inlinep)
8409             {
8410               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'", 
8411                         decl);
8412               return NULL_TREE;
8413             }
8414         }
8415     }
8416
8417   if (has_default_arg)
8418     add_defarg_fn (decl);
8419
8420   /* Plain overloading: will not be grok'd by grokclassfn.  */
8421   if (! ctype && ! processing_template_decl
8422       && DECL_LANGUAGE (decl) != lang_c
8423       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8424     set_mangled_name_for_decl (decl);
8425
8426   if (funcdef_flag)
8427     /* Make the init_value nonzero so pushdecl knows this is not
8428        tentative.  error_mark_node is replaced later with the BLOCK.  */
8429     DECL_INITIAL (decl) = error_mark_node;
8430
8431   /* Caller will do the rest of this.  */
8432   if (check < 0)
8433     return decl;
8434
8435   if (check && funcdef_flag)
8436     DECL_INITIAL (decl) = error_mark_node;
8437
8438   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8439     {
8440       tree tmp;
8441       /* Just handle constructors here.  We could do this
8442          inside the following if stmt, but I think
8443          that the code is more legible by breaking this
8444          case out.  See comments below for what each of
8445          the following calls is supposed to do.  */
8446       DECL_CONSTRUCTOR_P (decl) = 1;
8447
8448       grokclassfn (ctype, decl, flags, quals);
8449
8450       decl = check_explicit_specialization (orig_declarator, decl,
8451                                             template_count, 
8452                                             2 * (funcdef_flag != 0) + 
8453                                             4 * (friendp != 0));
8454       if (decl == error_mark_node)
8455         return NULL_TREE;
8456
8457       if ((! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8458           && check)
8459         {
8460           tmp = check_classfn (ctype, decl);
8461
8462           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8463             tmp = DECL_TEMPLATE_RESULT(tmp);
8464
8465           if (tmp && DECL_ARTIFICIAL (tmp))
8466             cp_error ("definition of implicitly-declared `%D'", tmp);
8467           if (tmp && duplicate_decls (decl, tmp))
8468             return tmp;
8469         }
8470       if (! grok_ctor_properties (ctype, decl))
8471         return NULL_TREE;
8472     }
8473   else
8474     {
8475       tree tmp;
8476
8477       /* Function gets the ugly name, field gets the nice one.
8478          This call may change the type of the function (because
8479          of default parameters)!  */
8480       if (ctype != NULL_TREE)
8481         grokclassfn (ctype, decl, flags, quals);
8482
8483       decl = check_explicit_specialization (orig_declarator, decl,
8484                                             template_count, 
8485                                             2 * (funcdef_flag != 0) + 
8486                                             4 * (friendp != 0));
8487       if (decl == error_mark_node)
8488         return NULL_TREE;
8489
8490       if (ctype != NULL_TREE
8491           && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8492           && check)
8493         {
8494           tmp = check_classfn (ctype, decl);
8495
8496           if (tmp && TREE_CODE (tmp) == TEMPLATE_DECL)
8497             tmp = DECL_TEMPLATE_RESULT (tmp);
8498               
8499           if (tmp && DECL_STATIC_FUNCTION_P (tmp)
8500               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8501             {
8502               /* Remove the `this' parm added by grokclassfn.
8503                  XXX Isn't this done in start_function, too?  */
8504               revert_static_member_fn (&decl, NULL, NULL);
8505               last_function_parms = TREE_CHAIN (last_function_parms);
8506             }
8507           if (tmp && DECL_ARTIFICIAL (tmp))
8508             cp_error ("definition of implicitly-declared `%D'", tmp);
8509           if (tmp)
8510             {
8511               /* Attempt to merge the declarations.  This can fail, in
8512                  the case of some illegal specialization declarations.  */
8513               if (!duplicate_decls (decl, tmp))
8514                 cp_error ("no `%#D' member function declared in class `%T'",
8515                           decl, ctype);
8516               return tmp;
8517             }
8518         }
8519
8520       if (ctype == NULL_TREE || check)
8521         return decl;
8522
8523       if (virtualp)
8524         {
8525           DECL_VIRTUAL_P (decl) = 1;
8526           if (DECL_VINDEX (decl) == NULL_TREE)
8527             DECL_VINDEX (decl) = error_mark_node;
8528           IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8529         }
8530     }
8531   return decl;
8532 }
8533
8534 static tree
8535 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8536      tree type;
8537      tree declarator;
8538      RID_BIT_TYPE *specbits_in;
8539      int initialized;
8540      int constp;
8541      tree in_namespace;
8542 {
8543   tree decl;
8544   RID_BIT_TYPE specbits;
8545
8546   specbits = *specbits_in;
8547
8548   if (TREE_CODE (type) == OFFSET_TYPE)
8549     {
8550       /* If you declare a static member so that it
8551          can be initialized, the code will reach here.  */
8552       tree basetype = TYPE_OFFSET_BASETYPE (type);
8553       type = TREE_TYPE (type);
8554       decl = build_lang_decl (VAR_DECL, declarator, type);
8555       DECL_CONTEXT (decl) = basetype;
8556       DECL_CLASS_CONTEXT (decl) = basetype;
8557       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8558     }
8559   else
8560     {
8561       tree context;
8562
8563       if (in_namespace)
8564         context = in_namespace;
8565       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8566         context = current_namespace;
8567       else
8568         context = NULL_TREE;
8569
8570       if (processing_template_decl) 
8571         {
8572           /* If we're in a template, we need DECL_LANG_SPECIFIC so that
8573              we can call push_template_decl.  */
8574           push_permanent_obstack ();
8575           decl = build_lang_decl (VAR_DECL, declarator, type);
8576           pop_obstacks ();
8577         }
8578       else
8579         decl = build_decl (VAR_DECL, declarator, type);
8580
8581       if (context)
8582         set_decl_namespace (decl, context, 0);
8583
8584       context = DECL_CONTEXT (decl);
8585       if (declarator && context && current_lang_name != lang_name_c)
8586         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8587     }
8588
8589   if (in_namespace)
8590     set_decl_namespace (decl, in_namespace, 0);
8591
8592   if (RIDBIT_SETP (RID_EXTERN, specbits))
8593     {
8594       DECL_THIS_EXTERN (decl) = 1;
8595       DECL_EXTERNAL (decl) = !initialized;
8596     }
8597
8598   /* In class context, static means one per class,
8599      public access, and static storage.  */
8600   if (DECL_CLASS_SCOPE_P (decl))
8601     {
8602       TREE_PUBLIC (decl) = 1;
8603       TREE_STATIC (decl) = 1;
8604       DECL_EXTERNAL (decl) = 0;
8605     }
8606   /* At top level, either `static' or no s.c. makes a definition
8607      (perhaps tentative), and absence of `static' makes it public.  */
8608   else if (toplevel_bindings_p ())
8609     {
8610       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8611                             && (DECL_THIS_EXTERN (decl) || ! constp));
8612       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8613     }
8614   /* Not at top level, only `static' makes a static definition.  */
8615   else
8616     {
8617       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8618       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8619     }
8620
8621   if (TREE_PUBLIC (decl))
8622     {
8623       /* [basic.link]: A name with no linkage (notably, the name of a class
8624          or enumeration declared in a local scope) shall not be used to
8625          declare an entity with linkage.
8626
8627          Only check this for public decls for now.  */
8628       tree t = no_linkage_check (TREE_TYPE (decl));
8629       if (t)
8630         {
8631           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8632             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8633           else
8634             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8635                         decl, t);
8636         }
8637     }
8638
8639   return decl;
8640 }
8641
8642 /* Create and return a canonical pointer to member function type, for
8643    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8644
8645 tree
8646 build_ptrmemfunc_type (type)
8647      tree type;
8648 {
8649   tree fields[4];
8650   tree t;
8651   tree u;
8652   tree unqualified_variant = NULL_TREE;
8653
8654   /* If a canonical type already exists for this type, use it.  We use
8655      this method instead of type_hash_canon, because it only does a
8656      simple equality check on the list of field members.  */
8657
8658   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8659     return t;
8660
8661   /* Make sure that we always have the unqualified pointer-to-member
8662      type first.  */
8663   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8664     unqualified_variant 
8665       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8666
8667   push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
8668
8669   u = make_lang_type (UNION_TYPE);
8670   SET_IS_AGGR_TYPE (u, 0);
8671   fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
8672   fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
8673                                delta_type_node);
8674   finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
8675   TYPE_NAME (u) = NULL_TREE;
8676
8677   t = make_lang_type (RECORD_TYPE);
8678
8679   /* Let the front-end know this is a pointer to member function...  */
8680   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8681   /* ... and not really an aggregate.  */
8682   SET_IS_AGGR_TYPE (t, 0);
8683
8684   fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
8685                                delta_type_node);
8686   fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
8687                                delta_type_node);
8688   fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
8689   finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
8690
8691   pop_obstacks ();
8692
8693   /* Zap out the name so that the back-end will give us the debugging
8694      information for this anonymous RECORD_TYPE.  */
8695   TYPE_NAME (t) = NULL_TREE;
8696
8697   /* If this is not the unqualified form of this pointer-to-member
8698      type, set the TYPE_MAIN_VARIANT for this type to be the
8699      unqualified type.  Since they are actually RECORD_TYPEs that are
8700      not variants of each other, we must do this manually.  */
8701   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
8702     {
8703       t = build_qualified_type (t, CP_TYPE_QUALS (type));
8704       TYPE_MAIN_VARIANT (t) = unqualified_variant;
8705       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
8706       TYPE_NEXT_VARIANT (unqualified_variant) = t;
8707     }
8708
8709   /* Cache this pointer-to-member type so that we can find it again
8710      later.  */
8711   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8712
8713   /* Seems to be wanted.  */
8714   CLASSTYPE_GOT_SEMICOLON (t) = 1;
8715
8716   return t;
8717 }
8718
8719 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8720    Check to see that the definition is valid.  Issue appropriate error
8721    messages.  Return 1 if the definition is particularly bad, or 0
8722    otherwise.  */
8723
8724 int
8725 check_static_variable_definition (decl, type)
8726      tree decl;
8727      tree type;
8728 {
8729   /* Motion 10 at San Diego: If a static const integral data member is
8730      initialized with an integral constant expression, the initializer
8731      may appear either in the declaration (within the class), or in
8732      the definition, but not both.  If it appears in the class, the
8733      member is a member constant.  The file-scope definition is always
8734      required.  */
8735   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
8736     {
8737       cp_error ("in-class initialization of static data member of non-integral type `%T'", 
8738                 type);
8739       /* If we just return the declaration, crashes will sometimes
8740          occur.  We therefore return void_type_node, as if this was a
8741          friend declaration, to cause callers to completely ignore
8742          this declaration.  */
8743       return 1;
8744     }
8745   else if (!CP_TYPE_CONST_P (type))
8746     cp_error ("ANSI C++ forbids in-class initialization of non-const static member `%D'",
8747               decl);
8748   else if (pedantic && !INTEGRAL_TYPE_P (type))
8749     cp_pedwarn ("ANSI C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
8750
8751   return 0;
8752 }
8753
8754 /* Given declspecs and a declarator,
8755    determine the name and type of the object declared
8756    and construct a ..._DECL node for it.
8757    (In one case we can return a ..._TYPE node instead.
8758     For invalid input we sometimes return 0.)
8759
8760    DECLSPECS is a chain of tree_list nodes whose value fields
8761     are the storage classes and type specifiers.
8762
8763    DECL_CONTEXT says which syntactic context this declaration is in:
8764      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8765      FUNCDEF for a function definition.  Like NORMAL but a few different
8766       error messages in each case.  Return value may be zero meaning
8767       this definition is too screwy to try to parse.
8768      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8769       handle member functions (which have FIELD context).
8770       Return value may be zero meaning this definition is too screwy to
8771       try to parse.
8772      PARM for a parameter declaration (either within a function prototype
8773       or before a function body).  Make a PARM_DECL, or return void_type_node.
8774      CATCHPARM for a parameter declaration before a catch clause.
8775      TYPENAME if for a typename (in a cast or sizeof).
8776       Don't make a DECL node; just return the ..._TYPE node.
8777      FIELD for a struct or union field; make a FIELD_DECL.
8778      BITFIELD for a field with specified width.
8779    INITIALIZED is 1 if the decl has an initializer.
8780
8781    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
8782    normal attributes in TREE_PURPOSE, or NULL_TREE.
8783
8784    In the TYPENAME case, DECLARATOR is really an absolute declarator.
8785    It may also be so in the PARM case, for a prototype where the
8786    argument type is specified but not the name.
8787
8788    This function is where the complicated C meanings of `static'
8789    and `extern' are interpreted.
8790
8791    For C++, if there is any monkey business to do, the function which
8792    calls this one must do it, i.e., prepending instance variables,
8793    renaming overloaded function names, etc.
8794
8795    Note that for this C++, it is an error to define a method within a class
8796    which does not belong to that class.
8797
8798    Except in the case where SCOPE_REFs are implicitly known (such as
8799    methods within a class being redundantly qualified),
8800    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
8801    (class_name::decl_name).  The caller must also deal with this.
8802
8803    If a constructor or destructor is seen, and the context is FIELD,
8804    then the type gains the attribute TREE_HAS_x.  If such a declaration
8805    is erroneous, NULL_TREE is returned.
8806
8807    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
8808    function, these are the qualifiers to give to the `this' pointer.
8809
8810    May return void_type_node if the declarator turned out to be a friend.
8811    See grokfield for details.  */
8812
8813 enum return_types { return_normal, return_ctor, return_dtor, return_conversion };
8814
8815 tree
8816 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
8817      tree declspecs;
8818      tree declarator;
8819      enum decl_context decl_context;
8820      int initialized;
8821      tree attrlist;
8822 {
8823   RID_BIT_TYPE specbits;
8824   int nclasses = 0;
8825   tree spec;
8826   tree type = NULL_TREE;
8827   int longlong = 0;
8828   int constp;
8829   int restrictp;
8830   int volatilep;
8831   int type_quals;
8832   int virtualp, explicitp, friendp, inlinep, staticp;
8833   int explicit_int = 0;
8834   int explicit_char = 0;
8835   int defaulted_int = 0;
8836   tree typedef_decl = NULL_TREE;
8837   const char *name;
8838   tree typedef_type = NULL_TREE;
8839   int funcdef_flag = 0;
8840   enum tree_code innermost_code = ERROR_MARK;
8841   int bitfield = 0;
8842 #if 0
8843   /* See the code below that used this.  */
8844   tree decl_machine_attr = NULL_TREE;
8845 #endif
8846   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
8847      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
8848   tree init = NULL_TREE;
8849
8850   /* Keep track of what sort of function is being processed
8851      so that we can warn about default return values, or explicit
8852      return values which do not match prescribed defaults.  */
8853   enum return_types return_type = return_normal;
8854
8855   tree dname = NULL_TREE;
8856   tree ctype = current_class_type;
8857   tree ctor_return_type = NULL_TREE;
8858   enum overload_flags flags = NO_SPECIAL;
8859   tree quals = NULL_TREE;
8860   tree raises = NULL_TREE;
8861   int template_count = 0;
8862   tree in_namespace = NULL_TREE;
8863   tree inner_attrs;
8864   int ignore_attrs;
8865
8866   RIDBIT_RESET_ALL (specbits);
8867   if (decl_context == FUNCDEF)
8868     funcdef_flag = 1, decl_context = NORMAL;
8869   else if (decl_context == MEMFUNCDEF)
8870     funcdef_flag = -1, decl_context = FIELD;
8871   else if (decl_context == BITFIELD)
8872     bitfield = 1, decl_context = FIELD;
8873
8874   /* Look inside a declarator for the name being declared
8875      and get it as a string, for an error message.  */
8876   {
8877     tree *next = &declarator;
8878     register tree decl;
8879     name = NULL;
8880
8881     while (next && *next)
8882       {
8883         decl = *next;
8884         switch (TREE_CODE (decl))
8885           {
8886           case TREE_LIST:
8887             /* For attributes.  */
8888             next = &TREE_VALUE (decl);
8889             break;
8890
8891           case COND_EXPR:
8892             ctype = NULL_TREE;
8893             next = &TREE_OPERAND (decl, 0);
8894             break;
8895
8896           case BIT_NOT_EXPR:    /* For C++ destructors!  */
8897             {
8898               tree name = TREE_OPERAND (decl, 0);
8899               tree rename = NULL_TREE;
8900
8901               my_friendly_assert (flags == NO_SPECIAL, 152);
8902               flags = DTOR_FLAG;
8903               return_type = return_dtor;
8904               if (TREE_CODE (name) == TYPE_DECL)
8905                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
8906               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
8907               if (ctype == NULL_TREE)
8908                 {
8909                   if (current_class_type == NULL_TREE)
8910                     {
8911                       error ("destructors must be member functions");
8912                       flags = NO_SPECIAL;
8913                     }
8914                   else
8915                     {
8916                       tree t = constructor_name (current_class_name);
8917                       if (t != name)
8918                         rename = t;
8919                     }
8920                 }
8921               else
8922                 {
8923                   tree t = constructor_name (ctype);
8924                   if (t != name)
8925                     rename = t;
8926                 }
8927
8928               if (rename)
8929                 {
8930                   cp_error ("destructor `%T' must match class name `%T'",
8931                             name, rename);
8932                   TREE_OPERAND (decl, 0) = rename;
8933                 }
8934               next = &name;
8935             }
8936             break;
8937
8938           case ADDR_EXPR:       /* C++ reference declaration */
8939             /* Fall through. */
8940           case ARRAY_REF:
8941           case INDIRECT_REF:
8942             ctype = NULL_TREE;
8943             innermost_code = TREE_CODE (decl);
8944             next = &TREE_OPERAND (decl, 0);
8945             break;
8946
8947           case CALL_EXPR:
8948             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
8949               {
8950                 /* This is actually a variable declaration using
8951                    constructor syntax.  We need to call start_decl and
8952                    cp_finish_decl so we can get the variable
8953                    initialized...  */
8954
8955                 tree attributes, prefix_attributes;
8956
8957                 *next = TREE_OPERAND (decl, 0);
8958                 init = CALL_DECLARATOR_PARMS (decl);
8959
8960                 if (attrlist)
8961                   {
8962                     attributes = TREE_PURPOSE (attrlist);
8963                     prefix_attributes = TREE_VALUE (attrlist);
8964                   }
8965                 else
8966                   {
8967                     attributes = NULL_TREE;
8968                     prefix_attributes = NULL_TREE;
8969                   }
8970
8971                 decl = start_decl (declarator, declspecs, 1,
8972                                    attributes, prefix_attributes);
8973                 if (decl)
8974                   {
8975                     /* Look for __unused__ attribute */
8976                     if (TREE_USED (TREE_TYPE (decl)))
8977                       TREE_USED (decl) = 1;
8978                     finish_decl (decl, init, NULL_TREE);
8979                   }
8980                 else
8981                   cp_error ("invalid declarator");
8982                 return 0;
8983               }
8984             innermost_code = TREE_CODE (decl);
8985             if (decl_context == FIELD && ctype == NULL_TREE)
8986               ctype = current_class_type;
8987             if (ctype
8988                 && TREE_OPERAND (decl, 0)
8989                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
8990                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
8991                          == constructor_name_full (ctype))
8992                         || (DECL_NAME (TREE_OPERAND (decl, 0))
8993                             == constructor_name (ctype)))))
8994               TREE_OPERAND (decl, 0) = constructor_name (ctype);
8995             next = &TREE_OPERAND (decl, 0);
8996             decl = *next;
8997             if (ctype != NULL_TREE
8998                 && decl != NULL_TREE && flags != DTOR_FLAG
8999                 && decl == constructor_name (ctype))
9000               {
9001                 return_type = return_ctor;
9002                 ctor_return_type = ctype;
9003               }
9004             ctype = NULL_TREE;
9005             break;
9006             
9007           case TEMPLATE_ID_EXPR:
9008               {
9009                 tree fns = TREE_OPERAND (decl, 0);
9010
9011                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9012                   fns = TREE_OPERAND (fns, 0);
9013
9014                 dname = fns;
9015                 if (TREE_CODE (dname) == COMPONENT_REF)
9016                   dname = TREE_OPERAND (dname, 1);
9017                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9018                   {
9019                     my_friendly_assert (is_overloaded_fn (dname),
9020                                         19990331);
9021                     dname = DECL_NAME (get_first_fn (dname));
9022                   }
9023               }
9024           /* Fall through. */
9025
9026           case IDENTIFIER_NODE:
9027             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9028               dname = decl;
9029
9030             next = 0;
9031
9032             if (is_rid (dname))
9033               {
9034                 cp_error ("declarator-id missing; using reserved word `%D'",
9035                           dname);
9036                 name = IDENTIFIER_POINTER (dname);
9037               }
9038             if (! IDENTIFIER_OPNAME_P (dname)
9039                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9040                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9041               name = IDENTIFIER_POINTER (dname);
9042             else
9043               {
9044                 if (IDENTIFIER_TYPENAME_P (dname))
9045                   {
9046                     my_friendly_assert (flags == NO_SPECIAL, 154);
9047                     flags = TYPENAME_FLAG;
9048                     ctor_return_type = TREE_TYPE (dname);
9049                     return_type = return_conversion;
9050                   }
9051                 name = operator_name_string (dname);
9052               }
9053             break;
9054
9055             /* C++ extension */
9056           case SCOPE_REF:
9057             {
9058               /* Perform error checking, and decide on a ctype.  */
9059               tree cname = TREE_OPERAND (decl, 0);
9060               if (cname == NULL_TREE)
9061                 ctype = NULL_TREE;
9062               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9063                 {
9064                   ctype = NULL_TREE;
9065                   in_namespace = TREE_OPERAND (decl, 0);
9066                   TREE_OPERAND (decl, 0) = NULL_TREE;
9067                 }
9068               else if (! is_aggr_type (cname, 1))
9069                 TREE_OPERAND (decl, 0) = NULL_TREE;
9070               /* Must test TREE_OPERAND (decl, 1), in case user gives
9071                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9072               else if (TREE_OPERAND (decl, 1)
9073                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9074                 ctype = cname;
9075               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9076                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9077                 {
9078                   cp_error ("`%T::%D' is not a valid declarator", cname,
9079                             TREE_OPERAND (decl, 1));
9080                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9081                             cname, TREE_OPERAND (decl, 1));
9082                   return void_type_node;
9083                 }
9084               else if (ctype == NULL_TREE)
9085                 ctype = cname;
9086               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9087                 TREE_OPERAND (decl, 0) = ctype;
9088               else
9089                 {
9090                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9091                     {
9092                       cp_error ("type `%T' is not derived from type `%T'",
9093                                 cname, ctype);
9094                       TREE_OPERAND (decl, 0) = NULL_TREE;
9095                     }
9096                   else
9097                     ctype = cname;
9098                 }
9099
9100               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9101                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9102                        == constructor_name_full (ctype))
9103                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9104                           == constructor_name (ctype))))
9105                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9106               next = &TREE_OPERAND (decl, 1);
9107               decl = *next;
9108               if (ctype)
9109                 {
9110                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9111                       && constructor_name (ctype) == decl)
9112                     {
9113                       return_type = return_ctor;
9114                       ctor_return_type = ctype;
9115                     }
9116                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9117                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9118                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9119                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9120                     {
9121                       return_type = return_dtor;
9122                       ctor_return_type = ctype;
9123                       flags = DTOR_FLAG;
9124                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9125                       next = &TREE_OPERAND (decl, 0);
9126                     }
9127                 }
9128             }
9129             break;
9130
9131           case ERROR_MARK:
9132             next = 0;
9133             break;
9134
9135           case TYPE_DECL:
9136             /* Parse error puts this typespec where
9137                a declarator should go.  */
9138             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9139             if (TREE_TYPE (decl) == current_class_type)
9140               cp_error ("  perhaps you want `%T' for a constructor",
9141                         current_class_name);
9142             dname = DECL_NAME (decl);
9143             name = IDENTIFIER_POINTER (dname);
9144
9145             /* Avoid giving two errors for this.  */
9146             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9147
9148             declspecs = temp_tree_cons (NULL_TREE, integer_type_node,
9149                                         declspecs);
9150             *next = dname;
9151             next = 0;
9152             break;
9153
9154           default:
9155             cp_compiler_error ("`%D' as declarator", decl);
9156             return 0; /* We used to do a 155 abort here.  */
9157           }
9158       }
9159   }
9160
9161   /* A function definition's declarator must have the form of
9162      a function declarator.  */
9163
9164   if (funcdef_flag && innermost_code != CALL_EXPR)
9165     return 0;
9166
9167   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9168       && innermost_code != CALL_EXPR
9169       && ! (ctype && declspecs == NULL_TREE))
9170     {
9171       cp_error ("declaration of `%D' as non-function", dname);
9172       return void_type_node;
9173     }
9174
9175   /* Anything declared one level down from the top level
9176      must be one of the parameters of a function
9177      (because the body is at least two levels down).  */
9178
9179   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9180      by not allowing C++ class definitions to specify their parameters
9181      with xdecls (must be spec.d in the parmlist).
9182
9183      Since we now wait to push a class scope until we are sure that
9184      we are in a legitimate method context, we must set oldcname
9185      explicitly (since current_class_name is not yet alive).
9186
9187      We also want to avoid calling this a PARM if it is in a namespace.  */
9188
9189   if (decl_context == NORMAL && !toplevel_bindings_p ())
9190     {
9191       struct binding_level *b = current_binding_level;
9192       current_binding_level = b->level_chain;
9193       if (current_binding_level != 0 && toplevel_bindings_p ())
9194         decl_context = PARM;
9195       current_binding_level = b;
9196     }
9197
9198   if (name == NULL)
9199     name = decl_context == PARM ? "parameter" : "type name";
9200   
9201   /* Look through the decl specs and record which ones appear.
9202      Some typespecs are defined as built-in typenames.
9203      Others, the ones that are modifiers of other types,
9204      are represented by bits in SPECBITS: set the bits for
9205      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9206
9207      If there is a typedef name or a type, store the type in TYPE.
9208      This includes builtin typedefs such as `int'.
9209
9210      Set EXPLICIT_INT if the type is `int' or `char' and did not
9211      come from a user typedef.
9212
9213      Set LONGLONG if `long' is mentioned twice.
9214
9215      For C++, constructors and destructors have their own fast treatment.  */
9216
9217   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9218     {
9219       register int i;
9220       register tree id;
9221
9222       /* Certain parse errors slip through.  For example,
9223          `int class;' is not caught by the parser. Try
9224          weakly to recover here.  */
9225       if (TREE_CODE (spec) != TREE_LIST)
9226         return 0;
9227
9228       id = TREE_VALUE (spec);
9229
9230       if (TREE_CODE (id) == IDENTIFIER_NODE)
9231         {
9232           if (id == ridpointers[(int) RID_INT]
9233               || id == ridpointers[(int) RID_CHAR]
9234               || id == ridpointers[(int) RID_BOOL]
9235               || id == ridpointers[(int) RID_WCHAR])
9236             {
9237               if (type)
9238                 {
9239                   if (id == ridpointers[(int) RID_BOOL])
9240                     error ("`bool' is now a keyword");
9241                   else
9242                     cp_error ("extraneous `%T' ignored", id);
9243                 }
9244               else
9245                 {
9246                   if (id == ridpointers[(int) RID_INT])
9247                     explicit_int = 1;
9248                   else if (id == ridpointers[(int) RID_CHAR])
9249                     explicit_char = 1;
9250                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9251                 }
9252               goto found;
9253             }
9254           /* C++ aggregate types.  */
9255           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9256             {
9257               if (type)
9258                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9259               else
9260                 type = IDENTIFIER_TYPE_VALUE (id);
9261               goto found;
9262             }
9263
9264           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9265             {
9266               if (ridpointers[i] == id)
9267                 {
9268                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9269                     {
9270                       if (pedantic && ! in_system_header && warn_long_long)
9271                         pedwarn ("ANSI C++ does not support `long long'");
9272                       if (longlong)
9273                         error ("`long long long' is too long for GCC");
9274                       else
9275                         longlong = 1;
9276                     }
9277                   else if (RIDBIT_SETP (i, specbits))
9278                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9279                   RIDBIT_SET (i, specbits);
9280                   goto found;
9281                 }
9282             }
9283         }
9284       /* C++ aggregate types.  */
9285       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9286         {
9287           if (type)
9288             cp_error ("multiple declarations `%T' and `%T'", type,
9289                       TREE_TYPE (id));
9290           else
9291             {
9292               type = TREE_TYPE (id);
9293               TREE_VALUE (spec) = type;
9294             }
9295           goto found;
9296         }
9297       if (type)
9298         error ("two or more data types in declaration of `%s'", name);
9299       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9300         {
9301           register tree t = lookup_name (id, 1);
9302           if (!t || TREE_CODE (t) != TYPE_DECL)
9303             error ("`%s' fails to be a typedef or built in type",
9304                    IDENTIFIER_POINTER (id));
9305           else
9306             {
9307               type = TREE_TYPE (t);
9308 #if 0
9309               /* See the code below that used this.  */
9310               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9311 #endif
9312               typedef_decl = t;
9313             }
9314         }
9315       else if (id != error_mark_node)
9316         /* Can't change CLASS nodes into RECORD nodes here!  */
9317         type = id;
9318
9319     found: ;
9320     }
9321
9322   typedef_type = type;
9323
9324   /* No type at all: default to `int', and set DEFAULTED_INT
9325      because it was not a user-defined typedef.  */
9326
9327   if (type == NULL_TREE
9328       && (RIDBIT_SETP (RID_SIGNED, specbits)
9329           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9330           || RIDBIT_SETP (RID_LONG, specbits)
9331           || RIDBIT_SETP (RID_SHORT, specbits)))
9332     {
9333       /* These imply 'int'.  */
9334       type = integer_type_node;
9335       defaulted_int = 1;
9336     }
9337
9338   if (type == NULL_TREE)
9339     {
9340       explicit_int = -1;
9341       if (return_type == return_dtor)
9342         type = void_type_node;
9343       else if (return_type == return_ctor)
9344         type = build_pointer_type (ctor_return_type);
9345       else if (return_type == return_conversion)
9346         type = ctor_return_type;
9347       else
9348         {
9349           /* We handle `main' specially here, because 'main () { }' is so
9350              common.  With no options, it is allowed.  With -Wreturn-type,
9351              it is a warning.  It is only an error with -pedantic-errors.  */
9352           int is_main = (funcdef_flag
9353                          && MAIN_NAME_P (dname)
9354                          && ctype == NULL_TREE
9355                          && in_namespace == NULL_TREE
9356                          && current_namespace == global_namespace);
9357
9358           if (in_system_header || flag_ms_extensions)
9359             /* Allow it, sigh.  */;
9360           else if (pedantic || ! is_main)
9361             cp_pedwarn ("ANSI C++ forbids declaration of `%s' with no type",
9362                         name);
9363           else if (warn_return_type)
9364             cp_warning ("ANSI C++ forbids declaration of `%s' with no type",
9365                         name);
9366
9367           type = integer_type_node;
9368         }
9369     }
9370   else if (return_type == return_dtor)
9371     {
9372       error ("return type specification for destructor invalid");
9373       type = void_type_node;
9374     }
9375   else if (return_type == return_ctor)
9376     {
9377       error ("return type specification for constructor invalid");
9378       type = build_pointer_type (ctor_return_type);
9379     }
9380   else if (return_type == return_conversion)
9381     {
9382       if (!same_type_p (type, ctor_return_type))
9383         cp_error ("operator `%T' declared to return `%T'",
9384                   ctor_return_type, type);
9385       else
9386         cp_pedwarn ("return type specified for `operator %T'",
9387                     ctor_return_type);
9388
9389       type = ctor_return_type;
9390     }
9391
9392   ctype = NULL_TREE;
9393
9394   /* Now process the modifiers that were specified
9395      and check for invalid combinations.  */
9396
9397   /* Long double is a special combination.  */
9398
9399   if (RIDBIT_SETP (RID_LONG, specbits)
9400       && TYPE_MAIN_VARIANT (type) == double_type_node)
9401     {
9402       RIDBIT_RESET (RID_LONG, specbits);
9403       type = build_qualified_type (long_double_type_node, 
9404                                    CP_TYPE_QUALS (type));
9405     }
9406
9407   /* Check all other uses of type modifiers.  */
9408
9409   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9410       || RIDBIT_SETP (RID_SIGNED, specbits)
9411       || RIDBIT_SETP (RID_LONG, specbits)
9412       || RIDBIT_SETP (RID_SHORT, specbits))
9413     {
9414       int ok = 0;
9415
9416       if (TREE_CODE (type) == REAL_TYPE)
9417         error ("short, signed or unsigned invalid for `%s'", name);
9418       else if (TREE_CODE (type) != INTEGER_TYPE)
9419         error ("long, short, signed or unsigned invalid for `%s'", name);
9420       else if (RIDBIT_SETP (RID_LONG, specbits)
9421                && RIDBIT_SETP (RID_SHORT, specbits))
9422         error ("long and short specified together for `%s'", name);
9423       else if ((RIDBIT_SETP (RID_LONG, specbits)
9424                 || RIDBIT_SETP (RID_SHORT, specbits))
9425                && explicit_char)
9426         error ("long or short specified with char for `%s'", name);
9427       else if ((RIDBIT_SETP (RID_LONG, specbits)
9428                 || RIDBIT_SETP (RID_SHORT, specbits))
9429                && TREE_CODE (type) == REAL_TYPE)
9430         error ("long or short specified with floating type for `%s'", name);
9431       else if (RIDBIT_SETP (RID_SIGNED, specbits)
9432                && RIDBIT_SETP (RID_UNSIGNED, specbits))
9433         error ("signed and unsigned given together for `%s'", name);
9434       else
9435         {
9436           ok = 1;
9437           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
9438             {
9439               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
9440                        name);
9441               if (flag_pedantic_errors)
9442                 ok = 0;
9443             }
9444         }
9445
9446       /* Discard the type modifiers if they are invalid.  */
9447       if (! ok)
9448         {
9449           RIDBIT_RESET (RID_UNSIGNED, specbits);
9450           RIDBIT_RESET (RID_SIGNED, specbits);
9451           RIDBIT_RESET (RID_LONG, specbits);
9452           RIDBIT_RESET (RID_SHORT, specbits);
9453           longlong = 0;
9454         }
9455     }
9456
9457   if (RIDBIT_SETP (RID_COMPLEX, specbits)
9458       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9459     {
9460       error ("complex invalid for `%s'", name);
9461       RIDBIT_RESET (RID_COMPLEX, specbits);
9462     }
9463
9464   /* Decide whether an integer type is signed or not.
9465      Optionally treat bitfields as signed by default.  */
9466   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9467       /* [class.bit]
9468
9469          It is implementation-defined whether a plain (neither
9470          explicitly signed or unsigned) char, short, int, or long
9471          bit-field is signed or unsigned.
9472              
9473          Naturally, we extend this to long long as well.  Note that
9474          this does not include wchar_t.  */
9475       || (bitfield && !flag_signed_bitfields
9476           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
9477           /* A typedef for plain `int' without `signed' can be
9478              controlled just like plain `int', but a typedef for
9479              `signed int' cannot be so controlled.  */
9480           && !(typedef_decl 
9481                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9482           && (TREE_CODE (type) == INTEGER_TYPE
9483               || TREE_CODE (type) == CHAR_TYPE)
9484           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9485     {
9486       if (longlong)
9487         type = long_long_unsigned_type_node;
9488       else if (RIDBIT_SETP (RID_LONG, specbits))
9489         type = long_unsigned_type_node;
9490       else if (RIDBIT_SETP (RID_SHORT, specbits))
9491         type = short_unsigned_type_node;
9492       else if (type == char_type_node)
9493         type = unsigned_char_type_node;
9494       else if (typedef_decl)
9495         type = unsigned_type (type);
9496       else
9497         type = unsigned_type_node;
9498     }
9499   else if (RIDBIT_SETP (RID_SIGNED, specbits)
9500            && type == char_type_node)
9501     type = signed_char_type_node;
9502   else if (longlong)
9503     type = long_long_integer_type_node;
9504   else if (RIDBIT_SETP (RID_LONG, specbits))
9505     type = long_integer_type_node;
9506   else if (RIDBIT_SETP (RID_SHORT, specbits))
9507     type = short_integer_type_node;
9508
9509   if (RIDBIT_SETP (RID_COMPLEX, specbits))
9510     {
9511       /* If we just have "complex", it is equivalent to
9512          "complex double", but if any modifiers at all are specified it is
9513          the complex form of TYPE.  E.g, "complex short" is
9514          "complex short int".  */
9515
9516       if (defaulted_int && ! longlong
9517           && ! (RIDBIT_SETP (RID_LONG, specbits)
9518                 || RIDBIT_SETP (RID_SHORT, specbits)
9519                 || RIDBIT_SETP (RID_SIGNED, specbits)
9520                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
9521         type = complex_double_type_node;
9522       else if (type == integer_type_node)
9523         type = complex_integer_type_node;
9524       else if (type == float_type_node)
9525         type = complex_float_type_node;
9526       else if (type == double_type_node)
9527         type = complex_double_type_node;
9528       else if (type == long_double_type_node)
9529         type = complex_long_double_type_node;
9530       else
9531         type = build_complex_type (type);
9532     }
9533
9534   if (return_type == return_conversion 
9535       && (RIDBIT_SETP (RID_CONST, specbits)
9536           || RIDBIT_SETP (RID_VOLATILE, specbits)
9537           || RIDBIT_SETP (RID_RESTRICT, specbits)))
9538     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
9539               ctor_return_type);
9540
9541   /* Set CONSTP if this declaration is `const', whether by
9542      explicit specification or via a typedef.
9543      Likewise for VOLATILEP.  */
9544
9545   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
9546   restrictp = 
9547     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
9548   volatilep = 
9549     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
9550   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
9551                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
9552                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
9553   type = cp_build_qualified_type (type, type_quals);
9554   staticp = 0;
9555   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
9556   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
9557   RIDBIT_RESET (RID_VIRTUAL, specbits);
9558   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
9559   RIDBIT_RESET (RID_EXPLICIT, specbits);
9560
9561   if (RIDBIT_SETP (RID_STATIC, specbits))
9562     staticp = 1 + (decl_context == FIELD);
9563
9564   if (virtualp && staticp == 2)
9565     {
9566       cp_error ("member `%D' cannot be declared both virtual and static",
9567                 dname);
9568       staticp = 0;
9569     }
9570   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
9571   RIDBIT_RESET (RID_FRIEND, specbits);
9572
9573   /* Warn if two storage classes are given. Default to `auto'.  */
9574
9575   if (RIDBIT_ANY_SET (specbits))
9576     {
9577       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
9578       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
9579       if (decl_context == PARM && nclasses > 0)
9580         error ("storage class specifiers invalid in parameter declarations");
9581       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9582         {
9583           if (decl_context == PARM)
9584             error ("typedef declaration invalid in parameter declaration");
9585           nclasses++;
9586         }
9587       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
9588       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
9589     }
9590
9591   /* Give error if `virtual' is used outside of class declaration.  */
9592   if (virtualp
9593       && (current_class_name == NULL_TREE || decl_context != FIELD))
9594     {
9595       error ("virtual outside class declaration");
9596       virtualp = 0;
9597     }
9598
9599   /* Static anonymous unions are dealt with here.  */
9600   if (staticp && decl_context == TYPENAME
9601       && TREE_CODE (declspecs) == TREE_LIST
9602       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
9603     decl_context = FIELD;
9604
9605   /* Warn about storage classes that are invalid for certain
9606      kinds of declarations (parameters, typenames, etc.).  */
9607
9608   if (nclasses > 1)
9609     error ("multiple storage classes in declaration of `%s'", name);
9610   else if (decl_context != NORMAL && nclasses > 0)
9611     {
9612       if ((decl_context == PARM || decl_context == CATCHPARM)
9613           && (RIDBIT_SETP (RID_REGISTER, specbits)
9614               || RIDBIT_SETP (RID_AUTO, specbits)))
9615         ;
9616       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
9617         ;
9618       else if (decl_context == FIELD
9619                /* C++ allows static class elements  */
9620                && RIDBIT_SETP (RID_STATIC, specbits))
9621         /* C++ also allows inlines and signed and unsigned elements,
9622            but in those cases we don't come in here.  */
9623         ;
9624       else
9625         {
9626           if (decl_context == FIELD)
9627             {
9628               tree tmp = NULL_TREE;
9629               register int op = 0;
9630
9631               if (declarator)
9632                 {
9633                   /* Avoid trying to get an operand off an identifier node.  */ 
9634                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
9635                     tmp = declarator;
9636                   else
9637                     tmp = TREE_OPERAND (declarator, 0);
9638                   op = IDENTIFIER_OPNAME_P (tmp);
9639                 }
9640               error ("storage class specified for %s `%s'",
9641                      op ? "member operator" : "field",
9642                      op ? operator_name_string (tmp) : name);
9643             }
9644           else
9645             error (((decl_context == PARM || decl_context == CATCHPARM)
9646                     ? "storage class specified for parameter `%s'"
9647                     : "storage class specified for typename"), name);
9648           RIDBIT_RESET (RID_REGISTER, specbits);
9649           RIDBIT_RESET (RID_AUTO, specbits);
9650           RIDBIT_RESET (RID_EXTERN, specbits);
9651         }
9652     }
9653   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
9654     {
9655       if (toplevel_bindings_p ())
9656         {
9657           /* It's common practice (and completely valid) to have a const
9658              be initialized and declared extern.  */
9659           if (!(type_quals & TYPE_QUAL_CONST))
9660             warning ("`%s' initialized and declared `extern'", name);
9661         }
9662       else
9663         error ("`%s' has both `extern' and initializer", name);
9664     }
9665   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
9666            && ! toplevel_bindings_p ())
9667     error ("nested function `%s' declared `extern'", name);
9668   else if (toplevel_bindings_p ())
9669     {
9670       if (RIDBIT_SETP (RID_AUTO, specbits))
9671         error ("top-level declaration of `%s' specifies `auto'", name);
9672     }
9673
9674   if (nclasses > 0 && friendp)
9675     error ("storage class specifiers invalid in friend function declarations");
9676
9677   /* Now figure out the structure of the declarator proper.
9678      Descend through it, creating more complex types, until we reach
9679      the declared identifier (or NULL_TREE, in an absolute declarator).  */
9680
9681   inner_attrs = NULL_TREE;
9682   ignore_attrs = 0;  
9683
9684   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
9685          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
9686     {
9687       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
9688          an INDIRECT_REF (for *...),
9689          a CALL_EXPR (for ...(...)),
9690          an identifier (for the name being declared)
9691          or a null pointer (for the place in an absolute declarator
9692          where the name was omitted).
9693          For the last two cases, we have just exited the loop.
9694
9695          For C++ it could also be
9696          a SCOPE_REF (for class :: ...).  In this case, we have converted
9697          sensible names to types, and those are the values we use to
9698          qualify the member name.
9699          an ADDR_EXPR (for &...),
9700          a BIT_NOT_EXPR (for destructors)
9701
9702          At this point, TYPE is the type of elements of an array,
9703          or for a function to return, or for a pointer to point to.
9704          After this sequence of ifs, TYPE is the type of the
9705          array or function or pointer, and DECLARATOR has had its
9706          outermost layer removed.  */
9707
9708       if (type == error_mark_node)
9709         {
9710           if (TREE_CODE (declarator) == SCOPE_REF)
9711             declarator = TREE_OPERAND (declarator, 1);
9712           else
9713             declarator = TREE_OPERAND (declarator, 0);
9714           continue;
9715         }
9716       if (quals != NULL_TREE
9717           && (declarator == NULL_TREE
9718               || TREE_CODE (declarator) != SCOPE_REF))
9719         {
9720           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
9721             ctype = TYPE_METHOD_BASETYPE (type);
9722           if (ctype != NULL_TREE)
9723             {
9724               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
9725               ctype = grok_method_quals (ctype, dummy, quals);
9726               type = TREE_TYPE (dummy);
9727               quals = NULL_TREE;
9728             }
9729         }
9730
9731       /* See the comment for the TREE_LIST case, below.  */
9732       if (ignore_attrs)
9733         ignore_attrs = 0;
9734       else if (inner_attrs)
9735         {
9736           decl_attributes (type, inner_attrs, NULL_TREE);
9737           inner_attrs = NULL_TREE;
9738         }
9739
9740       switch (TREE_CODE (declarator))
9741         {
9742         case TREE_LIST:
9743           {
9744             /* We encode a declarator with embedded attributes using
9745                a TREE_LIST.  The attributes apply to the declarator
9746                directly inside them, so we have to skip an iteration
9747                before applying them to the type.  If the declarator just
9748                inside is the declarator-id, we apply the attrs to the
9749                decl itself.  */
9750             inner_attrs = TREE_PURPOSE (declarator);
9751             ignore_attrs = 1;
9752             declarator = TREE_VALUE (declarator);
9753           }
9754           break;
9755
9756         case ARRAY_REF:
9757           {
9758             register tree itype = NULL_TREE;
9759             register tree size = TREE_OPERAND (declarator, 1);
9760             /* The index is a signed object `sizetype' bits wide.  */
9761             tree index_type = signed_type (sizetype);
9762
9763             declarator = TREE_OPERAND (declarator, 0);
9764
9765             /* Check for some types that there cannot be arrays of.  */
9766
9767             if (TREE_CODE (type) == VOID_TYPE)
9768               {
9769                 cp_error ("declaration of `%D' as array of voids", dname);
9770                 type = error_mark_node;
9771               }
9772
9773             if (TREE_CODE (type) == FUNCTION_TYPE)
9774               {
9775                 cp_error ("declaration of `%D' as array of functions", dname);
9776                 type = error_mark_node;
9777               }
9778
9779             /* ARM $8.4.3: Since you can't have a pointer to a reference,
9780                you can't have arrays of references.  If we allowed them,
9781                then we'd be saying x[i] is valid for an array x, but
9782                then you'd have to ask: what does `*(x + i)' mean?  */
9783             if (TREE_CODE (type) == REFERENCE_TYPE)
9784               {
9785                 if (decl_context == TYPENAME)
9786                   cp_error ("cannot make arrays of references");
9787                 else
9788                   cp_error ("declaration of `%D' as array of references",
9789                             dname);
9790                 type = error_mark_node;
9791               }
9792
9793             if (TREE_CODE (type) == OFFSET_TYPE)
9794               {
9795                   cp_error ("declaration of `%D' as array of data members",
9796                             dname);
9797                 type = error_mark_node;
9798               }
9799
9800             if (TREE_CODE (type) == METHOD_TYPE)
9801               {
9802                 cp_error ("declaration of `%D' as array of function members",
9803                           dname);
9804                 type = error_mark_node;
9805               }
9806
9807             if (size == error_mark_node)
9808               type = error_mark_node;
9809             else if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9810               {
9811                 /* [dcl.array]
9812
9813                    the constant expressions that specify the bounds of
9814                    the arrays can be omitted only for the first member
9815                    of the sequence.  */
9816                 cp_error ("declaration of `%D' as multidimensional array",
9817                           dname);
9818                 cp_error ("must have bounds for all dimensions except the first");
9819                 type = error_mark_node;
9820               }
9821
9822             if (type == error_mark_node)
9823               continue;
9824
9825             /* VC++ spells a zero-sized array with [].  */
9826             if (size == NULL_TREE && decl_context == FIELD && ! staticp
9827                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
9828               size = integer_zero_node;
9829
9830             if (size)
9831               {
9832                 /* Must suspend_momentary here because the index
9833                    type may need to live until the end of the function.
9834                    For example, it is used in the declaration of a
9835                    variable which requires destructing at the end of
9836                    the function; then build_vec_delete will need this
9837                    value.  */
9838                 int yes = suspend_momentary ();
9839                 /* Might be a cast. */
9840                 if (TREE_CODE (size) == NOP_EXPR
9841                     && TREE_TYPE (size) == TREE_TYPE (TREE_OPERAND (size, 0)))
9842                   size = TREE_OPERAND (size, 0);
9843                 if (TREE_READONLY_DECL_P (size))
9844                   size = decl_constant_value (size);
9845
9846                 /* If this involves a template parameter, it will be a
9847                    constant at instantiation time, but we don't know
9848                    what the value is yet.  Even if no template
9849                    parameters are involved, we may an expression that
9850                    is not a constant; we don't even simplify `1 + 2'
9851                    when processing a template.  */
9852                 if (processing_template_decl)
9853                   {
9854                     /* Resolve a qualified reference to an enumerator or
9855                        static const data member of ours.  */
9856                     if (TREE_CODE (size) == SCOPE_REF
9857                         && TREE_OPERAND (size, 0) == current_class_type)
9858                       {
9859                         tree t = lookup_field (current_class_type,
9860                                                TREE_OPERAND (size, 1), 0, 0);
9861                         if (t)
9862                           size = t;
9863                       }
9864
9865                     itype = build_index_type (build_min
9866                       (MINUS_EXPR, sizetype, size, integer_one_node));
9867                     goto dont_grok_size;
9868                   }
9869
9870                 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9871                     && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9872                     && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9873                   {
9874                     cp_error ("size of array `%D' has non-integer type",
9875                               dname);
9876                     size = integer_one_node;
9877                   }
9878                 if (pedantic && integer_zerop (size))
9879                   cp_pedwarn ("ANSI C++ forbids zero-size array `%D'", dname);
9880                 if (TREE_CONSTANT (size))
9881                   {
9882                     int old_flag_pedantic_errors = flag_pedantic_errors;
9883                     int old_pedantic = pedantic;
9884                     pedantic = flag_pedantic_errors = 1;
9885                     /* Always give overflow errors on array subscripts.  */
9886                     constant_expression_warning (size);
9887                     pedantic = old_pedantic;
9888                     flag_pedantic_errors = old_flag_pedantic_errors;
9889                     if (INT_CST_LT (size, integer_zero_node))
9890                       {
9891                         cp_error ("size of array `%D' is negative", dname);
9892                         size = integer_one_node;
9893                       }
9894                   }
9895                 else
9896                   {
9897                     if (pedantic)
9898                       {
9899                         if (dname)
9900                           cp_pedwarn ("ANSI C++ forbids variable-size array `%D'",
9901                                       dname);
9902                         else
9903                           cp_pedwarn ("ANSI C++ forbids variable-size array");
9904                       }
9905                   }
9906
9907                 itype
9908                   = fold (build_binary_op (MINUS_EXPR,
9909                                            cp_convert (index_type, size),
9910                                            cp_convert (index_type,
9911                                                        integer_one_node)));
9912                 if (! TREE_CONSTANT (itype))
9913                   itype = variable_size (itype);
9914                 else if (TREE_OVERFLOW (itype))
9915                   {
9916                     error ("overflow in array dimension");
9917                     TREE_OVERFLOW (itype) = 0;
9918                   }
9919
9920                 itype = build_index_type (itype);
9921
9922               dont_grok_size:
9923                 resume_momentary (yes);
9924               }
9925
9926             type = build_cplus_array_type (type, itype);
9927             ctype = NULL_TREE;
9928           }
9929           break;
9930
9931         case CALL_EXPR:
9932           {
9933             tree arg_types;
9934             int funcdecl_p;
9935             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
9936             tree inner_decl = TREE_OPERAND (declarator, 0);
9937
9938             /* Declaring a function type.
9939                Make sure we have a valid type for the function to return.  */
9940
9941             /* We now know that the TYPE_QUALS don't apply to the
9942                decl, but to its return type.  */
9943             type_quals = TYPE_UNQUALIFIED;
9944
9945             /* Warn about some types functions can't return.  */
9946
9947             if (TREE_CODE (type) == FUNCTION_TYPE)
9948               {
9949                 error ("`%s' declared as function returning a function", name);
9950                 type = integer_type_node;
9951               }
9952             if (TREE_CODE (type) == ARRAY_TYPE)
9953               {
9954                 error ("`%s' declared as function returning an array", name);
9955                 type = integer_type_node;
9956               }
9957
9958             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
9959               inner_decl = TREE_OPERAND (inner_decl, 1);
9960
9961             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) 
9962               inner_decl = dname;
9963
9964             /* Pick up type qualifiers which should be applied to `this'.  */
9965             quals = CALL_DECLARATOR_QUALS (declarator);
9966
9967             /* Pick up the exception specifications.  */
9968             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
9969
9970             /* Say it's a definition only for the CALL_EXPR
9971                closest to the identifier.  */
9972             funcdecl_p
9973               = inner_decl 
9974               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
9975                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR 
9976                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
9977             
9978             if (ctype == NULL_TREE
9979                 && decl_context == FIELD
9980                 && funcdecl_p
9981                 && (friendp == 0 || dname == current_class_name))
9982               ctype = current_class_type;
9983
9984             if (ctype && return_type == return_conversion)
9985               TYPE_HAS_CONVERSION (ctype) = 1;
9986             if (ctype && constructor_name (ctype) == dname)
9987               {
9988                 /* We are within a class's scope. If our declarator name
9989                    is the same as the class name, and we are defining
9990                    a function, then it is a constructor/destructor, and
9991                    therefore returns a void type.  */
9992
9993                 if (flags == DTOR_FLAG)
9994                   {
9995                     /* ANSI C++ June 5 1992 WP 12.4.1.  A destructor may
9996                        not be declared const or volatile.  A destructor
9997                        may not be static.  */
9998                     if (staticp == 2)
9999                       error ("destructor cannot be static member function");
10000                     if (quals)
10001                       {
10002                         cp_error ("destructors may not be `%s'",
10003                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10004                         quals = NULL_TREE;
10005                       }
10006                     if (decl_context == FIELD)
10007                       {
10008                         if (! member_function_or_else (ctype, current_class_type,
10009                                                        "destructor for alien class `%s' cannot be a member"))
10010                           return void_type_node;
10011                       }
10012                   }
10013                 else            /* It's a constructor.  */
10014                   {
10015                     if (explicitp == 1)
10016                       explicitp = 2;
10017                     /* ANSI C++ June 5 1992 WP 12.1.2.  A constructor may
10018                        not be declared const or volatile.  A constructor may
10019                        not be virtual.  A constructor may not be static.  */
10020                     if (staticp == 2)
10021                       error ("constructor cannot be static member function");
10022                     if (virtualp)
10023                       {
10024                         pedwarn ("constructors cannot be declared virtual");
10025                         virtualp = 0;
10026                       }
10027                     if (quals)
10028                       {
10029                         cp_error ("constructors may not be `%s'",
10030                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10031                         quals = NULL_TREE;
10032                       }
10033                     {
10034                       RID_BIT_TYPE tmp_bits;
10035                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10036                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10037                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10038                       if (RIDBIT_ANY_SET (tmp_bits))
10039                         error ("return value type specifier for constructor ignored");
10040                     }
10041                     type = build_pointer_type (ctype);
10042                     if (decl_context == FIELD)
10043                       {
10044                         if (! member_function_or_else (ctype, current_class_type,
10045                                                        "constructor for alien class `%s' cannot be member"))
10046                           return void_type_node;
10047                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10048                         if (return_type != return_ctor)
10049                           return NULL_TREE;
10050                       }
10051                   }
10052                 if (decl_context == FIELD)
10053                   staticp = 0;
10054               }
10055             else if (friendp)
10056               {
10057                 if (initialized)
10058                   error ("can't initialize friend function `%s'", name);
10059                 if (virtualp)
10060                   {
10061                     /* Cannot be both friend and virtual.  */
10062                     error ("virtual functions cannot be friends");
10063                     RIDBIT_RESET (RID_FRIEND, specbits);
10064                     friendp = 0;
10065                   }
10066                 if (decl_context == NORMAL)
10067                   error ("friend declaration not in class definition");
10068                 if (current_function_decl && funcdef_flag)
10069                   cp_error ("can't define friend function `%s' in a local class definition",
10070                             name);
10071               }
10072
10073             /* Construct the function type and go to the next
10074                inner layer of declarator.  */
10075
10076             declarator = TREE_OPERAND (declarator, 0);
10077
10078             /* FIXME: This is where default args should be fully
10079                processed.  */
10080
10081             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10082
10083             if (declarator && flags == DTOR_FLAG)
10084               {
10085                 /* A destructor declared in the body of a class will
10086                    be represented as a BIT_NOT_EXPR.  But, we just
10087                    want the underlying IDENTIFIER.  */
10088                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10089                   declarator = TREE_OPERAND (declarator, 0);
10090                 
10091                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10092                   arg_types = void_list_node;
10093                 else if (arg_types == NULL_TREE
10094                          || arg_types != void_list_node)
10095                   {
10096                     cp_error ("destructors may not have parameters");
10097                     arg_types = void_list_node;
10098                     last_function_parms = NULL_TREE;
10099                   }
10100               }
10101
10102             /* ANSI says that `const int foo ();'
10103                does not make the function foo const.  */
10104             type = build_function_type (type, arg_types);
10105
10106             {
10107               tree t;
10108               for (t = arg_types; t; t = TREE_CHAIN (t))
10109                 if (TREE_PURPOSE (t)
10110                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10111                   {
10112                     add_defarg_fn (type);
10113                     break;
10114                   }
10115             }
10116           }
10117           break;
10118
10119         case ADDR_EXPR:
10120         case INDIRECT_REF:
10121           /* Filter out pointers-to-references and references-to-references.
10122              We can get these if a TYPE_DECL is used.  */
10123
10124           if (TREE_CODE (type) == REFERENCE_TYPE)
10125             {
10126               error ("cannot declare %s to references",
10127                      TREE_CODE (declarator) == ADDR_EXPR
10128                      ? "references" : "pointers");
10129               declarator = TREE_OPERAND (declarator, 0);
10130               continue;
10131             }
10132
10133           if (TREE_CODE (type) == OFFSET_TYPE
10134               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10135                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10136             {
10137               cp_error ("cannot declare pointer to `%#T' member",
10138                         TREE_TYPE (type));
10139               type = TREE_TYPE (type);
10140             }
10141
10142           /* Merge any constancy or volatility into the target type
10143              for the pointer.  */
10144
10145           /* We now know that the TYPE_QUALS don't apply to the decl,
10146              but to the target of the pointer.  */
10147           type_quals = TYPE_UNQUALIFIED;
10148
10149           if (TREE_CODE (declarator) == ADDR_EXPR)
10150             {
10151               if (TREE_CODE (type) == VOID_TYPE)
10152                 error ("invalid type: `void &'");
10153               else
10154                 type = build_reference_type (type);
10155             }
10156           else if (TREE_CODE (type) == METHOD_TYPE)
10157             type = build_ptrmemfunc_type (build_pointer_type (type));
10158           else
10159             type = build_pointer_type (type);
10160
10161           /* Process a list of type modifier keywords (such as
10162              const or volatile) that were given inside the `*' or `&'.  */
10163
10164           if (TREE_TYPE (declarator))
10165             {
10166               register tree typemodlist;
10167               int erred = 0;
10168
10169               constp = 0;
10170               volatilep = 0;
10171               restrictp = 0;
10172               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10173                    typemodlist = TREE_CHAIN (typemodlist))
10174                 {
10175                   tree qualifier = TREE_VALUE (typemodlist);
10176
10177                   if (qualifier == ridpointers[(int) RID_CONST])
10178                     constp++;
10179                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10180                     volatilep++;
10181                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10182                     restrictp++;
10183                   else if (!erred)
10184                     {
10185                       erred = 1;
10186                       error ("invalid type modifier within pointer declarator");
10187                     }
10188                 }
10189               if (constp > 1)
10190                 pedwarn ("duplicate `const'");
10191               if (volatilep > 1)
10192                 pedwarn ("duplicate `volatile'");
10193               if (restrictp > 1)
10194                 pedwarn ("duplicate `restrict'");
10195
10196               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10197                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10198                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10199               if (TREE_CODE (declarator) == ADDR_EXPR
10200                   && (constp || volatilep))
10201                 {
10202                   if (constp)
10203                     pedwarn ("discarding `const' applied to a reference");
10204                   if (volatilep)
10205                     pedwarn ("discarding `volatile' applied to a reference");
10206                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10207                 }
10208               type = cp_build_qualified_type (type, type_quals);
10209             }
10210           declarator = TREE_OPERAND (declarator, 0);
10211           ctype = NULL_TREE;
10212           break;
10213
10214         case SCOPE_REF:
10215           {
10216             /* We have converted type names to NULL_TREE if the
10217                name was bogus, or to a _TYPE node, if not.
10218
10219                The variable CTYPE holds the type we will ultimately
10220                resolve to.  The code here just needs to build
10221                up appropriate member types.  */
10222             tree sname = TREE_OPERAND (declarator, 1);
10223             tree t;
10224
10225             /* Destructors can have their visibilities changed as well.  */
10226             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10227               sname = TREE_OPERAND (sname, 0);
10228
10229             if (TREE_COMPLEXITY (declarator) == 0)
10230               /* This needs to be here, in case we are called
10231                  multiple times.  */ ;
10232             else if (TREE_COMPLEXITY (declarator) == -1)
10233               /* Namespace member. */
10234               pop_decl_namespace ();
10235             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10236               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10237             else if (! IS_AGGR_TYPE_CODE
10238                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10239               ;
10240             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10241               {
10242                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10243                    that refer to ctype.  They couldn't be resolved earlier
10244                    because we hadn't pushed into the class yet.
10245                    Example: resolve 'B<T>::type' in
10246                    'B<typename B<T>::type> B<T>::f () { }'.  */
10247                 if (current_template_parms
10248                     && uses_template_parms (type)
10249                     && uses_template_parms (current_class_type))
10250                   {
10251                     tree args = current_template_args ();
10252                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10253                   }
10254
10255                 /* This pop_nested_class corresponds to the
10256                    push_nested_class used to push into class scope for
10257                    parsing the argument list of a function decl, in
10258                    qualified_id.  */
10259                 pop_nested_class ();
10260                 TREE_COMPLEXITY (declarator) = current_class_depth;
10261               }
10262             else
10263               my_friendly_abort (16);
10264
10265             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10266               {
10267                 /* We had a reference to a global decl, or
10268                    perhaps we were given a non-aggregate typedef,
10269                    in which case we cleared this out, and should just
10270                    keep going as though it wasn't there.  */
10271                 declarator = sname;
10272                 continue;
10273               }
10274             ctype = TREE_OPERAND (declarator, 0);
10275
10276             t = ctype;
10277             while (t != NULL_TREE && CLASS_TYPE_P (t)) 
10278               {
10279                 if (CLASSTYPE_TEMPLATE_INFO (t) &&
10280                     !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10281                   template_count += 1;
10282                 t = TYPE_MAIN_DECL (t);
10283                 if (DECL_LANG_SPECIFIC (t))
10284                   t = DECL_CLASS_CONTEXT (t);
10285                 else
10286                   t = NULL_TREE;
10287               }
10288
10289             if (sname == NULL_TREE)
10290               goto done_scoping;
10291
10292             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10293               {
10294                 /* This is the `standard' use of the scoping operator:
10295                    basetype :: member .  */
10296
10297                 if (ctype == current_class_type)
10298                   {
10299                     /* class A {
10300                          void A::f ();
10301                        };
10302
10303                        Is this ill-formed?  */
10304
10305                     if (pedantic)
10306                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10307                                   ctype, name);
10308                   }
10309                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10310                   {
10311                     if (current_class_type == NULL_TREE
10312                         || friendp)
10313                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10314                                                       TYPE_ARG_TYPES (type));
10315                     else
10316                       {
10317                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10318                                   ctype, name, current_class_type);
10319                         return void_type_node;
10320                       }
10321                   }
10322                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10323                          || TYPE_SIZE (complete_type (ctype)) != NULL_TREE)
10324                   {
10325                     /* Have to move this code elsewhere in this function.
10326                        this code is used for i.e., typedef int A::M; M *pm;
10327
10328                        It is?  How? jason 10/2/94 */
10329
10330                     if (current_class_type)
10331                       {
10332                         cp_error ("cannot declare member `%T::%s' within `%T'",
10333                                   ctype, name, current_class_type);
10334                         return void_type_node;
10335                       }
10336                     type = build_offset_type (ctype, type);
10337                   }
10338                 else if (uses_template_parms (ctype))
10339                   {
10340                     if (TREE_CODE (type) == FUNCTION_TYPE)
10341                       type
10342                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10343                                                    TYPE_ARG_TYPES (type));
10344                   }
10345                 else
10346                   {
10347                     cp_error ("structure `%T' not yet defined", ctype);
10348                     return error_mark_node;
10349                   }
10350
10351                 declarator = sname;
10352               }
10353             else if (TREE_CODE (sname) == SCOPE_REF)
10354               my_friendly_abort (17);
10355             else
10356               {
10357               done_scoping:
10358                 declarator = TREE_OPERAND (declarator, 1);
10359                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10360                   /* In this case, we will deal with it later.  */
10361                   ;
10362                 else
10363                   {
10364                     if (TREE_CODE (type) == FUNCTION_TYPE)
10365                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10366                                                       TYPE_ARG_TYPES (type));
10367                     else
10368                       type = build_offset_type (ctype, type);
10369                   }
10370               }
10371           }
10372           break;
10373
10374         case BIT_NOT_EXPR:
10375           declarator = TREE_OPERAND (declarator, 0);
10376           break;
10377
10378         case RECORD_TYPE:
10379         case UNION_TYPE:
10380         case ENUMERAL_TYPE:
10381           declarator = NULL_TREE;
10382           break;
10383
10384         case ERROR_MARK:
10385           declarator = NULL_TREE;
10386           break;
10387
10388         default:
10389           my_friendly_abort (158);
10390         }
10391     }
10392
10393   /* See the comment for the TREE_LIST case, above.  */
10394   if (inner_attrs)
10395     {
10396       if (! ignore_attrs)
10397         decl_attributes (type, inner_attrs, NULL_TREE);
10398       else if (attrlist)
10399         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10400       else
10401         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10402     }
10403
10404   /* Now TYPE has the actual type.  */
10405
10406   if (explicitp == 1 || (explicitp && friendp))
10407     {
10408       /* [dcl.fct.spec] The explicit specifier shall only be used in
10409          declarations of constructors within a class definition.  */
10410       error ("only declarations of constructors can be `explicit'");
10411       explicitp = 0;
10412     }
10413
10414   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10415     {
10416       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10417         {
10418           error ("non-member `%s' cannot be declared `mutable'", name);
10419           RIDBIT_RESET (RID_MUTABLE, specbits);
10420         }
10421       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10422         {
10423           error ("non-object member `%s' cannot be declared `mutable'", name);
10424           RIDBIT_RESET (RID_MUTABLE, specbits);
10425         }
10426       else if (TREE_CODE (type) == FUNCTION_TYPE
10427                || TREE_CODE (type) == METHOD_TYPE)
10428         {
10429           error ("function `%s' cannot be declared `mutable'", name);
10430           RIDBIT_RESET (RID_MUTABLE, specbits);
10431         }
10432       else if (staticp)
10433         {
10434           error ("static `%s' cannot be declared `mutable'", name);
10435           RIDBIT_RESET (RID_MUTABLE, specbits);
10436         }
10437       else if (type_quals & TYPE_QUAL_CONST)
10438         {
10439           error ("const `%s' cannot be declared `mutable'", name);
10440           RIDBIT_RESET (RID_MUTABLE, specbits);
10441         }
10442     }
10443
10444   if (declarator == NULL_TREE
10445       || TREE_CODE (declarator) == IDENTIFIER_NODE
10446       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10447           && (TREE_CODE (type) == FUNCTION_TYPE
10448               || TREE_CODE (type) == METHOD_TYPE)))
10449     /* OK */;
10450   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10451     {
10452       cp_error ("template-id `%D' used as a declarator", declarator);
10453       declarator = dname;
10454     }
10455   else
10456     /* Unexpected declarator format.  */
10457     my_friendly_abort (990210);
10458
10459   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10460
10461   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10462     {
10463       tree decl;
10464
10465       /* Note that the grammar rejects storage classes
10466          in typenames, fields or parameters.  */
10467       if (current_lang_name == lang_name_java)
10468         TYPE_FOR_JAVA (type) = 1;
10469
10470       if (decl_context == FIELD)
10471         {
10472           if (declarator == constructor_name (current_class_type))
10473             cp_pedwarn ("ANSI C++ forbids nested type `%D' with same name as enclosing class",
10474                         declarator);
10475           decl = build_lang_decl (TYPE_DECL, declarator, type);
10476         }
10477       else
10478         {
10479           /* Make sure this typedef lives as long as its type,
10480              since it might be used as a template parameter. */
10481           if (type != error_mark_node)
10482             push_obstacks (TYPE_OBSTACK (type), TYPE_OBSTACK (type));
10483           if (processing_template_decl)
10484             decl = build_lang_decl (TYPE_DECL, declarator, type);
10485           else
10486             decl = build_decl (TYPE_DECL, declarator, type);
10487           if (type != error_mark_node)
10488             pop_obstacks ();
10489         }
10490
10491       /* If the user declares "typedef struct {...} foo" then the
10492          struct will have an anonymous name.  Fill that name in now.
10493          Nothing can refer to it, so nothing needs know about the name
10494          change.  */
10495       if (type != error_mark_node
10496           && TYPE_NAME (type)
10497           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10498           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10499           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10500         {
10501           tree oldname = TYPE_NAME (type);
10502           tree t;
10503
10504           /* Replace the anonymous name with the real name everywhere.  */
10505           lookup_tag_reverse (type, declarator);
10506           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10507             if (TYPE_NAME (t) == oldname)
10508               TYPE_NAME (t) = decl;
10509
10510           if (TYPE_LANG_SPECIFIC (type))
10511             TYPE_WAS_ANONYMOUS (type) = 1;
10512
10513           /* If this is a typedef within a template class, the nested
10514              type is a (non-primary) template.  The name for the
10515              template needs updating as well.  */
10516           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10517             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 
10518               = TYPE_IDENTIFIER (type);
10519
10520           /* XXX Temporarily set the scope. 
10521              When returning, start_decl expects it as NULL_TREE,
10522              and will then then set it using pushdecl. */
10523           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10524           if (current_class_type)
10525             DECL_CONTEXT (decl) = current_class_type;
10526           else
10527             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10528
10529           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10530           DECL_ASSEMBLER_NAME (decl)
10531             = get_identifier (build_overload_name (type, 1, 1));
10532           DECL_CONTEXT (decl) = NULL_TREE;
10533
10534           /* FIXME remangle member functions; member functions of a
10535              type with external linkage have external linkage.  */
10536         }
10537
10538       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10539         {
10540           cp_error_at ("typedef name may not be class-qualified", decl);
10541           return NULL_TREE;
10542         }
10543       else if (quals)
10544         {
10545           if (ctype == NULL_TREE)
10546             {
10547               if (TREE_CODE (type) != METHOD_TYPE)
10548                 cp_error_at ("invalid type qualifier for non-method type", decl);
10549               else
10550                 ctype = TYPE_METHOD_BASETYPE (type);
10551             }
10552           if (ctype != NULL_TREE)
10553             grok_method_quals (ctype, decl, quals);
10554         }
10555
10556       if (RIDBIT_SETP (RID_SIGNED, specbits)
10557           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10558         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10559
10560       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10561                       inlinep, friendp, raises != NULL_TREE);
10562
10563       if (initialized)
10564         error ("typedef declaration includes an initializer");
10565
10566       return decl;
10567     }
10568
10569   /* Detect the case of an array type of unspecified size
10570      which came, as such, direct from a typedef name.
10571      We must copy the type, so that each identifier gets
10572      a distinct type, so that each identifier's size can be
10573      controlled separately by its own initializer.  */
10574
10575   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
10576       && TYPE_DOMAIN (type) == NULL_TREE)
10577     {
10578       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
10579     }
10580
10581   /* If this is a type name (such as, in a cast or sizeof),
10582      compute the type and return it now.  */
10583
10584   if (decl_context == TYPENAME)
10585     {
10586       /* Note that the grammar rejects storage classes
10587          in typenames, fields or parameters.  */
10588       if (type_quals != TYPE_UNQUALIFIED)
10589         type_quals = TYPE_UNQUALIFIED;
10590
10591       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10592       if (friendp)
10593         {
10594           if (type_quals != TYPE_UNQUALIFIED)
10595             {
10596               cp_error ("type qualifiers specified for friend class declaration");
10597               type_quals = TYPE_UNQUALIFIED;
10598             }
10599           if (inlinep)
10600             {
10601               cp_error ("`inline' specified for friend class declaration");
10602               inlinep = 0;
10603             }
10604
10605           /* Only try to do this stuff if we didn't already give up.  */
10606           if (type != integer_type_node)
10607             {
10608               /* A friendly class?  */
10609               if (current_class_type)
10610                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
10611               else
10612                 error ("trying to make class `%s' a friend of global scope",
10613                        TYPE_NAME_STRING (type));
10614               type = void_type_node;
10615             }
10616         }
10617       else if (quals)
10618         {
10619           tree dummy = build_decl (TYPE_DECL, declarator, type);
10620           if (ctype == NULL_TREE)
10621             {
10622               my_friendly_assert (TREE_CODE (type) == METHOD_TYPE, 159);
10623               ctype = TYPE_METHOD_BASETYPE (type);
10624             }
10625           grok_method_quals (ctype, dummy, quals);
10626           type = TREE_TYPE (dummy);
10627         }
10628
10629       return type;
10630     }
10631   else if (declarator == NULL_TREE && decl_context != PARM
10632            && decl_context != CATCHPARM
10633            && TREE_CODE (type) != UNION_TYPE
10634            && ! bitfield)
10635     {
10636       cp_error ("abstract declarator `%T' used as declaration", type);
10637       declarator = make_anon_name ();
10638     }
10639
10640   /* `void' at top level (not within pointer)
10641      is allowed only in typedefs or type names.
10642      We don't complain about parms either, but that is because
10643      a better error message can be made later.  */
10644
10645   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
10646     {
10647       if (! declarator)
10648         error ("unnamed variable or field declared void");
10649       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10650         {
10651           if (IDENTIFIER_OPNAME_P (declarator))
10652             my_friendly_abort (356);
10653           else
10654             error ("variable or field `%s' declared void", name);
10655         }
10656       else
10657         error ("variable or field declared void");
10658       type = integer_type_node;
10659     }
10660
10661   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10662      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10663
10664   if (decl_context == PARM || decl_context == CATCHPARM)
10665     {
10666       if (ctype || in_namespace)
10667         error ("cannot use `::' in parameter declaration");
10668
10669       /* A parameter declared as an array of T is really a pointer to T.
10670          One declared as a function is really a pointer to a function.
10671          One declared as a member is really a pointer to member.  */
10672
10673       if (TREE_CODE (type) == ARRAY_TYPE)
10674         {
10675           /* Transfer const-ness of array into that of type pointed to.  */
10676           type = build_pointer_type (TREE_TYPE (type));
10677           type_quals = TYPE_UNQUALIFIED;
10678         }
10679       else if (TREE_CODE (type) == FUNCTION_TYPE)
10680         type = build_pointer_type (type);
10681       else if (TREE_CODE (type) == OFFSET_TYPE)
10682         type = build_pointer_type (type);
10683       else if (TREE_CODE (type) == VOID_TYPE && declarator)
10684         {
10685           error ("declaration of `%s' as void", name);
10686           return NULL_TREE;
10687         }
10688     }
10689   
10690   {
10691     register tree decl;
10692
10693     if (decl_context == PARM)
10694       {
10695         decl = build_decl (PARM_DECL, declarator, type);
10696
10697         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
10698                         inlinep, friendp, raises != NULL_TREE);
10699
10700         /* Compute the type actually passed in the parmlist,
10701            for the case where there is no prototype.
10702            (For example, shorts and chars are passed as ints.)
10703            When there is a prototype, this is overridden later.  */
10704
10705         DECL_ARG_TYPE (decl) = type_promotes_to (type);
10706       }
10707     else if (decl_context == FIELD)
10708       {
10709         if (type == error_mark_node)
10710           {
10711             /* Happens when declaring arrays of sizes which
10712                are error_mark_node, for example.  */
10713             decl = NULL_TREE;
10714           }
10715         else if (in_namespace && !friendp)
10716           {
10717             /* Something like struct S { int N::j; };  */
10718             cp_error ("invalid use of `::'");
10719             decl = NULL_TREE;
10720           }
10721         else if (TREE_CODE (type) == FUNCTION_TYPE)
10722           {
10723             int publicp = 0;
10724             tree function_context;
10725
10726             /* We catch the others as conflicts with the builtin
10727                typedefs.  */
10728             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
10729               {
10730                 cp_error ("function `%D' cannot be declared friend",
10731                           declarator);
10732                 friendp = 0;
10733               }
10734
10735             if (friendp == 0)
10736               {
10737                 if (ctype == NULL_TREE)
10738                   ctype = current_class_type;
10739
10740                 if (ctype == NULL_TREE)
10741                   {
10742                     cp_error ("can't make `%D' into a method -- not in a class",
10743                               declarator);
10744                     return void_type_node;
10745                   }
10746
10747                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10748                    ARM 9.5 */
10749                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10750                   {
10751                     cp_error ("function `%D' declared virtual inside a union",
10752                               declarator);
10753                     return void_type_node;
10754                   }
10755
10756                 if (declarator == ansi_opname[(int) NEW_EXPR]
10757                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
10758                     || declarator == ansi_opname[(int) DELETE_EXPR]
10759                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
10760                   {
10761                     if (virtualp)
10762                       {
10763                         cp_error ("`%D' cannot be declared virtual, since it is always static",
10764                                   declarator);
10765                         virtualp = 0;
10766                       }
10767                   }
10768                 else if (staticp < 2)
10769                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
10770                                                   TYPE_ARG_TYPES (type));
10771               }
10772
10773             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10774             function_context = (ctype != NULL_TREE) ? 
10775               hack_decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10776             publicp = (! friendp || ! staticp)
10777               && function_context == NULL_TREE;
10778             decl = grokfndecl (ctype, type, 
10779                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
10780                                ? declarator : dname,
10781                                declarator,
10782                                virtualp, flags, quals, raises,
10783                                friendp ? -1 : 0, friendp, publicp, inlinep,
10784                                funcdef_flag, template_count, in_namespace);
10785             if (decl == NULL_TREE)
10786               return decl;
10787 #if 0
10788             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10789             /* The decl and setting of decl_machine_attr is also turned off.  */
10790             decl = build_decl_attribute_variant (decl, decl_machine_attr);
10791 #endif
10792
10793             /* [class.conv.ctor]
10794
10795                A constructor declared without the function-specifier
10796                explicit that can be called with a single parameter
10797                specifies a conversion from the type of its first
10798                parameter to the type of its class.  Such a constructor
10799                is called a converting constructor.  */
10800             if (explicitp == 2)
10801               DECL_NONCONVERTING_P (decl) = 1;
10802             else if (DECL_CONSTRUCTOR_P (decl))
10803               {
10804                 /* The constructor can be called with exactly one
10805                    parameter if there is at least one parameter, and
10806                    any subsequent parameters have default arguments.
10807                    We don't look at the first parameter, which is
10808                    really just the `this' parameter for the new
10809                    object.  */
10810                 tree arg_types = 
10811                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
10812
10813                 /* Skip the `in_chrg' argument too, if present.  */
10814                 if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (decl)))
10815                   arg_types = TREE_CHAIN (arg_types);
10816
10817                 if (arg_types == void_list_node
10818                     || (arg_types 
10819                         && TREE_CHAIN (arg_types) 
10820                         && TREE_CHAIN (arg_types) != void_list_node
10821                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
10822                   DECL_NONCONVERTING_P (decl) = 1;
10823               }
10824           }
10825         else if (TREE_CODE (type) == METHOD_TYPE)
10826           {
10827             /* We only get here for friend declarations of
10828                members of other classes.  */
10829             /* All method decls are public, so tell grokfndecl to set
10830                TREE_PUBLIC, also.  */
10831             decl = grokfndecl (ctype, type, declarator, declarator,
10832                                virtualp, flags, quals, raises,
10833                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
10834                                template_count, in_namespace);
10835             if (decl == NULL_TREE)
10836               return NULL_TREE;
10837           }
10838         else if (!staticp && ! processing_template_decl
10839                  && TYPE_SIZE (complete_type (type)) == NULL_TREE
10840                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10841           {
10842             if (declarator)
10843               cp_error ("field `%D' has incomplete type", declarator);
10844             else
10845               cp_error ("name `%T' has incomplete type", type);
10846
10847             /* If we're instantiating a template, tell them which
10848                instantiation made the field's type be incomplete.  */
10849             if (current_class_type
10850                 && TYPE_NAME (current_class_type)
10851                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
10852                 && declspecs && TREE_VALUE (declspecs)
10853                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
10854               cp_error ("  in instantiation of template `%T'",
10855                         current_class_type);
10856
10857             type = error_mark_node;
10858             decl = NULL_TREE;
10859           }
10860         else
10861           {
10862             if (friendp)
10863               {
10864                 error ("`%s' is neither function nor method; cannot be declared friend",
10865                        IDENTIFIER_POINTER (declarator));
10866                 friendp = 0;
10867               }
10868             decl = NULL_TREE;
10869           }
10870
10871         if (friendp)
10872           {
10873             /* Friends are treated specially.  */
10874             if (ctype == current_class_type)
10875               warning ("member functions are implicitly friends of their class");
10876             else
10877               {
10878                 tree t = NULL_TREE;
10879                 if (decl && DECL_NAME (decl))
10880                   {
10881                     if (template_class_depth (current_class_type) == 0)
10882                       {
10883                         decl 
10884                           = check_explicit_specialization 
10885                           (declarator, decl,
10886                            template_count, 2 * (funcdef_flag != 0) + 4);
10887                         if (decl == error_mark_node)
10888                           return error_mark_node;
10889                       }
10890
10891                     t = do_friend (ctype, declarator, decl,
10892                                    last_function_parms, attrlist, flags, quals,
10893                                    funcdef_flag);
10894                   }
10895                 if (t && funcdef_flag)
10896                   return t;
10897                 
10898                 return void_type_node;
10899               }
10900           }
10901
10902         /* Structure field.  It may not be a function, except for C++ */
10903
10904         if (decl == NULL_TREE)
10905           {
10906             if (initialized)
10907               {
10908                 if (!staticp)
10909                   {
10910                     /* An attempt is being made to initialize a non-static
10911                        member.  But, from [class.mem]:
10912                        
10913                        4 A member-declarator can contain a
10914                        constant-initializer only if it declares a static
10915                        member (_class.static_) of integral or enumeration
10916                        type, see _class.static.data_.  
10917
10918                        This used to be relatively common practice, but
10919                        the rest of the compiler does not correctly
10920                        handle the initialization unless the member is
10921                        static so we make it static below.  */
10922                     cp_pedwarn ("ANSI C++ forbids initialization of member `%D'",
10923                                 declarator);
10924                     cp_pedwarn ("making `%D' static", declarator);
10925                     staticp = 1;
10926                   }
10927
10928                 if (uses_template_parms (type))
10929                   /* We'll check at instantiation time.  */
10930                   ;
10931                 else if (check_static_variable_definition (declarator,
10932                                                            type))
10933                   /* If we just return the declaration, crashes
10934                      will sometimes occur.  We therefore return
10935                      void_type_node, as if this was a friend
10936                      declaration, to cause callers to completely
10937                      ignore this declaration.  */
10938                   return void_type_node;
10939               }
10940
10941             /* 9.2p13 [class.mem] */
10942             if (declarator == constructor_name (current_class_type)
10943                 /* Divergence from the standard:  In extern "C", we
10944                    allow non-static data members here, because C does
10945                    and /usr/include/netinet/in.h uses that.  */
10946                 && (staticp || ! in_system_header))
10947               cp_pedwarn ("ANSI C++ forbids data member `%D' with same name as enclosing class",
10948                           declarator);
10949
10950             if (staticp)
10951               {
10952                 /* C++ allows static class members.  All other work
10953                    for this is done by grokfield.  */
10954                 decl = build_lang_decl (VAR_DECL, declarator, type);
10955                 TREE_STATIC (decl) = 1;
10956                 /* In class context, 'static' means public access.  */
10957                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
10958               }
10959             else
10960               {
10961                 decl = build_lang_decl (FIELD_DECL, declarator, type);
10962                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
10963                   {
10964                     DECL_MUTABLE_P (decl) = 1;
10965                     RIDBIT_RESET (RID_MUTABLE, specbits);
10966                   }
10967               }
10968
10969             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
10970                             inlinep, friendp, raises != NULL_TREE);
10971           }
10972       }
10973     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
10974       {
10975         tree original_name;
10976         int publicp = 0;
10977
10978         if (! declarator)
10979           return NULL_TREE;
10980
10981         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10982           original_name = dname;
10983         else
10984           original_name = declarator;
10985
10986         if (RIDBIT_SETP (RID_AUTO, specbits))
10987           error ("storage class `auto' invalid for function `%s'", name);
10988         else if (RIDBIT_SETP (RID_REGISTER, specbits))
10989           error ("storage class `register' invalid for function `%s'", name);
10990
10991         /* Function declaration not at top level.
10992            Storage classes other than `extern' are not allowed
10993            and `extern' makes no difference.  */
10994         if (! toplevel_bindings_p ()
10995             && (RIDBIT_SETP (RID_STATIC, specbits)
10996                 || RIDBIT_SETP (RID_INLINE, specbits))
10997             && pedantic)
10998           {
10999             if (RIDBIT_SETP (RID_STATIC, specbits))
11000               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11001             else
11002               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11003           }
11004         
11005         if (ctype == NULL_TREE)
11006           {
11007             if (virtualp)
11008               {
11009                 error ("virtual non-class function `%s'", name);
11010                 virtualp = 0;
11011               }
11012           }
11013         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11014           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11015                                           TYPE_ARG_TYPES (type));
11016
11017         /* Record presence of `static'.  */
11018         publicp = (ctype != NULL_TREE
11019                    || RIDBIT_SETP (RID_EXTERN, specbits)
11020                    || !RIDBIT_SETP (RID_STATIC, specbits));
11021
11022         decl = grokfndecl (ctype, type, original_name, declarator,
11023                            virtualp, flags, quals, raises,
11024                            1, friendp,
11025                            publicp, inlinep, funcdef_flag, 
11026                            template_count, in_namespace);
11027         if (decl == NULL_TREE)
11028           return NULL_TREE;
11029
11030         if (staticp == 1)
11031           {
11032             int illegal_static = 0;
11033
11034             /* Don't allow a static member function in a class, and forbid
11035                declaring main to be static.  */
11036             if (TREE_CODE (type) == METHOD_TYPE)
11037               {
11038                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11039                 illegal_static = 1;
11040               }
11041             else if (current_function_decl)
11042               {
11043                 /* FIXME need arm citation */
11044                 error ("cannot declare static function inside another function");
11045                 illegal_static = 1;
11046               }
11047
11048             if (illegal_static)
11049               {
11050                 staticp = 0;
11051                 RIDBIT_RESET (RID_STATIC, specbits);
11052               }
11053           }
11054       }
11055     else
11056       {
11057         /* It's a variable.  */
11058
11059         /* An uninitialized decl with `extern' is a reference.  */
11060         decl = grokvardecl (type, declarator, &specbits, 
11061                             initialized, 
11062                             (type_quals & TYPE_QUAL_CONST) != 0, 
11063                             in_namespace);
11064         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11065                         inlinep, friendp, raises != NULL_TREE);
11066
11067         if (ctype)
11068           {
11069             DECL_CONTEXT (decl) = ctype;
11070             if (staticp == 1)
11071               {
11072                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11073                 staticp = 0;
11074                 RIDBIT_RESET (RID_STATIC, specbits);
11075               }
11076             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11077               {
11078                 cp_error ("static member `%D' declared `register'", decl);
11079                 RIDBIT_RESET (RID_REGISTER, specbits);
11080               }
11081             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11082               {
11083                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11084                             decl);
11085                 RIDBIT_RESET (RID_EXTERN, specbits);
11086               }
11087           }
11088       }
11089
11090     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11091
11092     /* Record `register' declaration for warnings on &
11093        and in case doing stupid register allocation.  */
11094
11095     if (RIDBIT_SETP (RID_REGISTER, specbits))
11096       DECL_REGISTER (decl) = 1;
11097
11098     if (RIDBIT_SETP (RID_EXTERN, specbits))
11099       DECL_THIS_EXTERN (decl) = 1;
11100
11101     if (RIDBIT_SETP (RID_STATIC, specbits))
11102       DECL_THIS_STATIC (decl) = 1;
11103
11104     /* Record constancy and volatility.  There's no need to do this
11105        when processing a template; we'll do this for the instantiated
11106        declaration based on the type of DECL.  */
11107     if (!processing_template_decl)
11108       c_apply_type_quals_to_decl (type_quals, decl);
11109
11110     return decl;
11111   }
11112 }
11113 \f
11114 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11115    An empty exprlist is a parmlist.  An exprlist which
11116    contains only identifiers at the global level
11117    is a parmlist.  Otherwise, it is an exprlist.  */
11118
11119 int
11120 parmlist_is_exprlist (exprs)
11121      tree exprs;
11122 {
11123   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11124     return 0;
11125
11126   if (toplevel_bindings_p ())
11127     {
11128       /* At the global level, if these are all identifiers,
11129          then it is a parmlist.  */
11130       while (exprs)
11131         {
11132           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11133             return 1;
11134           exprs = TREE_CHAIN (exprs);
11135         }
11136       return 0;
11137     }
11138   return 1;
11139 }
11140
11141 /* Subroutine of start_function.  Ensure that each of the parameter
11142    types (as listed in PARMS) is complete, as is required for a
11143    function definition.  */
11144
11145 static void
11146 require_complete_types_for_parms (parms)
11147      tree parms;
11148 {
11149   while (parms)
11150     {
11151       tree type = TREE_TYPE (parms);
11152       if (TYPE_SIZE (complete_type (type)) == NULL_TREE)
11153         {
11154           if (DECL_NAME (parms))
11155             error ("parameter `%s' has incomplete type",
11156                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11157           else
11158             error ("parameter has incomplete type");
11159           TREE_TYPE (parms) = error_mark_node;
11160         }
11161       else
11162         layout_decl (parms, 0);
11163
11164       parms = TREE_CHAIN (parms);
11165     }
11166 }
11167
11168 /* Returns *TP if *TP is a local variable (or parameter).  Returns
11169    NULL_TREE otherwise.  */
11170
11171 static tree
11172 local_variable_p (tp)
11173      tree *tp;
11174 {
11175   tree t = *tp;
11176
11177   if ((TREE_CODE (t) == VAR_DECL 
11178        /* A VAR_DECL with a context that is a _TYPE is a static data
11179           member.  */
11180        && !TYPE_P (CP_DECL_CONTEXT (t))
11181        /* Any other non-local variable must be at namespace scope.  */
11182        && TREE_CODE (CP_DECL_CONTEXT (t)) != NAMESPACE_DECL)
11183       || (TREE_CODE (t) == PARM_DECL))
11184     return t;
11185
11186   return NULL_TREE;
11187 }
11188
11189 /* Check that ARG, which is a default-argument expression for a
11190    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11191    something goes wrong.  DECL may also be a _TYPE node, rather than a
11192    DECL, if there is no DECL available.  */
11193
11194 tree
11195 check_default_argument (decl, arg)
11196      tree decl;
11197      tree arg;
11198 {
11199   tree var;
11200   tree decl_type;
11201
11202   if (TREE_CODE (arg) == DEFAULT_ARG)
11203     /* We get a DEFAULT_ARG when looking at an in-class declaration
11204        with a default argument.  Ignore the argument for now; we'll
11205        deal with it after the class is complete.  */
11206     return arg;
11207
11208   if (processing_template_decl || uses_template_parms (arg))
11209     /* We don't do anything checking until instantiation-time.  Note
11210        that there may be uninstantiated arguments even for an
11211        instantiated function, since default arguments are not
11212        instantiated until they are needed.  */
11213     return arg;
11214
11215   if (TYPE_P (decl))
11216     {
11217       decl_type = decl;
11218       decl = NULL_TREE;
11219     }
11220   else
11221     decl_type = TREE_TYPE (decl);
11222
11223   if (arg == error_mark_node 
11224       || decl == error_mark_node
11225       || TREE_TYPE (arg) == error_mark_node
11226       || decl_type == error_mark_node)
11227     /* Something already went wrong.  There's no need to check
11228        further.  */
11229     return error_mark_node;
11230
11231   /* [dcl.fct.default]
11232      
11233      A default argument expression is implicitly converted to the
11234      parameter type.  */
11235   if (!TREE_TYPE (arg)
11236       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11237     {
11238       if (decl)
11239         cp_error ("default argument for `%#D' has type `%T'", 
11240                   decl, TREE_TYPE (arg));
11241       else
11242         cp_error ("default argument for parameter of type `%T' has type `%T'",
11243                   decl_type, TREE_TYPE (arg));
11244
11245       return error_mark_node;
11246     }
11247
11248   /* [dcl.fct.default]
11249
11250      Local variables shall not be used in default argument
11251      expressions. 
11252
11253      The keyword `this' shall not be used in a default argument of a
11254      member function.  */
11255   var = search_tree (&arg, local_variable_p);
11256   if (var)
11257     {
11258       cp_error ("default argument `%E' uses local variable `%D'",
11259                 arg, var);
11260       return error_mark_node;
11261     }
11262
11263   /* All is well.  */
11264   return arg;
11265 }
11266
11267 /* Decode the list of parameter types for a function type.
11268    Given the list of things declared inside the parens,
11269    return a list of types.
11270
11271    The list we receive can have three kinds of elements:
11272    an IDENTIFIER_NODE for names given without types,
11273    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11274    or void_type_node, to mark the end of an argument list
11275    when additional arguments are not permitted (... was not used).
11276
11277    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11278    a mere declaration.  A nonempty identifier-list gets an error message
11279    when FUNCDEF_FLAG is zero.
11280    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11281    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11282
11283    If all elements of the input list contain types,
11284    we return a list of the types.
11285    If all elements contain no type (except perhaps a void_type_node
11286    at the end), we return a null list.
11287    If some have types and some do not, it is an error, and we
11288    return a null list.
11289
11290    Also set last_function_parms to either
11291    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11292    A list of names is converted to a chain of PARM_DECLs
11293    by store_parm_decls so that ultimately it is always a chain of decls.
11294
11295    Note that in C++, parameters can take default values.  These default
11296    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11297    an error to specify default values which are followed by parameters
11298    that have no default values, or an ELLIPSES.  For simplicities sake,
11299    only parameters which are specified with their types can take on
11300    default values.  */
11301
11302 static tree
11303 grokparms (first_parm, funcdef_flag)
11304      tree first_parm;
11305      int funcdef_flag;
11306 {
11307   tree result = NULL_TREE;
11308   tree decls = NULL_TREE;
11309
11310   if (first_parm != NULL_TREE
11311       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11312     {
11313       if (! funcdef_flag)
11314         pedwarn ("parameter names (without types) in function declaration");
11315       last_function_parms = first_parm;
11316       return NULL_TREE;
11317     }
11318   else if (first_parm != NULL_TREE
11319            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11320            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11321     my_friendly_abort (145);
11322   else
11323     {
11324       /* Types were specified.  This is a list of declarators
11325          each represented as a TREE_LIST node.  */
11326       register tree parm, chain;
11327       int any_init = 0, any_error = 0;
11328
11329       if (first_parm != NULL_TREE)
11330         {
11331           tree last_result = NULL_TREE;
11332           tree last_decl = NULL_TREE;
11333
11334           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11335             {
11336               tree type = NULL_TREE, list_node = parm;
11337               register tree decl = TREE_VALUE (parm);
11338               tree init = TREE_PURPOSE (parm);
11339
11340               chain = TREE_CHAIN (parm);
11341               /* @@ weak defense against parse errors.  */
11342               if (TREE_CODE (decl) != VOID_TYPE 
11343                   && TREE_CODE (decl) != TREE_LIST)
11344                 {
11345                   /* Give various messages as the need arises.  */
11346                   if (TREE_CODE (decl) == STRING_CST)
11347                     cp_error ("invalid string constant `%E'", decl);
11348                   else if (TREE_CODE (decl) == INTEGER_CST)
11349                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11350                   continue;
11351                 }
11352
11353               if (TREE_CODE (decl) != VOID_TYPE)
11354                 {
11355                   decl = grokdeclarator (TREE_VALUE (decl),
11356                                          TREE_PURPOSE (decl),
11357                                          PARM, init != NULL_TREE,
11358                                          NULL_TREE);
11359                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11360                     continue;
11361
11362                   /* Top-level qualifiers on the parameters are
11363                      ignored for function types.  */
11364                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11365
11366                   if (TREE_CODE (type) == VOID_TYPE)
11367                     decl = void_type_node;
11368                   else if (TREE_CODE (type) == METHOD_TYPE)
11369                     {
11370                       if (DECL_NAME (decl))
11371                         /* Cannot use the decl here because
11372                            we don't have DECL_CONTEXT set up yet.  */
11373                         cp_error ("parameter `%D' invalidly declared method type",
11374                                   DECL_NAME (decl));
11375                       else
11376                         error ("parameter invalidly declared method type");
11377                       type = build_pointer_type (type);
11378                       TREE_TYPE (decl) = type;
11379                     }
11380                   else if (TREE_CODE (type) == OFFSET_TYPE)
11381                     {
11382                       if (DECL_NAME (decl))
11383                         cp_error ("parameter `%D' invalidly declared offset type",
11384                                   DECL_NAME (decl));
11385                       else
11386                         error ("parameter invalidly declared offset type");
11387                       type = build_pointer_type (type);
11388                       TREE_TYPE (decl) = type;
11389                     }
11390                   else if (abstract_virtuals_error (decl, type))
11391                     any_error = 1;  /* Seems like a good idea. */
11392                   else if (POINTER_TYPE_P (type))
11393                     {
11394                       tree t = type;
11395                       while (POINTER_TYPE_P (t)
11396                              || (TREE_CODE (t) == ARRAY_TYPE
11397                                  && TYPE_DOMAIN (t) != NULL_TREE))
11398                         t = TREE_TYPE (t);
11399                       if (TREE_CODE (t) == ARRAY_TYPE)
11400                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11401                                   type,
11402                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11403                     }
11404                 }
11405
11406               if (TREE_CODE (decl) == VOID_TYPE)
11407                 {
11408                   if (result == NULL_TREE)
11409                     {
11410                       result = void_list_node;
11411                       last_result = result;
11412                     }
11413                   else
11414                     {
11415                       TREE_CHAIN (last_result) = void_list_node;
11416                       last_result = void_list_node;
11417                     }
11418                   if (chain
11419                       && (chain != void_list_node || TREE_CHAIN (chain)))
11420                     error ("`void' in parameter list must be entire list");
11421                   break;
11422                 }
11423
11424               /* Since there is a prototype, args are passed in their own types.  */
11425               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11426               if (PROMOTE_PROTOTYPES
11427                   && (TREE_CODE (type) == INTEGER_TYPE
11428                       || TREE_CODE (type) == ENUMERAL_TYPE)
11429                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11430                 DECL_ARG_TYPE (decl) = integer_type_node;
11431               if (!any_error && init)
11432                 {
11433                   any_init++;
11434                   init = check_default_argument (decl, init);
11435                 }
11436               else
11437                 init = NULL_TREE;
11438
11439               if (decls == NULL_TREE)
11440                 {
11441                   decls = decl;
11442                   last_decl = decls;
11443                 }
11444               else
11445                 {
11446                   TREE_CHAIN (last_decl) = decl;
11447                   last_decl = decl;
11448                 }
11449               list_node = tree_cons (init, type, NULL_TREE);
11450               if (result == NULL_TREE)
11451                 {
11452                   result = list_node;
11453                   last_result = result;
11454                 }
11455               else
11456                 {
11457                   TREE_CHAIN (last_result) = list_node;
11458                   last_result = list_node;
11459                 }
11460             }
11461           if (last_result)
11462             TREE_CHAIN (last_result) = NULL_TREE;
11463           /* If there are no parameters, and the function does not end
11464              with `...', then last_decl will be NULL_TREE.  */
11465           if (last_decl != NULL_TREE)
11466             TREE_CHAIN (last_decl) = NULL_TREE;
11467         }
11468     }
11469
11470   last_function_parms = decls;
11471
11472   return result;
11473 }
11474
11475 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11476    FUNCTION_TYPE with the newly parsed version of its default argument, which
11477    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11478
11479 void
11480 replace_defarg (arg, init)
11481      tree arg, init;
11482 {
11483   if (! processing_template_decl
11484       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11485     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11486                 TREE_TYPE (init), TREE_VALUE (arg));
11487   TREE_PURPOSE (arg) = init;
11488 }
11489 \f
11490 int
11491 copy_args_p (d)
11492      tree d;
11493 {
11494   tree t = FUNCTION_ARG_CHAIN (d);
11495   if (DECL_CONSTRUCTOR_P (d)
11496       && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d)))
11497     t = TREE_CHAIN (t);
11498   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11499       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11500           == DECL_CLASS_CONTEXT (d))
11501       && (TREE_CHAIN (t) == NULL_TREE
11502           || TREE_CHAIN (t) == void_list_node
11503           || TREE_PURPOSE (TREE_CHAIN (t))))
11504     return 1;
11505   return 0;
11506 }
11507
11508 /* These memoizing functions keep track of special properties which
11509    a class may have.  `grok_ctor_properties' notices whether a class
11510    has a constructor of the form X(X&), and also complains
11511    if the class has a constructor of the form X(X).
11512    `grok_op_properties' takes notice of the various forms of
11513    operator= which are defined, as well as what sorts of type conversion
11514    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11515
11516 int
11517 grok_ctor_properties (ctype, decl)
11518      tree ctype, decl;
11519 {
11520   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11521   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11522
11523   /* When a type has virtual baseclasses, a magical first int argument is
11524      added to any ctor so we can tell if the class has been initialized
11525      yet.  This could screw things up in this function, so we deliberately
11526      ignore the leading int if we're in that situation.  */
11527   if (TYPE_USES_VIRTUAL_BASECLASSES (ctype))
11528     {
11529       my_friendly_assert (parmtypes
11530                           && TREE_VALUE (parmtypes) == integer_type_node,
11531                           980529);
11532       parmtypes = TREE_CHAIN (parmtypes);
11533       parmtype = TREE_VALUE (parmtypes);
11534     }
11535
11536   /* [class.copy]
11537
11538      A non-template constructor for class X is a copy constructor if
11539      its first parameter is of type X&, const X&, volatile X& or const
11540      volatile X&, and either there are no other parameters or else all
11541      other parameters have default arguments.  */
11542   if (TREE_CODE (parmtype) == REFERENCE_TYPE
11543       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
11544       && (TREE_CHAIN (parmtypes) == NULL_TREE
11545           || TREE_CHAIN (parmtypes) == void_list_node
11546           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11547       && !(DECL_TEMPLATE_INSTANTIATION (decl)
11548            && is_member_template (DECL_TI_TEMPLATE (decl))))
11549     {
11550       TYPE_HAS_INIT_REF (ctype) = 1;
11551       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11552         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
11553     }
11554   /* [class.copy]
11555
11556      A declaration of a constructor for a class X is ill-formed if its
11557      first parameter is of type (optionally cv-qualified) X and either
11558      there are no other parameters or else all other parameters have
11559      default arguments.  
11560
11561      We *don't* complain about member template instantiations that
11562      have this form, though; they can occur as we try to decide what
11563      constructor to use during overload resolution.  Since overload
11564      resolution will never prefer such a constructor to the
11565      non-template copy constructor (which is either explicitly or
11566      implicitly defined), there's no need to worry about their
11567      existence.  Theoretically, they should never even be
11568      instantiated, but that's hard to forestall.  */
11569   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
11570            && (TREE_CHAIN (parmtypes) == NULL_TREE
11571                || TREE_CHAIN (parmtypes) == void_list_node
11572                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
11573            && !(DECL_TEMPLATE_INSTANTIATION (decl)
11574                 && is_member_template (DECL_TI_TEMPLATE (decl))))
11575     {
11576       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
11577                 ctype, ctype);
11578       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
11579       return 0;
11580     }
11581   else if (TREE_CODE (parmtype) == VOID_TYPE
11582            || TREE_PURPOSE (parmtypes) != NULL_TREE)
11583     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
11584
11585   return 1;
11586 }
11587
11588 /* An operator with this name can be either unary or binary.  */
11589
11590 static int
11591 ambi_op_p (name)
11592      tree name;
11593 {
11594   return (name == ansi_opname [(int) INDIRECT_REF]
11595           || name == ansi_opname [(int) ADDR_EXPR]
11596           || name == ansi_opname [(int) NEGATE_EXPR]
11597           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
11598           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
11599           || name == ansi_opname [(int) CONVERT_EXPR]);
11600 }
11601
11602 /* An operator with this name can only be unary.  */
11603
11604 static int
11605 unary_op_p (name)
11606      tree name;
11607 {
11608   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
11609           || name == ansi_opname [(int) BIT_NOT_EXPR]
11610           || name == ansi_opname [(int) COMPONENT_REF]
11611           || IDENTIFIER_TYPENAME_P (name));
11612 }
11613
11614 /* Do a little sanity-checking on how they declared their operator.  */
11615
11616 void
11617 grok_op_properties (decl, virtualp, friendp)
11618      tree decl;
11619      int virtualp, friendp;
11620 {
11621   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11622   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11623   tree name = DECL_NAME (decl);
11624
11625   if (current_class_type == NULL_TREE)
11626     friendp = 1;
11627
11628   if (! friendp)
11629     {
11630       /* [class.copy]
11631
11632          A user-declared copy assignment operator X::operator= is a
11633          non-static non-template member function of class X with
11634          exactly one parameter of type X, X&, const X&, volatile X& or
11635          const volatile X&.  */
11636       if (name == ansi_opname[(int) MODIFY_EXPR]
11637           && !(DECL_TEMPLATE_INSTANTIATION (decl)
11638                && is_member_template (DECL_TI_TEMPLATE (decl))))
11639         ;
11640       else if (name == ansi_opname[(int) CALL_EXPR])
11641         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
11642       else if (name == ansi_opname[(int) ARRAY_REF])
11643         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
11644       else if (name == ansi_opname[(int) COMPONENT_REF]
11645                || name == ansi_opname[(int) MEMBER_REF])
11646         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
11647       else if (name == ansi_opname[(int) NEW_EXPR])
11648         TYPE_GETS_NEW (current_class_type) |= 1;
11649       else if (name == ansi_opname[(int) DELETE_EXPR])
11650         TYPE_GETS_DELETE (current_class_type) |= 1;
11651       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
11652         TYPE_GETS_NEW (current_class_type) |= 2;
11653       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
11654         TYPE_GETS_DELETE (current_class_type) |= 2;
11655     }
11656
11657   if (name == ansi_opname[(int) NEW_EXPR]
11658       || name == ansi_opname[(int) VEC_NEW_EXPR])
11659     {
11660       /* When the compiler encounters the definition of A::operator new, it
11661          doesn't look at the class declaration to find out if it's static.  */
11662       if (methodp)
11663         revert_static_member_fn (&decl, NULL, NULL);
11664      
11665       /* Take care of function decl if we had syntax errors.  */
11666       if (argtypes == NULL_TREE)
11667         TREE_TYPE (decl)
11668           = build_function_type (ptr_type_node,
11669                                  hash_tree_chain (integer_type_node,
11670                                                   void_list_node));
11671       else
11672         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11673     }
11674   else if (name == ansi_opname[(int) DELETE_EXPR]
11675            || name == ansi_opname[(int) VEC_DELETE_EXPR])
11676     {
11677       if (methodp)
11678         revert_static_member_fn (&decl, NULL, NULL);
11679      
11680       if (argtypes == NULL_TREE)
11681         TREE_TYPE (decl)
11682           = build_function_type (void_type_node,
11683                                  hash_tree_chain (ptr_type_node,
11684                                                   void_list_node));
11685       else
11686         {
11687           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11688
11689           if (! friendp && name == ansi_opname[(int) VEC_DELETE_EXPR]
11690               && (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
11691                   != void_list_node))
11692             TYPE_VEC_DELETE_TAKES_SIZE (current_class_type) = 1;
11693         }
11694     }
11695   else
11696     {
11697       /* An operator function must either be a non-static member function
11698          or have at least one parameter of a class, a reference to a class,
11699          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11700       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11701         {
11702           if (IDENTIFIER_TYPENAME_P (name)
11703               || name == ansi_opname[(int) CALL_EXPR]
11704               || name == ansi_opname[(int) MODIFY_EXPR]
11705               || name == ansi_opname[(int) COMPONENT_REF]
11706               || name == ansi_opname[(int) ARRAY_REF])
11707             cp_error ("`%D' must be a nonstatic member function", decl);
11708           else
11709             {
11710               tree p = argtypes;
11711
11712               if (DECL_STATIC_FUNCTION_P (decl))
11713                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
11714
11715               if (p)
11716                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
11717                   {
11718                     tree arg = TREE_VALUE (p);
11719                     if (TREE_CODE (arg) == REFERENCE_TYPE)
11720                       arg = TREE_TYPE (arg);
11721
11722                     /* This lets bad template code slip through.  */
11723                     if (IS_AGGR_TYPE (arg)
11724                         || TREE_CODE (arg) == ENUMERAL_TYPE
11725                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
11726                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11727                       goto foundaggr;
11728                   }
11729               cp_error
11730                 ("`%D' must have an argument of class or enumerated type",
11731                  decl);
11732             foundaggr:
11733               ;
11734             }
11735         }
11736       
11737       if (name == ansi_opname[(int) CALL_EXPR])
11738         return;                 /* No restrictions on args. */
11739
11740       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
11741         {
11742           tree t = TREE_TYPE (name);
11743           if (TREE_CODE (t) == VOID_TYPE)
11744             pedwarn ("void is not a valid type conversion operator");
11745           else if (! friendp)
11746             {
11747               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11748               const char *what = 0;
11749               if (ref)
11750                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11751
11752               if (t == current_class_type)
11753                 what = "the same type";
11754               /* Don't force t to be complete here.  */
11755               else if (IS_AGGR_TYPE (t)
11756                        && TYPE_SIZE (t)
11757                        && DERIVED_FROM_P (t, current_class_type))
11758                 what = "a base class";
11759
11760               if (what)
11761                 warning ("conversion to %s%s will never use a type conversion operator",
11762                          ref ? "a reference to " : "", what);
11763             }
11764         }
11765
11766       if (name == ansi_opname[(int) MODIFY_EXPR])
11767         {
11768           tree parmtype;
11769
11770           if (list_length (argtypes) != 3 && methodp)
11771             {
11772               cp_error ("`%D' must take exactly one argument", decl);
11773               return;
11774             }
11775           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
11776
11777           if (copy_assignment_arg_p (parmtype, virtualp)
11778               && ! friendp)
11779             {
11780               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
11781               if (TREE_CODE (parmtype) != REFERENCE_TYPE
11782                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
11783                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
11784             }
11785         }
11786       else if (name == ansi_opname[(int) COND_EXPR])
11787         {
11788           /* 13.4.0.3 */
11789           cp_error ("ANSI C++ prohibits overloading operator ?:");
11790         }         
11791       else if (ambi_op_p (name))
11792         {
11793           if (list_length (argtypes) == 2)
11794             /* prefix */;
11795           else if (list_length (argtypes) == 3)
11796             {
11797               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
11798                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11799                   && ! processing_template_decl
11800                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11801                 {
11802                   if (methodp)
11803                     cp_error ("postfix `%D' must take `int' as its argument",
11804                               decl);
11805                   else
11806                     cp_error
11807                       ("postfix `%D' must take `int' as its second argument",
11808                        decl);
11809                 }
11810             }
11811           else
11812             {
11813               if (methodp)
11814                 cp_error ("`%D' must take either zero or one argument", decl);
11815               else
11816                 cp_error ("`%D' must take either one or two arguments", decl);
11817             }
11818
11819           /* More Effective C++ rule 6.  */
11820           if (warn_ecpp
11821               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11822                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
11823             {
11824               tree arg = TREE_VALUE (argtypes);
11825               tree ret = TREE_TYPE (TREE_TYPE (decl));
11826               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11827                 arg = TREE_TYPE (arg);
11828               arg = TYPE_MAIN_VARIANT (arg);
11829               if (list_length (argtypes) == 2)
11830                 {
11831                   if (TREE_CODE (ret) != REFERENCE_TYPE
11832                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11833                                        arg))
11834                     cp_warning ("prefix `%D' should return `%T'", decl,
11835                                 build_reference_type (arg));
11836                 }
11837               else
11838                 {
11839                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11840                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
11841                 }
11842             }
11843         }
11844       else if (unary_op_p (name))
11845         {
11846           if (list_length (argtypes) != 2)
11847             {
11848               if (methodp)
11849                 cp_error ("`%D' must take `void'", decl);
11850               else
11851                 cp_error ("`%D' must take exactly one argument", decl);
11852             }
11853         }
11854       else /* if (binary_op_p (name)) */
11855         {
11856           if (list_length (argtypes) != 3)
11857             {
11858               if (methodp)
11859                 cp_error ("`%D' must take exactly one argument", decl);
11860               else
11861                 cp_error ("`%D' must take exactly two arguments", decl);
11862             }
11863
11864           /* More Effective C++ rule 7.  */
11865           if (warn_ecpp
11866               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
11867                   || name == ansi_opname [TRUTH_ORIF_EXPR]
11868                   || name == ansi_opname [COMPOUND_EXPR]))
11869             cp_warning ("user-defined `%D' always evaluates both arguments",
11870                         decl);
11871         }
11872
11873       /* Effective C++ rule 23.  */
11874       if (warn_ecpp
11875           && list_length (argtypes) == 3
11876           && (name == ansi_opname [PLUS_EXPR]
11877               || name == ansi_opname [MINUS_EXPR]
11878               || name == ansi_opname [TRUNC_DIV_EXPR]
11879               || name == ansi_opname [MULT_EXPR])
11880           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11881         cp_warning ("`%D' should return by value", decl);
11882
11883       /* 13.4.0.8 */
11884       if (argtypes)
11885         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
11886           if (TREE_PURPOSE (argtypes))
11887             {
11888               TREE_PURPOSE (argtypes) = NULL_TREE;
11889               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
11890                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
11891                 {
11892                   if (pedantic)
11893                     cp_pedwarn ("`%D' cannot have default arguments", decl);
11894                 }
11895               else
11896                 cp_error ("`%D' cannot have default arguments", decl);
11897             }
11898     }
11899 }
11900 \f
11901 static const char *
11902 tag_name (code)
11903      enum tag_types code;
11904 {
11905   switch (code)
11906     {
11907     case record_type:
11908       return "struct";
11909     case class_type:
11910       return "class";
11911     case union_type:
11912       return "union ";
11913     case enum_type:
11914       return "enum";
11915     default:
11916       my_friendly_abort (981122);
11917     }
11918 }
11919
11920 /* Get the struct, enum or union (CODE says which) with tag NAME.
11921    Define the tag as a forward-reference if it is not defined.
11922
11923    C++: If a class derivation is given, process it here, and report
11924    an error if multiple derivation declarations are not identical.
11925
11926    If this is a definition, come in through xref_tag and only look in
11927    the current frame for the name (since C++ allows new names in any
11928    scope.)  */
11929
11930 tree
11931 xref_tag (code_type_node, name, globalize)
11932      tree code_type_node;
11933      tree name;
11934      int globalize;
11935 {
11936   enum tag_types tag_code;
11937   enum tree_code code;
11938   int temp = 0;
11939   register tree ref, t;
11940   struct binding_level *b = current_binding_level;
11941   int got_type = 0;
11942   tree attributes = NULL_TREE;
11943   tree context = NULL_TREE;
11944
11945   /* If we are called from the parser, code_type_node will sometimes be a
11946      TREE_LIST.  This indicates that the user wrote
11947      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
11948      use them later.  */
11949   if (TREE_CODE (code_type_node) == TREE_LIST)
11950     {
11951       attributes = TREE_PURPOSE (code_type_node);
11952       code_type_node = TREE_VALUE (code_type_node);
11953     }
11954
11955   tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
11956   switch (tag_code)
11957     {
11958     case record_type:
11959     case class_type:
11960       code = RECORD_TYPE;
11961       break;
11962     case union_type:
11963       code = UNION_TYPE;
11964       break;
11965     case enum_type:
11966       code = ENUMERAL_TYPE;
11967       break;
11968     default:
11969       my_friendly_abort (18);
11970     }
11971
11972   /* If a cross reference is requested, look up the type
11973      already defined for this tag and return it.  */
11974   if (TREE_CODE_CLASS (TREE_CODE (name)) == 't')
11975     {
11976       t = name;
11977       name = TYPE_IDENTIFIER (t);
11978       got_type = 1;
11979     }
11980   else
11981     t = IDENTIFIER_TYPE_VALUE (name);
11982
11983   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
11984       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
11985     t = NULL_TREE;
11986
11987   if (! globalize)
11988     {
11989       /* If we know we are defining this tag, only look it up in
11990          this scope and don't try to find it as a type.  */
11991       ref = lookup_tag (code, name, b, 1);
11992     }
11993   else
11994     {
11995       if (t)
11996         {
11997           /* [dcl.type.elab] If the identifier resolves to a
11998              typedef-name or a template type-parameter, the
11999              elaborated-type-specifier is ill-formed.  */
12000           if (t != TYPE_MAIN_VARIANT (t)
12001               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12002             cp_pedwarn ("using typedef-name `%D' after `%s'",
12003                         TYPE_NAME (t), tag_name (tag_code));
12004           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12005             cp_error ("using template type parameter `%T' after `%s'",
12006                       t, tag_name (tag_code));
12007
12008           ref = t;
12009         }
12010       else
12011         ref = lookup_tag (code, name, b, 0);
12012           
12013       if (! ref)
12014         {
12015           /* Try finding it as a type declaration.  If that wins,
12016              use it.  */ 
12017           ref = lookup_name (name, 1);
12018
12019           if (ref != NULL_TREE
12020               && processing_template_decl
12021               && DECL_CLASS_TEMPLATE_P (ref)
12022               && template_class_depth (current_class_type) == 0)
12023             /* Since GLOBALIZE is true, we're declaring a global
12024                template, so we want this type.  */
12025             ref = DECL_RESULT (ref);
12026
12027           if (ref && TREE_CODE (ref) == TYPE_DECL
12028               && TREE_CODE (TREE_TYPE (ref)) == code)
12029             ref = TREE_TYPE (ref);
12030           else
12031             ref = NULL_TREE;
12032         }
12033
12034       if (ref && current_class_type 
12035           && template_class_depth (current_class_type) 
12036           && PROCESSING_REAL_TEMPLATE_DECL_P ()) 
12037         {
12038           /* Since GLOBALIZE is non-zero, we are not looking at a
12039              definition of this tag.  Since, in addition, we are currently
12040              processing a (member) template declaration of a template
12041              class, we must be very careful; consider:
12042
12043                template <class X>
12044                struct S1
12045
12046                template <class U>
12047                struct S2
12048                { template <class V>
12049                friend struct S1; };
12050
12051              Here, the S2::S1 declaration should not be confused with the
12052              outer declaration.  In particular, the inner version should
12053              have a template parameter of level 2, not level 1.  This
12054              would be particularly important if the member declaration
12055              were instead:
12056
12057                template <class V = U> friend struct S1;
12058
12059              say, when we should tsubst into `U' when instantiating
12060              S2.  On the other hand, when presented with:
12061
12062                  template <class T>
12063                  struct S1 {
12064                    template <class U>
12065                    struct S2 {};
12066                    template <class U>
12067                    friend struct S2;
12068                  };
12069
12070               we must find the inner binding eventually.  We
12071               accomplish this by making sure that the new type we
12072               create to represent this declaration has the right
12073               TYPE_CONTEXT.  */
12074           context = TYPE_CONTEXT (ref);
12075           ref = NULL_TREE;
12076         }
12077     }
12078
12079   push_obstacks_nochange ();
12080
12081   if (! ref)
12082     {
12083       /* If no such tag is yet defined, create a forward-reference node
12084          and record it as the "definition".
12085          When a real declaration of this type is found,
12086          the forward-reference will be altered into a real type.  */
12087
12088       /* In C++, since these migrate into the global scope, we must
12089          build them on the permanent obstack.  */
12090
12091       temp = allocation_temporary_p ();
12092       if (temp)
12093         end_temporary_allocation ();
12094
12095       if (code == ENUMERAL_TYPE)
12096         {
12097           cp_error ("use of enum `%#D' without previous declaration", name);
12098
12099           ref = make_node (ENUMERAL_TYPE);
12100
12101           /* Give the type a default layout like unsigned int
12102              to avoid crashing if it does not get defined.  */
12103           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12104           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12105           TREE_UNSIGNED (ref) = 1;
12106           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12107           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12108           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12109
12110           /* Enable us to recognize when a type is created in class context.
12111              To do nested classes correctly, this should probably be cleared
12112              out when we leave this classes scope.  Currently this in only
12113              done in `start_enum'.  */
12114
12115           pushtag (name, ref, globalize);
12116         }
12117       else
12118         {
12119           struct binding_level *old_b = class_binding_level;
12120
12121           ref = make_lang_type (code);
12122           TYPE_CONTEXT (ref) = context;
12123
12124 #ifdef NONNESTED_CLASSES
12125           /* Class types don't nest the way enums do.  */
12126           class_binding_level = (struct binding_level *)0;
12127 #endif
12128           pushtag (name, ref, globalize);
12129           class_binding_level = old_b;
12130         }
12131     }
12132   else
12133     {
12134       /* If it no longer looks like a nested type, make sure it's
12135          in global scope.  
12136          If it is not an IDENTIFIER, this is not a declaration */
12137       if (b->namespace_p && !class_binding_level
12138           && TREE_CODE (name) == IDENTIFIER_NODE
12139           && IDENTIFIER_NAMESPACE_VALUE (name) == NULL_TREE)
12140         SET_IDENTIFIER_NAMESPACE_VALUE (name, TYPE_NAME (ref));
12141
12142       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12143         redeclare_class_template (ref, current_template_parms);
12144     }
12145
12146   /* Until the type is defined, tentatively accept whatever
12147      structure tag the user hands us.  */
12148   if (TYPE_SIZE (ref) == NULL_TREE
12149       && ref != current_class_type
12150       /* Have to check this, in case we have contradictory tag info.  */
12151       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12152     {
12153       if (tag_code == class_type)
12154         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12155       else if (tag_code == record_type)
12156         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12157     }
12158
12159   pop_obstacks ();
12160
12161   TREE_TYPE (ref) = attributes;
12162
12163   return ref;
12164 }
12165
12166 tree
12167 xref_tag_from_type (old, id, globalize)
12168      tree old, id;
12169      int globalize;
12170 {
12171   tree code_type_node;
12172
12173   if (TREE_CODE (old) == RECORD_TYPE)
12174     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12175                       ? class_type_node : record_type_node);
12176   else
12177     code_type_node = union_type_node;
12178
12179   if (id == NULL_TREE)
12180     id = TYPE_IDENTIFIER (old);
12181
12182   return xref_tag (code_type_node, id, globalize);
12183 }
12184
12185 /* REF is a type (named NAME), for which we have just seen some
12186    baseclasses.  BINFO is a list of those baseclasses; the
12187    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12188    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12189    struct, or union.  */
12190
12191 void
12192 xref_basetypes (code_type_node, name, ref, binfo)
12193      tree code_type_node;
12194      tree name, ref;
12195      tree binfo;
12196 {
12197   /* In the declaration `A : X, Y, ... Z' we mark all the types
12198      (A, X, Y, ..., Z) so we can check for duplicates.  */
12199   tree binfos;
12200   tree base;
12201
12202   int i, len;
12203   enum tag_types tag_code = (enum tag_types) TREE_INT_CST_LOW (code_type_node);
12204
12205   if (tag_code == union_type)
12206     {
12207       cp_error ("derived union `%T' invalid", ref);
12208       return;
12209     }
12210
12211   len = list_length (binfo);
12212   push_obstacks (TYPE_OBSTACK (ref), TYPE_OBSTACK (ref));
12213
12214   /* First, make sure that any templates in base-classes are
12215      instantiated.  This ensures that if we call ourselves recursively
12216      we do not get confused about which classes are marked and which
12217      are not.  */
12218   for (base = binfo; base; base = TREE_CHAIN (base))
12219     complete_type (TREE_VALUE (base));
12220
12221   SET_CLASSTYPE_MARKED (ref);
12222   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12223
12224   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12225     {
12226       /* The base of a derived struct is public by default.  */
12227       int via_public
12228         = (TREE_PURPOSE (binfo) == access_public_node
12229            || TREE_PURPOSE (binfo) == access_public_virtual_node
12230            || (tag_code != class_type
12231                && (TREE_PURPOSE (binfo) == access_default_node
12232                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12233       int via_protected
12234         = (TREE_PURPOSE (binfo) == access_protected_node
12235            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12236       int via_virtual
12237         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12238            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12239            || TREE_PURPOSE (binfo) == access_public_virtual_node
12240            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12241       tree basetype = TREE_VALUE (binfo);
12242       tree base_binfo;
12243
12244       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12245         basetype = TREE_TYPE (basetype);
12246       if (!basetype
12247           || (TREE_CODE (basetype) != RECORD_TYPE
12248               && TREE_CODE (basetype) != TYPENAME_TYPE
12249               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12250               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12251         {
12252           cp_error ("base type `%T' fails to be a struct or class type",
12253                     TREE_VALUE (binfo));
12254           continue;
12255         }
12256
12257       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12258
12259       /* This code replaces similar code in layout_basetypes.
12260          We put the complete_type first for implicit `typename'.  */
12261       if (TYPE_SIZE (basetype) == NULL_TREE
12262           && ! (current_template_parms && uses_template_parms (basetype)))
12263         {
12264           cp_error ("base class `%T' has incomplete type", basetype);
12265           continue;
12266         }
12267       else
12268         {
12269           if (CLASSTYPE_MARKED (basetype))
12270             {
12271               if (basetype == ref)
12272                 cp_error ("recursive type `%T' undefined", basetype);
12273               else
12274                 cp_error ("duplicate base type `%T' invalid", basetype);
12275               continue;
12276             }
12277
12278           if (TYPE_FOR_JAVA (basetype)
12279               && (current_lang_stack 
12280                   == &VARRAY_TREE (current_lang_base, 0)))
12281             TYPE_FOR_JAVA (ref) = 1;
12282
12283           /* Note that the BINFO records which describe individual
12284              inheritances are *not* shared in the lattice!  They
12285              cannot be shared because a given baseclass may be
12286              inherited with different `accessibility' by different
12287              derived classes.  (Each BINFO record describing an
12288              individual inheritance contains flags which say what
12289              the `accessibility' of that particular inheritance is.)  */
12290   
12291           base_binfo 
12292             = make_binfo (integer_zero_node, basetype,
12293                           CLASS_TYPE_P (basetype)
12294                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12295                           CLASS_TYPE_P (basetype)
12296                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12297  
12298           TREE_VEC_ELT (binfos, i) = base_binfo;
12299           TREE_VIA_PUBLIC (base_binfo) = via_public;
12300           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12301           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12302           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12303
12304           /* We need to unshare the binfos now so that lookups during class
12305              definition work.  */
12306           unshare_base_binfos (base_binfo);
12307
12308           SET_CLASSTYPE_MARKED (basetype);
12309
12310           /* We are free to modify these bits because they are meaningless
12311              at top level, and BASETYPE is a top-level type.  */
12312           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12313             {
12314               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12315               TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12316             }
12317
12318           if (CLASS_TYPE_P (basetype))
12319             {
12320               TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
12321               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12322             }
12323
12324           i += 1;
12325         }
12326     }
12327   if (i)
12328     TREE_VEC_LENGTH (binfos) = i;
12329   else
12330     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12331
12332   if (i > 1)
12333     TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12334   else if (i == 1)
12335     {
12336       tree basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, 0));
12337       
12338       if (CLASS_TYPE_P (basetype))
12339         TYPE_USES_MULTIPLE_INHERITANCE (ref)
12340           = TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12341     }
12342
12343   if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
12344     TYPE_USES_COMPLEX_INHERITANCE (ref) = 1;
12345
12346   /* Unmark all the types.  */
12347   while (--i >= 0)
12348     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12349   CLEAR_CLASSTYPE_MARKED (ref);
12350
12351   /* Now that we know all the base-classes, set up the list of virtual
12352      bases.  */
12353   CLASSTYPE_VBASECLASSES (ref) = get_vbase_types (ref);
12354
12355   pop_obstacks ();
12356 }
12357   
12358 \f
12359 /* Begin compiling the definition of an enumeration type.
12360    NAME is its name (or null if anonymous).
12361    Returns the type object, as yet incomplete.
12362    Also records info about it so that build_enumerator
12363    may be used to declare the individual values as they are read.  */
12364
12365 tree
12366 start_enum (name)
12367      tree name;
12368 {
12369   register tree enumtype = NULL_TREE;
12370   struct binding_level *b = current_binding_level;
12371
12372   /* We are wasting space here and putting these on the permanent_obstack so
12373      that typeid(local enum) will work correctly. */
12374   push_obstacks (&permanent_obstack, &permanent_obstack);
12375
12376   /* If this is the real definition for a previous forward reference,
12377      fill in the contents in the same object that used to be the
12378      forward reference.  */
12379
12380   if (name != NULL_TREE)
12381     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12382
12383   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12384     {
12385       cp_error ("multiple definition of `%#T'", enumtype);
12386       cp_error_at ("previous definition here", enumtype);
12387     }
12388   else
12389     {
12390       enumtype = make_node (ENUMERAL_TYPE);
12391       pushtag (name, enumtype, 0);
12392     }
12393
12394   if (current_class_type)
12395     TREE_ADDRESSABLE (b->tags) = 1;
12396
12397   /* We don't copy this value because build_enumerator needs to do it.  */
12398   enum_next_value = integer_zero_node;
12399   enum_overflow = 0;
12400
12401   GNU_xref_decl (current_function_decl, enumtype);
12402   return enumtype;
12403 }
12404
12405 /* After processing and defining all the values of an enumeration type,
12406    install their decls in the enumeration type and finish it off.
12407    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12408    Returns ENUMTYPE.  */
12409
12410 tree
12411 finish_enum (enumtype)
12412      tree enumtype;
12413 {
12414   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12415   /* Calculate the maximum value of any enumerator in this type.  */
12416
12417   tree values = TYPE_VALUES (enumtype);
12418   if (values)
12419     {
12420       tree pair;
12421
12422       for (pair = values; pair; pair = TREE_CHAIN (pair))
12423         {
12424           tree decl;
12425           tree value;
12426
12427           /* The TREE_VALUE is a CONST_DECL for this enumeration
12428              constant.  */
12429           decl = TREE_VALUE (pair);
12430
12431           /* The DECL_INITIAL will be NULL if we are processing a
12432              template declaration and this enumeration constant had no
12433              explicit initializer.  */
12434           value = DECL_INITIAL (decl);
12435           if (value && !processing_template_decl)
12436             {
12437               /* Set the TREE_TYPE for the VALUE as well.  That's so
12438                  that when we call decl_constant_value we get an
12439                  entity of the right type (but with the constant
12440                  value).  Since we shouldn't ever call
12441                  decl_constant_value on a template type, there's no
12442                  reason to do that when processing_template_decl.
12443                  And, if the expression is something like a
12444                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12445                  wreak havoc on the intended type of the expression.  
12446
12447                  Of course, there's also no point in trying to compute
12448                  minimum or maximum values if we're in a template.  */
12449               TREE_TYPE (value) = enumtype;
12450
12451               if (!minnode)
12452                 minnode = maxnode = value;
12453               else if (tree_int_cst_lt (maxnode, value))
12454                 maxnode = value;
12455               else if (tree_int_cst_lt (value, minnode))
12456                 minnode = value;
12457             }
12458
12459           if (processing_template_decl) 
12460             /* If this is just a template, leave the CONST_DECL
12461                alone.  That way tsubst_copy will find CONST_DECLs for
12462                CONST_DECLs, and not INTEGER_CSTs.  */
12463             ;
12464           else
12465             /* In the list we're building up, we want the enumeration
12466                values, not the CONST_DECLs.  */
12467             TREE_VALUE (pair) = value;
12468         }
12469     }
12470   else
12471     maxnode = minnode = integer_zero_node;
12472
12473   TYPE_VALUES (enumtype) = nreverse (values);
12474
12475   if (processing_template_decl)
12476     {
12477       tree scope = current_scope ();
12478       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12479         add_tree (build_min (TAG_DEFN, enumtype));
12480     }
12481   else
12482     {
12483       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12484       int lowprec = min_precision (minnode, unsignedp);
12485       int highprec = min_precision (maxnode, unsignedp);
12486       int precision = MAX (lowprec, highprec);
12487       tree tem;
12488
12489       TYPE_SIZE (enumtype) = NULL_TREE;
12490
12491       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12492
12493       TYPE_PRECISION (enumtype) = precision;
12494       if (unsignedp)
12495         fixup_unsigned_type (enumtype);
12496       else
12497         fixup_signed_type (enumtype);
12498
12499       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12500         /* Use the width of the narrowest normal C type which is wide
12501            enough.  */ 
12502         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12503                                                     (precision, 1));
12504       else
12505         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12506
12507       TYPE_SIZE (enumtype) = 0;
12508       layout_type (enumtype);
12509     
12510       /* Fix up all variant types of this enum type.  */
12511       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12512            tem = TYPE_NEXT_VARIANT (tem))
12513         {
12514           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12515           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12516           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12517           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12518           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12519           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12520           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12521           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12522           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12523         }
12524
12525       /* Finish debugging output for this type.  */
12526       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12527     }
12528
12529   /* In start_enum we pushed obstacks.  Here, we must pop them.  */
12530   pop_obstacks ();
12531
12532   return enumtype;
12533 }
12534
12535 /* Build and install a CONST_DECL for an enumeration constant of the
12536    enumeration type TYPE whose NAME and VALUE (if any) are provided.
12537    Assignment of sequential values by default is handled here.  */
12538
12539 tree
12540 build_enumerator (name, value, type)
12541      tree name;
12542      tree value;
12543      tree type;
12544 {
12545   tree decl, result;
12546   tree context;
12547
12548   /* Remove no-op casts from the value.  */
12549   if (value)
12550     STRIP_TYPE_NOPS (value);
12551
12552  if (! processing_template_decl)
12553    {
12554      /* Validate and default VALUE.  */
12555      if (value != NULL_TREE)
12556        {
12557          if (TREE_READONLY_DECL_P (value))
12558            value = decl_constant_value (value);
12559
12560          if (TREE_CODE (value) == INTEGER_CST)
12561            {
12562              value = default_conversion (value);
12563              constant_expression_warning (value);
12564            }
12565          else
12566            {
12567              cp_error ("enumerator value for `%D' not integer constant", name);
12568              value = NULL_TREE;
12569            }
12570        }
12571
12572      /* Default based on previous value.  */
12573      if (value == NULL_TREE && ! processing_template_decl)
12574        {
12575          value = enum_next_value;
12576          if (enum_overflow)
12577            cp_error ("overflow in enumeration values at `%D'", name);
12578        }
12579
12580      /* Remove no-op casts from the value.  */
12581      if (value)
12582        STRIP_TYPE_NOPS (value);
12583 #if 0
12584      /* To fix MAX_VAL enum consts. (bkoz)  */
12585      TREE_TYPE (value) = integer_type_node;
12586 #endif
12587    }
12588
12589  /* We always have to copy here; not all INTEGER_CSTs are unshared.
12590     Even in other cases, we will later (in finish_enum) be setting the
12591     type of VALUE.  */
12592  if (value != NULL_TREE)
12593    value = copy_node (value);
12594
12595   /* C++ associates enums with global, function, or class declarations.  */
12596  
12597  context = current_scope ();
12598  if (context && context == current_class_type)
12599    /* This enum declaration is local to the class.  */
12600    decl = build_lang_decl (CONST_DECL, name, type);
12601  else
12602    /* It's a global enum, or it's local to a function.  (Note local to
12603       a function could mean local to a class method.  */
12604    decl = build_decl (CONST_DECL, name, type);
12605
12606  DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12607  DECL_INITIAL (decl) = value;
12608  TREE_READONLY (decl) = 1;
12609
12610  if (context && context == current_class_type)
12611    /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12612       on the TYPE_FIELDS list for `S'.  (That's so that you can say
12613       things like `S::i' later.)  */
12614    finish_member_declaration (decl);
12615  else
12616    {
12617      pushdecl (decl);
12618      GNU_xref_decl (current_function_decl, decl);
12619    }
12620
12621  if (! processing_template_decl)
12622    {
12623      /* Set basis for default for next value.  */
12624      enum_next_value = build_binary_op_nodefault (PLUS_EXPR, value,
12625                                                   integer_one_node, PLUS_EXPR);
12626      enum_overflow = tree_int_cst_lt (enum_next_value, value);
12627    }
12628
12629   result = tree_cons (name, decl, NULL_TREE);
12630   return result;
12631 }
12632
12633 \f
12634 static int function_depth;
12635
12636 /* We're defining DECL.  Make sure that it's type is OK.  */
12637
12638 static void
12639 check_function_type (decl)
12640      tree decl;
12641 {
12642   tree fntype = TREE_TYPE (decl);
12643
12644   /* In a function definition, arg types must be complete.  */
12645   require_complete_types_for_parms (current_function_parms);
12646
12647   if (TYPE_SIZE (complete_type (TREE_TYPE (fntype))) == NULL_TREE)
12648     {
12649       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
12650
12651       /* Make it return void instead, but don't change the
12652          type of the DECL_RESULT, in case we have a named return value.  */
12653       if (TREE_CODE (fntype) == METHOD_TYPE)
12654         {
12655           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
12656           TREE_TYPE (decl)
12657             = build_cplus_method_type (ctype,
12658                                        void_type_node,
12659                                        FUNCTION_ARG_CHAIN (decl));
12660         }
12661       else
12662         TREE_TYPE (decl)
12663           = build_function_type (void_type_node,
12664                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
12665       TREE_TYPE (decl) 
12666         = build_exception_variant (fntype,
12667                                    TYPE_RAISES_EXCEPTIONS (fntype));
12668     }
12669   else
12670     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12671 }
12672
12673 /* Create the FUNCTION_DECL for a function definition.
12674    DECLSPECS and DECLARATOR are the parts of the declaration;
12675    they describe the function's name and the type it returns,
12676    but twisted together in a fashion that parallels the syntax of C.
12677
12678    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12679    DECLARATOR is really the DECL for the function we are about to
12680    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12681    indicating that the function is an inline defined in-class, and
12682    SF_EXPAND indicating that we should generate RTL for this
12683    function.  
12684    
12685    This function creates a binding context for the function body
12686    as well as setting up the FUNCTION_DECL in current_function_decl.
12687
12688    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12689    (it defines a datum instead), we return 0, which tells
12690    yyparse to report a parse error.
12691
12692    For C++, we must first check whether that datum makes any sense.
12693    For example, "class A local_a(1,2);" means that variable local_a
12694    is an aggregate of type A, which should have a constructor
12695    applied to it with the argument list [1, 2].  */
12696
12697 int
12698 start_function (declspecs, declarator, attrs, flags)
12699      tree declspecs, declarator, attrs;
12700      int flags;
12701 {
12702   tree decl1;
12703   tree ctype = NULL_TREE;
12704   tree fntype;
12705   tree restype;
12706   extern int have_extern_spec;
12707   extern int used_extern_spec;
12708   int doing_friend = 0;
12709   struct binding_level *bl;
12710
12711   /* Sanity check.  */
12712   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
12713   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
12714
12715   /* This should only be done once on the top most decl.  */
12716   if (have_extern_spec && !used_extern_spec)
12717     {
12718       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
12719       used_extern_spec = 1;
12720     }
12721
12722   if (flags & SF_PRE_PARSED)
12723     {
12724       decl1 = declarator;
12725
12726       fntype = TREE_TYPE (decl1);
12727       if (TREE_CODE (fntype) == METHOD_TYPE)
12728         ctype = TYPE_METHOD_BASETYPE (fntype);
12729
12730       /* ANSI C++ June 5 1992 WP 11.4.5.  A friend function defined in a
12731          class is in the (lexical) scope of the class in which it is
12732          defined.  */
12733       if (!ctype && DECL_FRIEND_P (decl1))
12734         {
12735           ctype = DECL_CLASS_CONTEXT (decl1);
12736
12737           /* CTYPE could be null here if we're dealing with a template;
12738              for example, `inline friend float foo()' inside a template
12739              will have no CTYPE set.  */
12740           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12741             ctype = NULL_TREE;
12742           else
12743             doing_friend = 1;
12744         }
12745
12746       last_function_parms = DECL_ARGUMENTS (decl1);
12747       last_function_parm_tags = NULL_TREE;
12748     }
12749   else
12750     {
12751       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
12752       /* If the declarator is not suitable for a function definition,
12753          cause a syntax error.  */
12754       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
12755
12756       fntype = TREE_TYPE (decl1);
12757
12758       restype = TREE_TYPE (fntype);
12759       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
12760         {
12761           cp_error ("semicolon missing after declaration of `%#T'", restype);
12762           shadow_tag (build_expr_list (NULL_TREE, restype));
12763           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
12764           if (TREE_CODE (fntype) == FUNCTION_TYPE)
12765             fntype = build_function_type (integer_type_node,
12766                                           TYPE_ARG_TYPES (fntype));
12767           else
12768             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
12769                                               integer_type_node,
12770                                               TYPE_ARG_TYPES (fntype));
12771           TREE_TYPE (decl1) = fntype;
12772         }
12773
12774       if (TREE_CODE (fntype) == METHOD_TYPE)
12775         ctype = TYPE_METHOD_BASETYPE (fntype);
12776       else if (DECL_MAIN_P (decl1))
12777         {
12778           /* If this doesn't return integer_type, complain.  */
12779           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
12780             {
12781               if (pedantic || warn_return_type)
12782                 pedwarn ("return type for `main' changed to `int'");
12783               TREE_TYPE (decl1) = fntype = default_function_type;
12784             }
12785         }
12786     }
12787   
12788   /* Sometimes we don't notice that a function is a static member, and
12789      build a METHOD_TYPE for it.  Fix that up now.  */
12790   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12791       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
12792     {
12793       revert_static_member_fn (&decl1, NULL, NULL);
12794       last_function_parms = TREE_CHAIN (last_function_parms);
12795       ctype = NULL_TREE;
12796     }
12797
12798   /* Warn if function was previously implicitly declared
12799      (but not if we warned then).  */
12800   if (! warn_implicit
12801       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
12802     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
12803
12804   /* Set up current_class_type, and enter the scope of the class, if
12805      appropriate.  */
12806   if (ctype)
12807     push_nested_class (ctype, 1);
12808   else if (DECL_STATIC_FUNCTION_P (decl1))
12809     push_nested_class (DECL_CONTEXT (decl1), 2);
12810
12811   /* Now that we have entered the scope of the class, we must restore
12812      the bindings for any template parameters surrounding DECL1, if it
12813      is an inline member template.  (Order is important; consider the
12814      case where a template parameter has the same name as a field of
12815      the class.)  It is not until after this point that
12816      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12817   if (flags & SF_INCLASS_INLINE)
12818     maybe_begin_member_template_processing (decl1);
12819
12820   /* Effective C++ rule 15.  See also c_expand_return.  */
12821   if (warn_ecpp
12822       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
12823       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12824     cp_warning ("`operator=' should return a reference to `*this'");
12825
12826   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12827      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12828   if (!DECL_INITIAL (decl1))
12829     DECL_INITIAL (decl1) = error_mark_node;
12830
12831 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
12832   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
12833 #endif
12834   
12835   /* This function exists in static storage.
12836      (This does not mean `static' in the C sense!)  */
12837   TREE_STATIC (decl1) = 1;
12838
12839   /* We must call push_template_decl after current_class_type is set
12840      up.  (If we are processing inline definitions after exiting a
12841      class scope, current_class_type will be NULL_TREE until set above
12842      by push_nested_class.)  */
12843   if (processing_template_decl)
12844     decl1 = push_template_decl (decl1);
12845
12846   /* We are now in the scope of the function being defined.  */
12847   current_function_decl = decl1;
12848
12849   /* Save the parm names or decls from this function's declarator
12850      where store_parm_decls will find them.  */
12851   current_function_parms = last_function_parms;
12852   current_function_parm_tags = last_function_parm_tags;
12853
12854   /* Make sure the parameter and return types are reasonable.  When
12855      you declare a function, these types can be incomplete, but they
12856      must be complete when you define the function.  */
12857   if (! processing_template_decl)
12858     check_function_type (decl1);
12859
12860   /* Build the return declaration for the function.  */
12861   restype = TREE_TYPE (fntype);
12862   if (!processing_template_decl)
12863     {
12864       if (!DECL_RESULT (decl1))
12865         {
12866           DECL_RESULT (decl1)
12867             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
12868           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype), 
12869                                       DECL_RESULT (decl1)); 
12870         }
12871     }
12872   else
12873     /* Just use `void'.  Nobody will ever look at this anyhow.  */
12874     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
12875
12876   /* Initialize RTL machinery.  We cannot do this until
12877      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12878      even when processing a template; this is how we get
12879      CURRENT_FUNCTION set up, and our per-function variables
12880      initialized.  */
12881   bl = current_binding_level;
12882   init_function_start (decl1, input_filename, lineno);
12883   current_binding_level = bl;
12884   expanding_p = (flags & SF_EXPAND) != 0;
12885
12886   /* Even though we're inside a function body, we still don't want to
12887      call expand_expr to calculate the size of a variable-sized array.
12888      We haven't necessarily assigned RTL to all variables yet, so it's
12889      not safe to try to expand expressions involving them.  */
12890   immediate_size_expand = 0;
12891   current_function->x_dont_save_pending_sizes_p = 1;
12892
12893   /* Let the user know we're compiling this function.  */
12894   if (processing_template_decl || !building_stmt_tree ())
12895     announce_function (decl1);
12896
12897   /* Record the decl so that the function name is defined.
12898      If we already have a decl for this name, and it is a FUNCTION_DECL,
12899      use the old decl.  */
12900   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12901     {
12902       /* A specialization is not used to guide overload resolution.  */
12903       if ((flag_guiding_decls 
12904            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
12905           && ! DECL_FUNCTION_MEMBER_P (decl1))
12906         decl1 = pushdecl (decl1);
12907       else
12908         {
12909           /* We need to set the DECL_CONTEXT. */
12910           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12911             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12912           /* And make sure we have enough default args.  */
12913           check_default_args (decl1);
12914         }
12915       DECL_MAIN_VARIANT (decl1) = decl1;
12916       fntype = TREE_TYPE (decl1);
12917     }
12918
12919   /* Reset these in case the call to pushdecl changed them.  */
12920   current_function_decl = decl1;
12921   current_function->decl = decl1;
12922
12923   /* Initialize the per-function data.  */
12924   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
12925     {
12926       /* If we already parsed this function, and we're just expanding it
12927          now, restore saved state.  */
12928       struct binding_level *bl = current_binding_level;
12929       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
12930       current_binding_level = bl;
12931
12932       /* This function is being processed in whole-function mode; we
12933          already did semantic analysis.  */
12934       current_function->x_whole_function_mode_p = 1;
12935
12936       /* If we decided that we didn't want to inline this function,
12937          make sure the back-end knows that.  */
12938       if (!current_function_cannot_inline)
12939         current_function_cannot_inline = cp_function_chain->cannot_inline;
12940
12941       /* We don't need the saved data anymore.  */
12942       free (DECL_SAVED_FUNCTION_DATA (decl1));
12943       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12944     }
12945   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12946     {
12947       /* We know that this was set up by `grokclassfn'.  We do not
12948          wait until `store_parm_decls', since evil parse errors may
12949          never get us to that point.  Here we keep the consistency
12950          between `current_class_type' and `current_class_ptr'.  */
12951       tree t = DECL_ARGUMENTS (decl1);
12952               
12953       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL, 
12954                           162);
12955       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
12956                           19990811);
12957           
12958       cp_function_chain->x_current_class_ref 
12959         = build_indirect_ref (t, NULL_PTR);
12960       cp_function_chain->x_current_class_ptr = t;
12961
12962       if (DECL_DESTRUCTOR_P (decl1))
12963         current_in_charge_parm = TREE_CHAIN (t);
12964     }
12965
12966   if (DECL_INTERFACE_KNOWN (decl1))
12967     {
12968       tree ctx = hack_decl_function_context (decl1);
12969
12970       if (DECL_NOT_REALLY_EXTERN (decl1))
12971         DECL_EXTERNAL (decl1) = 0;
12972
12973       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx) 
12974           && TREE_PUBLIC (ctx))
12975         /* This is a function in a local class in an extern inline
12976            function.  */
12977         comdat_linkage (decl1);
12978     }
12979   /* If this function belongs to an interface, it is public.
12980      If it belongs to someone else's interface, it is also external.
12981      This only affects inlines and template instantiations.  */
12982   else if (interface_unknown == 0
12983            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
12984                || flag_alt_external_templates))
12985     {
12986       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
12987           || processing_template_decl)
12988         {
12989           DECL_EXTERNAL (decl1)
12990             = (interface_only
12991                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
12992                    && !DECL_VINDEX (decl1)));
12993
12994           /* For WIN32 we also want to put these in linkonce sections.  */
12995           maybe_make_one_only (decl1);
12996         }
12997       else
12998         DECL_EXTERNAL (decl1) = 0;
12999       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13000       DECL_INTERFACE_KNOWN (decl1) = 1;
13001     }
13002   else if (interface_unknown && interface_only
13003            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13004                || flag_alt_external_templates))
13005     {
13006       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13007          interface, we will have interface_only set but not
13008          interface_known.  In that case, we don't want to use the normal
13009          heuristics because someone will supply a #pragma implementation
13010          elsewhere, and deducing it here would produce a conflict.  */
13011       comdat_linkage (decl1);
13012       DECL_EXTERNAL (decl1) = 0;
13013       DECL_INTERFACE_KNOWN (decl1) = 1;
13014       DECL_DEFER_OUTPUT (decl1) = 1;
13015     }
13016   else
13017     {
13018       /* This is a definition, not a reference.
13019          So clear DECL_EXTERNAL.  */
13020       DECL_EXTERNAL (decl1) = 0;
13021
13022       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13023           && ! DECL_INTERFACE_KNOWN (decl1)
13024           /* Don't try to defer nested functions for now.  */
13025           && ! hack_decl_function_context (decl1))
13026         DECL_DEFER_OUTPUT (decl1) = 1;
13027       else
13028         DECL_INTERFACE_KNOWN (decl1) = 1;
13029     }
13030
13031   if (doing_semantic_analysis_p ())
13032     {
13033       pushlevel (0);
13034       current_binding_level->parm_flag = 1;
13035     }
13036
13037   if (attrs)
13038     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13039   
13040   if (!building_stmt_tree ())
13041     {
13042       GNU_xref_function (decl1, current_function_parms);
13043       make_function_rtl (decl1);
13044     }
13045
13046   /* Promote the value to int before returning it.  */
13047   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13048     restype = type_promotes_to (restype);
13049
13050   /* If this fcn was already referenced via a block-scope `extern' decl
13051      (or an implicit decl), propagate certain information about the usage.  */
13052   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13053     TREE_ADDRESSABLE (decl1) = 1;
13054
13055   if (DECL_RESULT (decl1) == NULL_TREE)
13056     {
13057       DECL_RESULT (decl1)
13058         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13059       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13060       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13061     }
13062
13063   /* Allocate further tree nodes temporarily during compilation
13064      of this function only.  Tiemann moved up here from bottom of fn.  */
13065   /* If this is a nested function, then we must continue to allocate RTL
13066      on the permanent obstack in case we need to inline it later.  */
13067   if (! hack_decl_function_context (decl1))
13068     temporary_allocation ();
13069   
13070   /* Make sure that we always have a momntary obstack while we're in a
13071      function body.  */
13072   push_momentary ();
13073
13074   if (building_stmt_tree ())
13075     begin_stmt_tree (decl1);
13076
13077   ++function_depth;
13078
13079   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl1))
13080       && DECL_LANGUAGE (decl1) == lang_cplusplus)
13081     dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13082   else if (DECL_CONSTRUCTOR_P (decl1))
13083     ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13084
13085   return 1;
13086 }
13087 \f
13088 /* Called after store_parm_decls for a function-try-block.  We need to update
13089    last_parm_cleanup_insn so that the base initializers for a constructor
13090    are run within this block, not before it.  */
13091
13092 void
13093 expand_start_early_try_stmts ()
13094 {
13095   expand_start_try_stmts ();
13096   last_parm_cleanup_insn = get_last_insn ();
13097 }
13098
13099 /* Store the parameter declarations into the current function declaration.
13100    This is called after parsing the parameter declarations, before
13101    digesting the body of the function.
13102
13103    Also install to binding contour return value identifier, if any.  */
13104
13105 void
13106 store_parm_decls ()
13107 {
13108   register tree fndecl = current_function_decl;
13109   register tree parm;
13110   int parms_have_cleanups = 0;
13111   tree cleanups = NULL_TREE;
13112
13113   /* This is a list of types declared among parms in a prototype.  */
13114   tree parmtags = current_function_parm_tags;
13115
13116   /* This is a chain of any other decls that came in among the parm
13117      declarations.  If a parm is declared with  enum {foo, bar} x;
13118      then CONST_DECLs for foo and bar are put here.  */
13119   tree nonparms = NULL_TREE;
13120
13121   /* Create a binding level for the parms.  */
13122   if (!building_stmt_tree ())
13123     expand_start_bindings (2);
13124
13125   if (current_function_parms)
13126     {
13127       /* This case is when the function was defined with an ANSI prototype.
13128          The parms already have decls, so we need not do anything here
13129          except record them as in effect
13130          and complain if any redundant old-style parm decls were written.  */
13131
13132       tree specparms = current_function_parms;
13133       tree next;
13134
13135       if (doing_semantic_analysis_p ())
13136         {
13137           /* Must clear this because it might contain TYPE_DECLs declared
13138              at class level.  */
13139           storedecls (NULL_TREE);
13140
13141           /* If we're doing semantic analysis, then we'll call pushdecl
13142              for each of these.  We must do them in reverse order so that
13143              they end in the correct forward order.  */
13144           specparms = nreverse (specparms);
13145         }
13146
13147       for (parm = specparms; parm; parm = next)
13148         {
13149           next = TREE_CHAIN (parm);
13150           if (TREE_CODE (parm) == PARM_DECL)
13151             {
13152               tree cleanup;
13153               
13154               if (doing_semantic_analysis_p ())
13155                 {
13156                   if (DECL_NAME (parm) == NULL_TREE
13157                       || TREE_CODE (TREE_TYPE (parm)) != VOID_TYPE)
13158                     pushdecl (parm);
13159                   else
13160                     cp_error ("parameter `%D' declared void", parm);
13161                 }
13162
13163               if (! building_stmt_tree ()
13164                   && (cleanup = maybe_build_cleanup (parm), cleanup))
13165                 {
13166                   expand_decl (parm);
13167                   parms_have_cleanups = 1;
13168
13169                   /* Keep track of the cleanups.  */
13170                   cleanups = tree_cons (parm, cleanup, cleanups);
13171                 }
13172             }
13173           else
13174             {
13175               /* If we find an enum constant or a type tag,
13176                  put it aside for the moment.  */
13177               TREE_CHAIN (parm) = NULL_TREE;
13178               nonparms = chainon (nonparms, parm);
13179             }
13180         }
13181
13182       if (doing_semantic_analysis_p ())
13183         {
13184           /* Get the decls in their original chain order
13185              and record in the function.  This is all and only the
13186              PARM_DECLs that were pushed into scope by the loop above.  */
13187           DECL_ARGUMENTS (fndecl) = getdecls ();
13188           storetags (chainon (parmtags, gettags ()));
13189
13190           /* We built up the cleanups in reversed order.  */
13191           cleanups = nreverse (cleanups);
13192         }
13193     }
13194   else
13195     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13196
13197   /* Now store the final chain of decls for the arguments
13198      as the decl-chain of the current lexical scope.
13199      Put the enumerators in as well, at the front so that
13200      DECL_ARGUMENTS is not modified.  */
13201   if (doing_semantic_analysis_p ())
13202     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13203
13204   /* Initialize the RTL code for the function.  */
13205   DECL_SAVED_INSNS (fndecl) = 0;
13206   if (! building_stmt_tree ())
13207     expand_function_start (fndecl, parms_have_cleanups);
13208
13209   current_function_parms_stored = 1;
13210
13211   /* If this function is `main', emit a call to `__main'
13212      to run global initializers, etc.  */
13213   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13214     expand_main_function ();
13215
13216   /* Now that we have initialized the parms, we can start their
13217      cleanups.  We cannot do this before, since expand_decl_cleanup
13218      should not be called before the parm can be used.  */
13219   if (cleanups && !building_stmt_tree ())
13220     while (cleanups)
13221       {
13222         if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), 
13223                                    TREE_VALUE (cleanups)))
13224           cp_error ("parser lost in parsing declaration of `%D'",
13225                     TREE_PURPOSE (cleanups));
13226         
13227         cleanups = TREE_CHAIN (cleanups);
13228       }
13229
13230   /* Create a binding contour which can be used to catch
13231      cleanup-generated temporaries.  Also, if the return value needs or
13232      has initialization, deal with that now.  */
13233   if (parms_have_cleanups)
13234     {
13235       pushlevel (0);
13236       if (!building_stmt_tree ())
13237         expand_start_bindings (2);
13238     }
13239
13240   /* Do the starting of the exception specifications, if we have any.  */
13241   if (flag_exceptions && !processing_template_decl 
13242       && building_stmt_tree () 
13243       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13244     current_eh_spec_try_block = expand_start_eh_spec ();
13245
13246   last_parm_cleanup_insn = get_last_insn ();
13247   last_dtor_insn = get_last_insn ();
13248 }
13249
13250 /* Bind a name and initialization to the return value of
13251    the current function.  */
13252
13253 void
13254 store_return_init (decl)
13255      tree decl;
13256 {
13257   /* If this named return value comes in a register, put it in a
13258      pseudo-register.  */
13259   if (DECL_REGISTER (decl))
13260     {
13261       original_result_rtx = DECL_RTL (decl);
13262       DECL_RTL (decl) = gen_reg_rtx (DECL_MODE (decl));
13263     }
13264 }
13265
13266 \f
13267 /* We have finished doing semantic analysis on DECL, but have not yet
13268    generated RTL for its body.  Save away our current state, so that
13269    when we want to generate RTL later we know what to do.  */
13270
13271 static void
13272 save_function_data (decl)
13273      tree decl;
13274 {
13275   struct language_function *f;
13276
13277   /* Save the language-specific per-function data so that we can
13278      get it back when we really expand this function.  */
13279   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13280                       19990908);
13281       
13282   /* Make a copy.  */
13283   f = ((struct language_function *) 
13284        xmalloc (sizeof (struct language_function)));
13285   bcopy ((char *) cp_function_chain, (char *) f,
13286          sizeof (struct language_function));
13287   DECL_SAVED_FUNCTION_DATA (decl) = f;
13288
13289   /* Clear out the bits we don't need.  */
13290   f->x_base_init_list = NULL_TREE;
13291   f->x_member_init_list = NULL_TREE;
13292   f->x_last_tree = NULL_TREE;
13293   f->x_last_expr_type = NULL_TREE;
13294   f->x_last_dtor_insn = NULL_RTX;
13295   f->x_last_parm_cleanup_insn = NULL_RTX;
13296   f->x_result_rtx = NULL_RTX;
13297   f->x_named_label_uses = NULL;
13298   f->bindings = NULL;
13299
13300   /* When we get back here again, we will be expanding.  */
13301   f->x_expanding_p = 1;
13302
13303   /* If we've already decided that we cannot inline this function, we
13304      must remember that fact when we actually go to expand the
13305      function.  */
13306   f->cannot_inline = current_function_cannot_inline;
13307 }
13308
13309 /* At the end of every constructor we generate to code to return
13310    `this'.  Do that now.  */
13311
13312 static void
13313 finish_constructor_body ()
13314 {
13315   /* Any return from a constructor will end up here.  */
13316   add_tree (build_min_nt (LABEL_STMT, ctor_label));
13317
13318   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13319      generate the return, rather than a goto to CTOR_LABEL.  */
13320   ctor_label = NULL_TREE;
13321   /* In check_return_expr we translate an empty return from a
13322      constructor to a return of `this'.  */
13323   finish_return_stmt (NULL_TREE);
13324 }
13325
13326 /* At the end of every destructor we generate code to restore virtual
13327    function tables to the values desired by base classes and to call
13328    to base class destructors.  Do that now.  */
13329
13330 static void
13331 finish_destructor_body ()
13332 {
13333   tree compound_stmt;
13334   tree in_charge;
13335   tree virtual_size;
13336   tree exprstmt;
13337
13338   /* Create a block to contain all the extra code.  */
13339   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13340
13341   /* Any return from a destructor will end up here.  */
13342   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13343
13344   /* Generate the code to call destructor on base class.  If this
13345      destructor belongs to a class with virtual functions, then set
13346      the virtual function table pointer to represent the type of our
13347      base class.  */
13348
13349   /* This side-effect makes call to `build_delete' generate the code
13350      we have to have at the end of this destructor.  `build_delete'
13351      will set the flag again.  */
13352   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13353
13354   /* These are two cases where we cannot delegate deletion.  */
13355   if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)
13356       || TYPE_GETS_REG_DELETE (current_class_type))
13357     in_charge = integer_zero_node;
13358   else
13359     in_charge = current_in_charge_parm;
13360
13361   exprstmt = build_delete (current_class_type,
13362                            current_class_ref, 
13363                            in_charge,
13364                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL, 
13365                            0);
13366
13367   if (exprstmt != error_mark_node
13368       && (TREE_CODE (exprstmt) != NOP_EXPR
13369           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13370           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13371     {
13372       if (exprstmt != void_zero_node)
13373         /* Don't call `expand_expr_stmt' if we're not going to do
13374            anything, since -Wall will give a diagnostic.  */
13375         finish_expr_stmt (exprstmt);
13376
13377       /* Run destructors for all virtual baseclasses.  */
13378       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13379         {
13380           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13381           tree if_stmt = begin_if_stmt ();
13382           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13383                                       current_in_charge_parm, 
13384                                       integer_two_node),
13385                                if_stmt);
13386
13387           while (vbases)
13388             {
13389               if (TYPE_NEEDS_DESTRUCTOR (BINFO_TYPE (vbases)))
13390                 {
13391                   tree vb = get_vbase
13392                     (BINFO_TYPE (vbases),
13393                      TYPE_BINFO (current_class_type));
13394                   finish_expr_stmt
13395                     (build_scoped_method_call
13396                      (current_class_ref, vb, dtor_identifier,
13397                       build_expr_list (NULL_TREE, integer_zero_node)));
13398                 }
13399               vbases = TREE_CHAIN (vbases);
13400             }
13401
13402           finish_then_clause (if_stmt);
13403           finish_if_stmt ();
13404         }
13405     }
13406   
13407   virtual_size = c_sizeof (current_class_type);
13408
13409   /* At the end, call delete if that's what's requested.  */
13410   
13411   /* FDIS sez: At the point of definition of a virtual destructor
13412      (including an implicit definition), non-placement operator delete
13413      shall be looked up in the scope of the destructor's class and if
13414      found shall be accessible and unambiguous.
13415      
13416      This is somewhat unclear, but I take it to mean that if the class
13417      only defines placement deletes we don't do anything here.  So we
13418      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13419      they ever try to delete one of these.  */
13420   if (TYPE_GETS_REG_DELETE (current_class_type)
13421       || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13422     {
13423       tree if_stmt;
13424
13425       exprstmt = build_op_delete_call
13426         (DELETE_EXPR, current_class_ptr, virtual_size,
13427          LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13428
13429       if_stmt = begin_if_stmt ();
13430       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13431                                   current_in_charge_parm,
13432                                   integer_one_node),
13433                            if_stmt);
13434       finish_expr_stmt (exprstmt);
13435       finish_then_clause (if_stmt);
13436       finish_if_stmt ();
13437     }
13438
13439   /* Close the block we started above.  */
13440   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13441 }
13442
13443 /* Finish up a function declaration and compile that function
13444    all the way to assembler language output.  The free the storage
13445    for the function definition.
13446
13447    This is called after parsing the body of the function definition.
13448    LINENO is the current line number.
13449
13450    FLAGS is a bitwise or of the following values: 
13451      1 - CALL_POPLEVEL 
13452        An extra call to poplevel (and expand_end_bindings) must be
13453        made to take care of the binding contour for the base
13454        initializers.  This is only relevant for constructors.
13455      2 - INCLASS_INLINE
13456        We just finished processing the body of an in-class inline
13457        function definition.  (This processing will have taken place
13458        after the class definition is complete.)  */
13459
13460 tree
13461 finish_function (lineno, flags)
13462      int lineno;
13463      int flags;
13464 {
13465   register tree fndecl = current_function_decl;
13466   tree fntype, ctype = NULL_TREE;
13467   /* Label to use if this function is supposed to return a value.  */
13468   tree no_return_label = NULL_TREE;
13469   int call_poplevel = (flags & 1) != 0;
13470   int inclass_inline = (flags & 2) != 0;
13471   int expand_p;
13472   int nested;
13473
13474   /* When we get some parse errors, we can end up without a
13475      current_function_decl, so cope.  */
13476   if (fndecl == NULL_TREE)
13477     return error_mark_node;
13478
13479   nested = function_depth > 1;
13480   fntype = TREE_TYPE (fndecl);
13481
13482   /*  TREE_READONLY (fndecl) = 1;
13483       This caused &foo to be of type ptr-to-const-function
13484       which then got a warning when stored in a ptr-to-function variable.  */
13485
13486   /* This happens on strange parse errors.  */
13487   if (! current_function_parms_stored)
13488     {
13489       call_poplevel = 0;
13490       store_parm_decls ();
13491     }
13492
13493   if (building_stmt_tree ())
13494     {
13495       if (DECL_CONSTRUCTOR_P (fndecl))
13496         {
13497           finish_constructor_body ();
13498           if (call_poplevel)
13499             do_poplevel ();
13500         }
13501       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13502         finish_destructor_body ();
13503       else if (DECL_MAIN_P (fndecl))
13504         {
13505           /* Make it so that `main' always returns 0 by default.  */
13506 #ifdef VMS
13507           finish_return_stmt (integer_one_node);
13508 #else
13509           finish_return_stmt (integer_zero_node);
13510 #endif
13511         }
13512
13513       /* Finish dealing with exception specifiers.  */
13514       if (flag_exceptions && !processing_template_decl
13515           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13516         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS 
13517                             (TREE_TYPE (current_function_decl)),
13518                             current_eh_spec_try_block);
13519     }
13520   else
13521     {
13522       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13523         {
13524           tree ttype = target_type (fntype);
13525           tree parmdecl;
13526
13527           if (IS_AGGR_TYPE (ttype))
13528             /* Let debugger know it should output info for this type.  */
13529             note_debug_info_needed (ttype);
13530
13531           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
13532             {
13533               ttype = target_type (TREE_TYPE (parmdecl));
13534               if (IS_AGGR_TYPE (ttype))
13535                 /* Let debugger know it should output info for this type.  */
13536                 note_debug_info_needed (ttype);
13537             }
13538         }
13539
13540       /* Clean house because we will need to reorder insns here.  */
13541       do_pending_stack_adjust ();
13542
13543       if (dtor_label)
13544         ;
13545       else if (DECL_CONSTRUCTOR_P (fndecl))
13546         {
13547           /* All subobjects have been fully constructed at this point.  */
13548           end_protect_partials ();
13549
13550           if (call_poplevel)
13551             do_poplevel ();
13552         }
13553       else if (return_label != NULL_RTX
13554                && flag_this_is_variable <= 0
13555                && current_function_return_value == NULL_TREE
13556                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
13557         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13558
13559       if (flag_exceptions)
13560         expand_exception_blocks ();
13561
13562       /* If this function is supposed to return a value, ensure that
13563          we do not fall into the cleanups by mistake.  The end of our
13564          function will look like this:
13565          
13566          user code (may have return stmt somewhere)
13567          goto no_return_label
13568          cleanup_label:
13569          cleanups
13570          goto return_label
13571          no_return_label:
13572          NOTE_INSN_FUNCTION_END
13573          return_label:
13574          things for return
13575          
13576          If the user omits a return stmt in the USER CODE section, we
13577          will have a control path which reaches NOTE_INSN_FUNCTION_END.
13578          Otherwise, we won't.  */
13579       if (no_return_label)
13580         {
13581           DECL_CONTEXT (no_return_label) = fndecl;
13582           DECL_INITIAL (no_return_label) = error_mark_node;
13583           DECL_SOURCE_FILE (no_return_label) = input_filename;
13584           DECL_SOURCE_LINE (no_return_label) = lineno;
13585           expand_goto (no_return_label);
13586         }
13587
13588       if (cleanup_label)
13589         {
13590           /* Remove the binding contour which is used
13591              to catch cleanup-generated temporaries.  */
13592           expand_end_bindings (0, 0, 0);
13593           poplevel (0, 0, 0);
13594
13595           /* Emit label at beginning of cleanup code for parameters.  */
13596           emit_label (cleanup_label);
13597         }
13598
13599       /* Get return value into register if that's where it's supposed
13600          to be.  */
13601       if (original_result_rtx)
13602         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
13603
13604       /* Finish building code that will trigger warnings if users forget
13605          to make their functions return values.  */
13606       if (no_return_label || cleanup_label)
13607         emit_jump (return_label);
13608       if (no_return_label)
13609         {
13610           /* We don't need to call `expand_*_return' here because we
13611              don't need any cleanups here--this path of code is only
13612              for error checking purposes.  */
13613           expand_label (no_return_label);
13614         }
13615
13616       /* We hard-wired immediate_size_expand to zero in
13617          start_function.  Expand_function_end will decrement this
13618          variable.  So, we set the variable to one here, so that after
13619          the decrement it will remain zero.  */
13620       immediate_size_expand = 1;
13621
13622       /* Generate rtl for function exit.  */
13623       expand_function_end (input_filename, lineno, 1);
13624     }
13625
13626   /* We have to save this value here in case
13627      maybe_end_member_template_processing decides to pop all the
13628      template parameters.  */
13629   expand_p = !building_stmt_tree ();
13630   
13631   /* If we're saving up tree structure, tie off the function now.  */
13632   if (!expand_p)
13633     finish_stmt_tree (fndecl);
13634
13635   /* This must come after expand_function_end because cleanups might
13636      have declarations (from inline functions) that need to go into
13637      this function's blocks.  */
13638   if (doing_semantic_analysis_p ())
13639     {
13640       if (current_binding_level->parm_flag != 1)
13641         my_friendly_abort (122);
13642       poplevel (1, 0, 1);
13643     }
13644
13645   /* Remember that we were in class scope.  */
13646   if (current_class_name)
13647     ctype = current_class_type;
13648
13649   /* Must mark the RESULT_DECL as being in this function.  */
13650   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13651
13652   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13653      to the FUNCTION_DECL node itself.  */
13654   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13655
13656   /* Undo the call to push_momentary in start_function.  */
13657   pop_momentary ();
13658
13659   /* Save away current state, if appropriate.  */
13660   if (!expanding_p && !processing_template_decl)
13661     save_function_data (fndecl);
13662
13663   if (expand_p)
13664     {
13665       int returns_null;
13666       int returns_value;
13667       int saved_flag_keep_inline_functions =
13668         flag_keep_inline_functions;
13669
13670       /* So we can tell if jump_optimize sets it to 1.  */
13671       can_reach_end = 0;
13672
13673       if (DECL_CONTEXT (fndecl) != NULL_TREE
13674           && hack_decl_function_context (fndecl))
13675         /* Trick rest_of_compilation into not deferring output of this
13676            function, even if it is inline, since the rtl_obstack for
13677            this function is the function_obstack of the enclosing
13678            function and will be deallocated when the enclosing
13679            function is gone.  See save_tree_status.  */
13680         flag_keep_inline_functions = 1;
13681
13682       /* Before we call rest_of_compilation (which will pop the
13683          CURRENT_FUNCTION), we must save these values.  */
13684       returns_null = current_function_returns_null;
13685       returns_value = current_function_returns_value;
13686
13687       /* If this is a nested function (like a template instantiation
13688          that we're compiling in the midst of compiling something
13689          else), push a new GC context.  That will keep local variables
13690          on the stack from being collected while we're doing the
13691          compilation of this function.  */
13692       if (function_depth > 1)
13693         ggc_push_context ();
13694
13695       /* Run the optimizers and output the assembler code for this
13696          function.  */
13697       if (DECL_ARTIFICIAL (fndecl))
13698         {
13699           /* Do we really *want* to inline this synthesized method?  */
13700
13701           int save_fif = flag_inline_functions;
13702           flag_inline_functions = 1;
13703
13704           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
13705              will check our size.  */
13706           DECL_INLINE (fndecl) = 0;
13707
13708           rest_of_compilation (fndecl);
13709           flag_inline_functions = save_fif;
13710         }
13711       else
13712         rest_of_compilation (fndecl);
13713
13714       /* Undo the call to ggc_push_context above.  */
13715       if (function_depth > 1)
13716         ggc_pop_context ();
13717
13718       flag_keep_inline_functions = saved_flag_keep_inline_functions;
13719
13720       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
13721         {
13722           /* Set DECL_EXTERNAL so that assemble_external will be called as
13723              necessary.  We'll clear it again in finish_file.  */
13724           if (! DECL_EXTERNAL (fndecl))
13725             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
13726           DECL_EXTERNAL (fndecl) = 1;
13727           mark_inline_for_output (fndecl);
13728         }
13729
13730       if (ctype && TREE_ASM_WRITTEN (fndecl))
13731         note_debug_info_needed (ctype);
13732
13733       returns_null |= can_reach_end;
13734
13735       /* Since we don't normally go through c_expand_return for constructors,
13736          this normally gets the wrong value.
13737          Also, named return values have their return codes emitted after
13738          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
13739       if (DECL_CONSTRUCTOR_P (fndecl)
13740           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
13741         returns_null = 0;
13742
13743       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
13744         cp_warning ("`noreturn' function `%D' does return", fndecl);
13745       else if ((warn_return_type || pedantic)
13746                && returns_null
13747                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
13748         {
13749           /* If this function returns non-void and control can drop through,
13750              complain.  */
13751           cp_warning ("control reaches end of non-void function `%D'", fndecl);
13752         }
13753       /* With just -W, complain only if function returns both with
13754          and without a value.  */
13755       else if (extra_warnings && returns_value && returns_null)
13756         warning ("this function may return with or without a value");
13757     }
13758   else
13759     {
13760       /* Since we never call rest_of_compilation, we never clear
13761          CURRENT_FUNCTION.  Do so explicitly.  */
13762       free_after_compilation (current_function);
13763       current_function = NULL;
13764     }
13765
13766   /* If this is a in-class inline definition, we may have to pop the
13767      bindings for the template parameters that we added in
13768      maybe_begin_member_template_processing when start_function was
13769      called.  */
13770   if (inclass_inline)
13771     maybe_end_member_template_processing ();
13772
13773   /* Leave the scope of the class.  */
13774   if (ctype)
13775     pop_nested_class ();
13776
13777   --function_depth;
13778
13779   /* Free all the tree nodes making up this function.  */
13780   /* Switch back to allocating nodes permanently
13781      until we start another function.  */
13782   if (! nested)
13783     permanent_allocation (1);
13784
13785   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl))
13786     {
13787       tree t;
13788
13789       /* Stop pointing to the local nodes about to be freed.  */
13790       /* But DECL_INITIAL must remain nonzero so we know this
13791          was an actual function definition.  */
13792       DECL_INITIAL (fndecl) = error_mark_node;
13793       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
13794         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
13795     }
13796
13797   if (DECL_STATIC_CONSTRUCTOR (fndecl))
13798     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
13799   if (DECL_STATIC_DESTRUCTOR (fndecl))
13800     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
13801
13802   /* Clean up.  */
13803   if (! nested)
13804     {
13805       /* Let the error reporting routines know that we're outside a
13806          function.  For a nested function, this value is used in
13807          pop_cp_function_context and then reset via pop_function_context.  */
13808       current_function_decl = NULL_TREE;
13809     }
13810
13811   return fndecl;
13812 }
13813 \f
13814 /* Create the FUNCTION_DECL for a function definition.
13815    DECLSPECS and DECLARATOR are the parts of the declaration;
13816    they describe the return type and the name of the function,
13817    but twisted together in a fashion that parallels the syntax of C.
13818
13819    This function creates a binding context for the function body
13820    as well as setting up the FUNCTION_DECL in current_function_decl.
13821
13822    Returns a FUNCTION_DECL on success.
13823
13824    If the DECLARATOR is not suitable for a function (it defines a datum
13825    instead), we return 0, which tells yyparse to report a parse error.
13826
13827    May return void_type_node indicating that this method is actually
13828    a friend.  See grokfield for more details.
13829
13830    Came here with a `.pushlevel' .
13831
13832    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13833    CHANGES TO CODE IN `grokfield'.  */
13834
13835 tree
13836 start_method (declspecs, declarator, attrlist)
13837      tree declarator, declspecs, attrlist;
13838 {
13839   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13840                                 attrlist);
13841
13842   /* Something too ugly to handle.  */
13843   if (fndecl == NULL_TREE)
13844     return NULL_TREE;
13845
13846   /* Pass friends other than inline friend functions back.  */
13847   if (fndecl == void_type_node)
13848     return fndecl;
13849
13850   if (TREE_CODE (fndecl) != FUNCTION_DECL)
13851     /* Not a function, tell parser to report parse error.  */
13852     return NULL_TREE;
13853
13854   if (DECL_IN_AGGR_P (fndecl))
13855     {
13856       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
13857         {
13858           if (DECL_CONTEXT (fndecl) 
13859               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
13860             cp_error ("`%D' is already defined in class %s", fndecl,
13861                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
13862         }
13863       return void_type_node;
13864     }
13865
13866   check_template_shadow (fndecl);
13867
13868   DECL_THIS_INLINE (fndecl) = 1;
13869
13870   if (flag_default_inline)
13871     DECL_INLINE (fndecl) = 1;
13872
13873   /* We process method specializations in finish_struct_1.  */
13874   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13875     fndecl = push_template_decl (fndecl);
13876
13877   /* We read in the parameters on the maybepermanent_obstack,
13878      but we won't be getting back to them until after we
13879      may have clobbered them.  So the call to preserve_data
13880      will keep them safe.  */
13881   preserve_data ();
13882
13883   if (! DECL_FRIEND_P (fndecl))
13884     {
13885       if (TREE_CHAIN (fndecl))
13886         {
13887           fndecl = copy_node (fndecl);
13888           TREE_CHAIN (fndecl) = NULL_TREE;
13889         }
13890
13891       if (DECL_CONSTRUCTOR_P (fndecl))
13892         {
13893           if (! grok_ctor_properties (current_class_type, fndecl))
13894             return void_type_node;
13895         }
13896       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
13897         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
13898     }
13899
13900   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0, 0);
13901
13902   /* Make a place for the parms */
13903   pushlevel (0);
13904   current_binding_level->parm_flag = 1;
13905   
13906   DECL_IN_AGGR_P (fndecl) = 1;
13907   return fndecl;
13908 }
13909
13910 /* Go through the motions of finishing a function definition.
13911    We don't compile this method until after the whole class has
13912    been processed.
13913
13914    FINISH_METHOD must return something that looks as though it
13915    came from GROKFIELD (since we are defining a method, after all).
13916
13917    This is called after parsing the body of the function definition.
13918    STMTS is the chain of statements that makes up the function body.
13919
13920    DECL is the ..._DECL that `start_method' provided.  */
13921
13922 tree
13923 finish_method (decl)
13924      tree decl;
13925 {
13926   register tree fndecl = decl;
13927   tree old_initial;
13928
13929   register tree link;
13930
13931   if (decl == void_type_node)
13932     return decl;
13933
13934   old_initial = DECL_INITIAL (fndecl);
13935
13936   /* Undo the level for the parms (from start_method).
13937      This is like poplevel, but it causes nothing to be
13938      saved.  Saving information here confuses symbol-table
13939      output routines.  Besides, this information will
13940      be correctly output when this method is actually
13941      compiled.  */
13942
13943   /* Clear out the meanings of the local variables of this level;
13944      also record in each decl which block it belongs to.  */
13945
13946   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
13947     {
13948       if (DECL_NAME (link) != NULL_TREE)
13949         pop_binding (DECL_NAME (link), link);
13950       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
13951       DECL_CONTEXT (link) = NULL_TREE;
13952     }
13953
13954   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
13955                       (HOST_WIDE_INT) current_binding_level->level_chain,
13956                       current_binding_level->parm_flag,
13957                       current_binding_level->keep);
13958
13959   poplevel (0, 0, 0);
13960
13961   DECL_INITIAL (fndecl) = old_initial;
13962
13963   /* We used to check if the context of FNDECL was different from
13964      current_class_type as another way to get inside here.  This didn't work
13965      for String.cc in libg++.  */
13966   if (DECL_FRIEND_P (fndecl))
13967     {
13968       CLASSTYPE_INLINE_FRIENDS (current_class_type)
13969         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
13970       decl = void_type_node;
13971     }
13972
13973   return decl;
13974 }
13975 \f
13976 /* Called when a new struct TYPE is defined.
13977    If this structure or union completes the type of any previous
13978    variable declaration, lay it out and output its rtl.  */
13979
13980 void
13981 hack_incomplete_structures (type)
13982      tree type;
13983 {
13984   tree *list;
13985
13986   if (current_binding_level->incomplete == NULL_TREE)
13987     return;
13988
13989   if (!type) /* Don't do this for class templates.  */
13990     return;
13991
13992   for (list = &current_binding_level->incomplete; *list; )
13993     {
13994       tree decl = TREE_VALUE (*list);
13995       if ((decl && TREE_TYPE (decl) == type)
13996           || (TREE_TYPE (decl)
13997               && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
13998               && TREE_TYPE (TREE_TYPE (decl)) == type))
13999         {
14000           int toplevel = toplevel_bindings_p ();
14001           if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14002               && TREE_TYPE (TREE_TYPE (decl)) == type)
14003             layout_type (TREE_TYPE (decl));
14004           layout_decl (decl, 0);
14005           rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14006           if (! toplevel)
14007             {
14008               tree cleanup;
14009               expand_decl (decl);
14010               cleanup = maybe_build_cleanup (decl);
14011               expand_decl_init (decl);
14012               if (! expand_decl_cleanup (decl, cleanup))
14013                 cp_error ("parser lost in parsing declaration of `%D'",
14014                           decl);
14015             }
14016           *list = TREE_CHAIN (*list);
14017         }
14018       else
14019         list = &TREE_CHAIN (*list);
14020     }
14021 }
14022
14023 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14024    See build_delete for information about AUTO_DELETE.
14025
14026    Don't build these on the momentary obstack; they must live
14027    the life of the binding contour.  */
14028
14029 static tree
14030 maybe_build_cleanup_1 (decl, auto_delete)
14031      tree decl, auto_delete;
14032 {
14033   tree type = TREE_TYPE (decl);
14034   if (type != error_mark_node && TYPE_NEEDS_DESTRUCTOR (type))
14035     {
14036       int temp = 0, flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14037       tree rval;
14038
14039       if (TREE_CODE (decl) != PARM_DECL)
14040         temp = suspend_momentary ();
14041
14042       if (TREE_CODE (type) == ARRAY_TYPE)
14043         rval = decl;
14044       else
14045         {
14046           mark_addressable (decl);
14047           rval = build_unary_op (ADDR_EXPR, decl, 0);
14048         }
14049
14050       /* Optimize for space over speed here.  */
14051       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14052           || flag_expensive_optimizations)
14053         flags |= LOOKUP_NONVIRTUAL;
14054
14055       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14056
14057       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14058           && ! TYPE_HAS_DESTRUCTOR (type))
14059         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14060                                                build_expr_list (NULL_TREE, build_vbase_delete (type, decl))));
14061
14062       if (TREE_CODE (decl) != PARM_DECL)
14063         resume_momentary (temp);
14064
14065       return rval;
14066     }
14067   return 0;
14068 }
14069
14070 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
14071
14072 tree
14073 build_target_expr (decl, value)
14074      tree decl;
14075      tree value;
14076 {
14077   tree t;
14078
14079   t = build (TARGET_EXPR, TREE_TYPE (decl), decl, value, 
14080              maybe_build_cleanup (decl), NULL_TREE);
14081   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
14082      ignore the TARGET_EXPR.  If there really turn out to be no
14083      side-effects, then the optimizer should be able to get rid of
14084      whatever code is generated anyhow.  */
14085   TREE_SIDE_EFFECTS (t) = 1;
14086
14087   return t;
14088 }
14089
14090 /* If DECL is of a type which needs a cleanup, build that cleanup
14091    here.  The cleanup does free the storage with a call to delete.  */
14092
14093 tree
14094 maybe_build_cleanup_and_delete (decl)
14095      tree decl;
14096 {
14097   return maybe_build_cleanup_1 (decl, integer_three_node);
14098 }
14099
14100 /* If DECL is of a type which needs a cleanup, build that cleanup
14101    here.  The cleanup does not free the storage with a call a delete.  */
14102
14103 tree
14104 maybe_build_cleanup (decl)
14105      tree decl;
14106 {
14107   return maybe_build_cleanup_1 (decl, integer_two_node);
14108 }
14109 \f
14110 /* Expand a C++ expression at the statement level.
14111    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14112    The C++ type checker should get all of these out when
14113    expressions are combined with other, type-providing, expressions,
14114    leaving only orphan expressions, such as:
14115
14116    &class::bar;         / / takes its address, but does nothing with it.  */
14117
14118 void
14119 cplus_expand_expr_stmt (exp)
14120      tree exp;
14121 {
14122   if (stmts_are_full_exprs_p)
14123     exp = convert_to_void (exp, "statement");
14124   
14125 #if 0
14126   /* We should do this eventually, but right now this causes regex.o from
14127      libg++ to miscompile, and tString to core dump.  */
14128   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14129 #endif
14130
14131   /* If we don't do this, we end up down inside expand_expr
14132      trying to do TYPE_MODE on the ERROR_MARK, and really
14133      go outside the bounds of the type.  */
14134   if (exp != error_mark_node)
14135     expand_expr_stmt (break_out_cleanups (exp));
14136 }
14137
14138 /* When a stmt has been parsed, this function is called.  */
14139
14140 void
14141 finish_stmt ()
14142 {
14143   /* Always assume this statement was not an expression statement.  If
14144      it actually was an expression statement, its our callers
14145      responsibility to fix this up.  */
14146   last_expr_type = NULL_TREE;
14147 }
14148
14149 /* Change a static member function definition into a FUNCTION_TYPE, instead
14150    of the METHOD_TYPE that we create when it's originally parsed.
14151
14152    WARNING: DO NOT pass &TREE_TYPE (decl) to FN or &TYPE_ARG_TYPES
14153    (TREE_TYPE (decl)) to ARGTYPES, as doing so will corrupt the types of
14154    other decls.  Either pass the addresses of local variables or NULL.  */
14155
14156 void
14157 revert_static_member_fn (decl, fn, argtypes)
14158      tree *decl, *fn, *argtypes;
14159 {
14160   tree tmp;
14161   tree function = fn ? *fn : TREE_TYPE (*decl);
14162   tree args = argtypes ? *argtypes : TYPE_ARG_TYPES (function);
14163
14164   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args))) 
14165       != TYPE_UNQUALIFIED)
14166     cp_error ("static member function `%#D' declared with type qualifiers", 
14167               *decl);
14168
14169   args = TREE_CHAIN (args);
14170   tmp = build_function_type (TREE_TYPE (function), args);
14171   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14172   tmp = build_exception_variant (tmp,
14173                                  TYPE_RAISES_EXCEPTIONS (function));
14174   TREE_TYPE (*decl) = tmp;
14175   if (DECL_ARGUMENTS (*decl))
14176     DECL_ARGUMENTS (*decl) = TREE_CHAIN (DECL_ARGUMENTS (*decl));
14177   DECL_STATIC_FUNCTION_P (*decl) = 1;
14178   if (fn)
14179     *fn = tmp;
14180   if (argtypes)
14181     *argtypes = args;
14182 }
14183
14184 /* Initialize the variables used during compilation of a C++ 
14185    function.  */ 
14186
14187 static void
14188 push_cp_function_context (f)
14189      struct function *f;
14190 {
14191   struct language_function *p 
14192     = ((struct language_function *) 
14193        xcalloc (1, sizeof (struct language_function)));
14194   f->language = p;
14195
14196   /* It takes an explicit call to expand_body to generate RTL for a
14197      function.  */
14198   expanding_p = 0;
14199
14200   /* Whenever we start a new function, we destroy temporaries in the
14201      usual way.  */
14202   stmts_are_full_exprs_p = 1;
14203 }
14204
14205 /* Free the language-specific parts of F, now that we've finished
14206    compiling the function.  */
14207
14208 static void
14209 pop_cp_function_context (f)
14210      struct function *f;
14211 {
14212   free (f->language);
14213   f->language = 0;
14214 }
14215
14216 /* Mark P for GC.  */
14217
14218 static void
14219 mark_lang_function (p)
14220      struct language_function *p;
14221 {
14222   if (!p)
14223     return;
14224
14225   ggc_mark_tree (p->x_named_labels);
14226   ggc_mark_tree (p->x_ctor_label);
14227   ggc_mark_tree (p->x_dtor_label);
14228   ggc_mark_tree (p->x_base_init_list);
14229   ggc_mark_tree (p->x_member_init_list);
14230   ggc_mark_tree (p->x_current_class_ptr);
14231   ggc_mark_tree (p->x_current_class_ref);
14232   ggc_mark_tree (p->x_last_tree);
14233   ggc_mark_tree (p->x_last_expr_type);
14234   ggc_mark_tree (p->x_eh_spec_try_block);
14235   ggc_mark_tree (p->x_scope_stmt_stack);
14236
14237   ggc_mark_rtx (p->x_last_dtor_insn);
14238   ggc_mark_rtx (p->x_last_parm_cleanup_insn);
14239   ggc_mark_rtx (p->x_result_rtx);
14240
14241   mark_binding_level (&p->bindings);
14242 }
14243
14244 /* Mark the language-specific data in F for GC.  */
14245
14246 void
14247 mark_cp_function_context (f)
14248      struct function *f;
14249 {
14250   mark_lang_function (f->language);
14251 }
14252
14253 int
14254 in_function_p ()
14255 {
14256   return function_depth != 0;
14257 }
14258
14259
14260 void
14261 lang_mark_false_label_stack (l)
14262      struct label_node *l;
14263 {
14264   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14265   my_friendly_assert (l == NULL, 19990904);
14266 }
14267
14268 void
14269 lang_mark_tree (t)
14270      tree t;
14271 {
14272   enum tree_code code = TREE_CODE (t);
14273   if (code == IDENTIFIER_NODE)
14274     {
14275       struct lang_identifier *li = (struct lang_identifier *) t;
14276       struct lang_id2 *li2 = li->x;
14277       ggc_mark_tree (li->namespace_bindings);
14278       ggc_mark_tree (li->bindings);
14279       ggc_mark_tree (li->class_value);
14280       ggc_mark_tree (li->class_template_info);
14281
14282       if (li2)
14283         {
14284           ggc_mark_tree (li2->label_value);
14285           ggc_mark_tree (li2->implicit_decl);
14286           ggc_mark_tree (li2->error_locus);
14287         }
14288     }
14289   else if (code == CPLUS_BINDING)
14290     {
14291       if (BINDING_HAS_LEVEL_P (t))
14292         mark_binding_level (&BINDING_LEVEL (t));
14293       else
14294         ggc_mark_tree (BINDING_SCOPE (t));
14295       ggc_mark_tree (BINDING_VALUE (t));
14296     }
14297   else if (code == OVERLOAD)
14298     ggc_mark_tree (OVL_FUNCTION (t));
14299   else if (code == TEMPLATE_PARM_INDEX)
14300     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14301   else if (TREE_CODE_CLASS (code) == 'd')
14302     {
14303       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14304
14305       if (ld)
14306         {
14307           ggc_mark (ld);
14308           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14309             ggc_mark_tree (ld->decl_flags.u2.access);
14310           ggc_mark_tree (ld->decl_flags.context);
14311           if (TREE_CODE (t) != NAMESPACE_DECL)
14312             ggc_mark_tree (ld->decl_flags.u.template_info);
14313           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14314             {
14315               ggc_mark_tree (ld->main_decl_variant);
14316               ggc_mark_tree (ld->befriending_classes);
14317               ggc_mark_tree (ld->saved_tree);
14318               if (TREE_CODE (t) == TYPE_DECL)
14319                 ggc_mark_tree (ld->u.sorted_fields);
14320               else if (TREE_CODE (t) == FUNCTION_DECL
14321                        && !DECL_PENDING_INLINE_P (t))
14322                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14323             }
14324         }
14325     }
14326   else if (TREE_CODE_CLASS (code) == 't')
14327     {
14328       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14329
14330       if (lt && !(TREE_CODE (t) == POINTER_TYPE 
14331                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14332         {
14333           ggc_mark (lt);
14334           ggc_mark_tree (lt->vfields);
14335           ggc_mark_tree (lt->vbases);
14336           ggc_mark_tree (lt->tags);
14337           ggc_mark_tree (lt->search_slot);
14338           ggc_mark_tree (lt->size);
14339           ggc_mark_tree (lt->abstract_virtuals);
14340           ggc_mark_tree (lt->friend_classes);
14341           ggc_mark_tree (lt->rtti);
14342           ggc_mark_tree (lt->methods);
14343           ggc_mark_tree (lt->template_info);
14344           ggc_mark_tree (lt->befriending_classes);
14345         }
14346       else if (lt)
14347         /* In the case of pointer-to-member function types, the
14348            TYPE_LANG_SPECIFIC is really just a tree.  */
14349         ggc_mark_tree ((tree) lt);
14350     }
14351 }
14352