OSDN Git Service

* dwarf2out.c (add_bound_info): Don't crash on an unexpanded SAVE_EXPR.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3    Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23
24 /* Process declarations and symbol lookup for C front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include <signal.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 extern int current_class_depth;
49
50 extern tree static_ctors, static_dtors;
51
52 extern tree global_namespace;
53
54 extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
55
56 /* Use garbage collection.  */
57
58 int ggc_p = 1;
59
60 #ifndef WCHAR_UNSIGNED
61 #define WCHAR_UNSIGNED 0
62 #endif
63
64 #ifndef CHAR_TYPE_SIZE
65 #define CHAR_TYPE_SIZE BITS_PER_UNIT
66 #endif
67
68 #ifndef BOOL_TYPE_SIZE
69 #ifdef SLOW_BYTE_ACCESS
70 /* In the new ABI, `bool' has size and alignment `1', on all
71    platforms.  */
72 #define BOOL_TYPE_SIZE \
73   ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
74 #else
75 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
76 #endif
77 #endif
78
79 /* We let tm.h override the types used here, to handle trivial differences
80    such as the choice of unsigned int or long unsigned int for size_t.
81    When machines start needing nontrivial differences in the size type,
82    it would be best to do something here to figure out automatically
83    from other information what type to use.  */
84
85 #ifndef SIZE_TYPE
86 #define SIZE_TYPE "long unsigned int"
87 #endif
88
89 #ifndef PTRDIFF_TYPE
90 #define PTRDIFF_TYPE "long int"
91 #endif
92
93 #ifndef WCHAR_TYPE
94 #define WCHAR_TYPE "int"
95 #endif
96
97 static tree grokparms                           PARAMS ((tree, int));
98 static const char *redeclaration_error_message  PARAMS ((tree, tree));
99
100 static void push_binding_level PARAMS ((struct binding_level *, int,
101                                       int));
102 static void pop_binding_level PARAMS ((void));
103 static void suspend_binding_level PARAMS ((void));
104 static void resume_binding_level PARAMS ((struct binding_level *));
105 static struct binding_level *make_binding_level PARAMS ((void));
106 static void declare_namespace_level PARAMS ((void));
107 static void signal_catch PARAMS ((int)) ATTRIBUTE_NORETURN;
108 static void storedecls PARAMS ((tree));
109 static void require_complete_types_for_parms PARAMS ((tree));
110 static int ambi_op_p PARAMS ((tree));
111 static int unary_op_p PARAMS ((tree));
112 static tree store_bindings PARAMS ((tree, tree));
113 static tree lookup_tag_reverse PARAMS ((tree, tree));
114 static tree obscure_complex_init PARAMS ((tree, tree));
115 static tree maybe_build_cleanup_1 PARAMS ((tree, tree));
116 static tree lookup_name_real PARAMS ((tree, int, int, int));
117 static void warn_extern_redeclared_static PARAMS ((tree, tree));
118 static void grok_reference_init PARAMS ((tree, tree, tree));
119 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
120                               enum overload_flags, tree,
121                               tree, int, int, int, int, int, int, tree));
122 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
123 static tree lookup_tag PARAMS ((enum tree_code, tree,
124                               struct binding_level *, int));
125 static void set_identifier_type_value_with_scope
126         PARAMS ((tree, tree, struct binding_level *));
127 static void record_builtin_type PARAMS ((enum rid, const char *, tree));
128 static void record_unknown_type PARAMS ((tree, const char *));
129 static tree build_library_fn_1                  PARAMS ((tree, tree));
130 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
131 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
132                                   int));
133 static void lang_print_error_function PARAMS ((const char *));
134 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
135 static void check_for_uninitialized_const_var PARAMS ((tree));
136 static unsigned long typename_hash PARAMS ((hash_table_key));
137 static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
138 static void push_binding PARAMS ((tree, tree, struct binding_level*));
139 static int add_binding PARAMS ((tree, tree));
140 static void pop_binding PARAMS ((tree, tree));
141 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
142 static tree find_binding PARAMS ((tree, tree));
143 static tree select_decl PARAMS ((tree, int));
144 static int lookup_flags PARAMS ((int, int));
145 static tree qualify_lookup PARAMS ((tree, int));
146 static tree record_builtin_java_type PARAMS ((const char *, int));
147 static const char *tag_name PARAMS ((enum tag_types code));
148 static void find_class_binding_level PARAMS ((void));
149 static struct binding_level *innermost_nonclass_level PARAMS ((void));
150 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
151 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
152 static int walk_globals_r PARAMS ((tree, void *));
153 static void add_decl_to_level PARAMS ((tree, struct binding_level *));
154 static tree make_label_decl PARAMS ((tree, int));
155 static void pop_label PARAMS ((tree));
156 static void pop_labels PARAMS ((tree));
157 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
158 static void layout_var_decl PARAMS ((tree));
159 static void maybe_commonize_var PARAMS ((tree));
160 static tree check_initializer PARAMS ((tree, tree));
161 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
162 static void push_cp_function_context PARAMS ((struct function *));
163 static void pop_cp_function_context PARAMS ((struct function *));
164 static void mark_binding_level PARAMS ((void *));
165 static void mark_cp_function_context PARAMS ((struct function *));
166 static void mark_saved_scope PARAMS ((void *));
167 static void mark_lang_function PARAMS ((struct language_function *));
168 static void mark_stmt_tree PARAMS ((struct stmt_tree *));
169 static void save_function_data PARAMS ((tree));
170 static void check_function_type PARAMS ((tree));
171 static void destroy_local_var PARAMS ((tree));
172 static void finish_constructor_body PARAMS ((void));
173 static void finish_destructor_body PARAMS ((void));
174 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
175 static tree get_atexit_node PARAMS ((void));
176 static tree get_dso_handle_node PARAMS ((void));
177 static tree start_cleanup_fn PARAMS ((void));
178 static void end_cleanup_fn PARAMS ((void));
179 static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
180 static void initialize_predefined_identifiers PARAMS ((void));
181 static tree check_special_function_return_type 
182   PARAMS ((special_function_kind, tree, tree, tree));
183
184 #if defined (DEBUG_CP_BINDING_LEVELS)
185 static void indent PARAMS ((void));
186 #endif
187
188 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
189 tree error_mark_list;
190
191 /* The following symbols are subsumed in the cp_global_trees array, and
192    listed here individually for documentation purposes.
193
194    C++ extensions
195         tree wchar_decl_node;
196         tree void_zero_node;
197
198         tree vtable_entry_type;
199         tree delta_type_node;
200 #if 0
201    Old rtti stuff.
202         tree __baselist_desc_type_node;
203         tree __i_desc_type_node, __m_desc_type_node;
204         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
205 #endif
206         tree __t_desc_type_node;
207 #if 0
208         tree __tp_desc_type_node;
209 #endif
210         tree ti_desc_type_node;
211         tree bltn_desc_type_node, ptr_desc_type_node;
212         tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
213         tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
214         tree ptmd_desc_type_node;
215         tree base_desc_type_node;
216 #if 0
217    Not needed yet?  May be needed one day?
218         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
219         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
220         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
221 #endif
222
223         tree class_type_node, record_type_node, union_type_node, enum_type_node;
224         tree unknown_type_node;
225
226    Array type `vtable_entry_type[]'
227
228         tree vtbl_type_node;
229         tree vtbl_ptr_type_node;
230
231    Namespaces,
232
233         tree std_node;
234         tree abi_node;
235
236    A FUNCTION_DECL which can call `abort'.  Not necessarily the
237    one that the user will declare, but sufficient to be called
238    by routines that want to abort the program.
239
240         tree abort_fndecl;
241
242    The FUNCTION_DECL for the default `::operator delete'.
243
244         tree global_delete_fndecl;
245
246    Used by RTTI
247         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
248         tree tinfo_var_id;
249
250 */
251
252 tree cp_global_trees[CPTI_MAX];
253
254 /* Indicates that there is a type value in some namespace, although
255    that is not necessarily in scope at the moment.  */
256
257 static tree global_type_node;
258
259 /* Namespace std.  */
260 int in_std;
261
262 /* Expect only namespace names now. */
263 static int only_namespace_names;
264
265 /* If original DECL_RESULT of current function was a register,
266    but due to being an addressable named return value, would up
267    on the stack, this variable holds the named return value's
268    original location.  */
269
270 #define original_result_rtx cp_function_chain->x_result_rtx
271
272 struct named_label_list
273 {
274   struct binding_level *binding_level;
275   tree names_in_scope;
276   tree label_decl;
277   const char *filename_o_goto;
278   int lineno_o_goto;
279   struct named_label_list *next;
280 };
281
282 /* Used only for jumps to as-yet undefined labels, since jumps to
283    defined labels can have their validity checked by stmt.c.  */
284
285 #define named_label_uses cp_function_chain->x_named_label_uses
286
287 /* A list of objects which have constructors or destructors
288    which reside in the global scope.  The decl is stored in
289    the TREE_VALUE slot and the initializer is stored
290    in the TREE_PURPOSE slot.  */
291 tree static_aggregates;
292
293 /* -- end of C++ */
294
295 /* A node for the integer constants 2, and 3.  */
296
297 tree integer_two_node, integer_three_node;
298
299 /* Parsing a function declarator leaves here a chain of structure
300    and enum types declared in the parmlist.  */
301
302 static tree last_function_parm_tags;
303
304 /* Similar, for last_function_parm_tags.  */
305 tree last_function_parms;
306 static tree current_function_parm_tags;
307
308 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
309    that have names.  Here so we can clear out their names' definitions
310    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
311    TREE_PURPOSE is the previous binding of the label.  */
312
313 #define named_labels cp_function_chain->x_named_labels
314
315 /* Set to 0 at beginning of a function definition, and whenever
316    a label (case or named) is defined.  Set to value of expression
317    returned from function when that value can be transformed into
318    a named return value.  */
319
320 tree current_function_return_value;
321
322 /* Nonzero means use the ISO C99 dialect of C.  */
323
324 int flag_isoc99;
325
326 /* Nonzero means give `double' the same size as `float'.  */
327
328 extern int flag_short_double;
329
330 /* Nonzero means don't recognize any builtin functions.  */
331
332 extern int flag_no_builtin;
333
334 /* Nonzero means don't recognize the non-ANSI builtin functions.
335    -ansi sets this.  */
336
337 extern int flag_no_nonansi_builtin;
338
339 /* Nonzero if we want to conserve space in the .o files.  We do this
340    by putting uninitialized data and runtime initialized data into
341    .common instead of .data at the expense of not flagging multiple
342    definitions.  */
343 extern int flag_conserve_space;
344 \f
345 /* C and C++ flags are in decl2.c.  */
346
347 /* Flag used when debugging spew.c */
348
349 extern int spew_debug;
350
351 /* A expression of value 0 with the same precision as a sizetype
352    node, but signed.  */
353 tree signed_size_zero_node;
354
355 /* The name of the anonymous namespace, throughout this translation
356    unit.  */
357 tree anonymous_namespace_name;
358
359 \f
360 /* For each binding contour we allocate a binding_level structure
361    which records the names defined in that contour.
362    Contours include:
363     0) the global one
364     1) one for each function definition,
365        where internal declarations of the parameters appear.
366     2) one for each compound statement,
367        to record its declarations.
368
369    The current meaning of a name can be found by searching the levels
370    from the current one out to the global one.
371
372    Off to the side, may be the class_binding_level.  This exists only
373    to catch class-local declarations.  It is otherwise nonexistent.
374
375    Also there may be binding levels that catch cleanups that must be
376    run when exceptions occur.  Thus, to see whether a name is bound in
377    the current scope, it is not enough to look in the
378    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
379    instead.  */
380
381 /* Note that the information in the `names' component of the global contour
382    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
383
384 struct binding_level
385   {
386     /* A chain of _DECL nodes for all variables, constants, functions,
387        and typedef types.  These are in the reverse of the order
388        supplied.  There may be OVERLOADs on this list, too, but they
389        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
390     tree names;
391
392     /* A list of structure, union and enum definitions, for looking up
393        tag names.
394        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
395        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
396        or ENUMERAL_TYPE node.
397
398        C++: the TREE_VALUE nodes can be simple types for
399        component_bindings.  */
400     tree tags;
401
402     /* A list of USING_DECL nodes. */
403     tree usings;
404
405     /* A list of used namespaces. PURPOSE is the namespace,
406        VALUE the common ancestor with this binding_level's namespace. */
407     tree using_directives;
408
409     /* If this binding level is the binding level for a class, then
410        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
411        is the name of an entity bound in the class; the TREE_VALUE is
412        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
413        when leaving class scope, we can restore the
414        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
415        the DECL bound by this name in the class.  */
416     tree class_shadowed;
417
418     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
419        is used for all binding levels.  */
420     tree type_shadowed;
421
422     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
423        label in this scope.  The TREE_PURPOSE is the previous value of
424        the IDENTIFIER_LABEL VALUE.  */
425     tree shadowed_labels;
426
427     /* For each level (except not the global one),
428        a chain of BLOCK nodes for all the levels
429        that were entered and exited one level down.  */
430     tree blocks;
431
432     /* The BLOCK node for this level, if one has been preallocated.
433        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
434     tree this_block;
435
436     /* The _TYPE node for this level, if parm_flag == 2.  */
437     tree this_class;
438
439     /* The binding level which this one is contained in (inherits from).  */
440     struct binding_level *level_chain;
441
442     /* List of decls in `names' that have incomplete
443        structure or union types.  */
444     tree incomplete;
445
446     /* List of VAR_DECLS saved from a previous for statement.
447        These would be dead in ISO-conforming code, but might
448        be referenced in ARM-era code.  These are stored in a
449        TREE_LIST; the TREE_VALUE is the actual declaration.  */
450     tree dead_vars_from_for;
451
452     /* 1 for the level that holds the parameters of a function.
453        2 for the level that holds a class declaration.  */
454     unsigned parm_flag : 2;
455
456     /* 1 means make a BLOCK for this level regardless of all else.
457        2 for temporary binding contours created by the compiler.  */
458     unsigned keep : 2;
459
460     /* Nonzero if this level "doesn't exist" for tags.  */
461     unsigned tag_transparent : 1;
462
463     /* Nonzero if this level can safely have additional
464        cleanup-needing variables added to it.  */
465     unsigned more_cleanups_ok : 1;
466     unsigned have_cleanups : 1;
467
468     /* Nonzero if this scope is for storing the decls for template
469        parameters and generic decls; these decls will be discarded and
470        replaced with a TEMPLATE_DECL.  */
471     unsigned template_parms_p : 1;
472
473     /* Nonzero if this scope corresponds to the `<>' in a 
474        `template <>' clause.  Whenever this flag is set,
475        TEMPLATE_PARMS_P will be set as well.  */
476     unsigned template_spec_p : 1;
477
478     /* This is set for a namespace binding level.  */
479     unsigned namespace_p : 1;
480
481     /* True if this level is that of a for-statement where we need to
482        worry about ambiguous (ARM or ISO) scope rules.  */
483     unsigned is_for_scope : 1;
484
485     /* True if this level corresponds to an EH region, as for a try block.  */
486     unsigned eh_region : 1;
487
488     /* Four bits left for this word.  */
489
490 #if defined(DEBUG_CP_BINDING_LEVELS)
491     /* Binding depth at which this level began.  */
492     unsigned binding_depth;
493 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
494   };
495
496 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
497
498 /* The binding level currently in effect.  */
499
500 #define current_binding_level                   \
501   (cfun                                         \
502    ? cp_function_chain->bindings                \
503    : scope_chain->bindings)
504
505 /* The binding level of the current class, if any.  */
506
507 #define class_binding_level scope_chain->class_bindings
508
509 /* A chain of binding_level structures awaiting reuse.  */
510
511 static struct binding_level *free_binding_level;
512
513 /* The outermost binding level, for names of file scope.
514    This is created when the compiler is started and exists
515    through the entire run.  */
516
517 static struct binding_level *global_binding_level;
518
519 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
520
521 static int keep_next_level_flag;
522
523 #if defined(DEBUG_CP_BINDING_LEVELS)
524 static int binding_depth = 0;
525 static int is_class_level = 0;
526
527 static void
528 indent ()
529 {
530   register unsigned i;
531
532   for (i = 0; i < binding_depth*2; i++)
533     putc (' ', stderr);
534 }
535 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
536
537 static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
538
539 static void
540 push_binding_level (newlevel, tag_transparent, keep)
541      struct binding_level *newlevel;
542      int tag_transparent, keep;
543 {
544   /* Add this level to the front of the chain (stack) of levels that
545      are active.  */
546   bzero ((char*) newlevel, sizeof (struct binding_level));
547   newlevel->level_chain = current_binding_level;
548   current_binding_level = newlevel;
549   newlevel->tag_transparent = tag_transparent;
550   newlevel->more_cleanups_ok = 1;
551
552   /* We are called before expand_start_bindings, but after
553      expand_eh_region_start for a try block; so we check this now,
554      before the EH block is covered up.  */
555   newlevel->eh_region = is_eh_region ();
556
557   newlevel->keep = keep;
558 #if defined(DEBUG_CP_BINDING_LEVELS)
559   newlevel->binding_depth = binding_depth;
560   indent ();
561   fprintf (stderr, "push %s level 0x%08x line %d\n",
562            (is_class_level) ? "class" : "block", newlevel, lineno);
563   is_class_level = 0;
564   binding_depth++;
565 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
566 }
567
568 /* Find the innermost enclosing class scope, and reset
569    CLASS_BINDING_LEVEL appropriately.  */
570
571 static void
572 find_class_binding_level ()
573 {
574   struct binding_level *level = current_binding_level;
575
576   while (level && level->parm_flag != 2)
577     level = level->level_chain;
578   if (level && level->parm_flag == 2)
579     class_binding_level = level;
580   else
581     class_binding_level = 0;
582 }
583
584 static void
585 pop_binding_level ()
586 {
587   if (global_binding_level)
588     {
589       /* Cannot pop a level, if there are none left to pop.  */
590       if (current_binding_level == global_binding_level)
591         my_friendly_abort (123);
592     }
593   /* Pop the current level, and free the structure for reuse.  */
594 #if defined(DEBUG_CP_BINDING_LEVELS)
595   binding_depth--;
596   indent ();
597   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
598           (is_class_level) ? "class" : "block",
599           current_binding_level, lineno);
600   if (is_class_level != (current_binding_level == class_binding_level))
601     {
602       indent ();
603       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
604     }
605   is_class_level = 0;
606 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
607   {
608     register struct binding_level *level = current_binding_level;
609     current_binding_level = current_binding_level->level_chain;
610     level->level_chain = free_binding_level;
611 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
612     if (level->binding_depth != binding_depth)
613       abort ();
614 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
615     free_binding_level = level;
616     find_class_binding_level ();
617   }
618 }
619
620 static void
621 suspend_binding_level ()
622 {
623   if (class_binding_level)
624     current_binding_level = class_binding_level;
625
626   if (global_binding_level)
627     {
628       /* Cannot suspend a level, if there are none left to suspend.  */
629       if (current_binding_level == global_binding_level)
630         my_friendly_abort (123);
631     }
632   /* Suspend the current level.  */
633 #if defined(DEBUG_CP_BINDING_LEVELS)
634   binding_depth--;
635   indent ();
636   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
637           (is_class_level) ? "class" : "block",
638           current_binding_level, lineno);
639   if (is_class_level != (current_binding_level == class_binding_level))
640     {
641       indent ();
642       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
643     }
644   is_class_level = 0;
645 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
646   current_binding_level = current_binding_level->level_chain;
647   find_class_binding_level ();
648 }
649
650 static void
651 resume_binding_level (b)
652      struct binding_level *b;
653 {
654   /* Resuming binding levels is meant only for namespaces,
655      and those cannot nest into classes. */
656   my_friendly_assert(!class_binding_level, 386);
657   /* Also, resuming a non-directly nested namespace is a no-no.  */
658   my_friendly_assert(b->level_chain == current_binding_level, 386);
659   current_binding_level = b;
660 #if defined(DEBUG_CP_BINDING_LEVELS)
661   b->binding_depth = binding_depth;
662   indent ();
663   fprintf (stderr, "resume %s level 0x%08x line %d\n",
664            (is_class_level) ? "class" : "block", b, lineno);
665   is_class_level = 0;
666   binding_depth++;
667 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
668 }
669 \f
670 /* Create a new `struct binding_level'.  */
671
672 static
673 struct binding_level *
674 make_binding_level ()
675 {
676   /* NOSTRICT */
677   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
678 }
679
680 /* Nonzero if we are currently in the global binding level.  */
681
682 int
683 global_bindings_p ()
684 {
685   return current_binding_level == global_binding_level;
686 }
687
688 /* Return the innermost binding level that is not for a class scope.  */
689
690 static struct binding_level *
691 innermost_nonclass_level ()
692 {
693   struct binding_level *b;
694
695   b = current_binding_level;
696   while (b->parm_flag == 2)
697     b = b->level_chain;
698
699   return b;
700 }
701
702 /* Nonzero if we are currently in a toplevel binding level.  This
703    means either the global binding level or a namespace in a toplevel
704    binding level.  Since there are no non-toplevel namespace levels,
705    this really means any namespace or template parameter level.  We
706    also include a class whose context is toplevel.  */
707
708 int
709 toplevel_bindings_p ()
710 {
711   struct binding_level *b = innermost_nonclass_level ();
712
713   return b->namespace_p || b->template_parms_p;
714 }
715
716 /* Nonzero if this is a namespace scope, or if we are defining a class
717    which is itself at namespace scope, or whose enclosing class is
718    such a class, etc.  */
719
720 int
721 namespace_bindings_p ()
722 {
723   struct binding_level *b = innermost_nonclass_level ();
724
725   return b->namespace_p;
726 }
727
728 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
729    unconditionally.  Otherwise, use the normal logic to decide whether
730    or not to create a BLOCK.  */
731
732 void
733 keep_next_level (keep)
734      int keep;
735 {
736   keep_next_level_flag = keep;
737 }
738
739 /* Nonzero if the current level needs to have a BLOCK made.  */
740
741 int
742 kept_level_p ()
743 {
744   return (current_binding_level->blocks != NULL_TREE
745           || current_binding_level->keep
746           || current_binding_level->names != NULL_TREE
747           || (current_binding_level->tags != NULL_TREE
748               && !current_binding_level->tag_transparent));
749 }
750
751 static void
752 declare_namespace_level ()
753 {
754   current_binding_level->namespace_p = 1;
755 }
756
757 /* Returns non-zero if this scope was created to store template
758    parameters.  */
759
760 int
761 template_parm_scope_p ()
762 {
763   return current_binding_level->template_parms_p;
764 }
765
766 /* Returns the kind of template specialization we are currently
767    processing, given that it's declaration contained N_CLASS_SCOPES
768    explicit scope qualifications.  */
769
770 tmpl_spec_kind
771 current_tmpl_spec_kind (n_class_scopes)
772      int n_class_scopes;
773 {
774   int n_template_parm_scopes = 0;
775   int seen_specialization_p = 0;
776   int innermost_specialization_p = 0;
777   struct binding_level *b;
778
779   /* Scan through the template parameter scopes.  */
780   for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
781     {
782       /* If we see a specialization scope inside a parameter scope,
783          then something is wrong.  That corresponds to a declaration
784          like:
785
786             template <class T> template <> ...
787
788          which is always illegal since [temp.expl.spec] forbids the
789          specialization of a class member template if the enclosing
790          class templates are not explicitly specialized as well.  */
791       if (b->template_spec_p)
792         {
793           if (n_template_parm_scopes == 0)
794             innermost_specialization_p = 1;
795           else
796             seen_specialization_p = 1;
797         }
798       else if (seen_specialization_p == 1)
799         return tsk_invalid_member_spec;
800
801       ++n_template_parm_scopes;
802     }
803
804   /* Handle explicit instantiations.  */
805   if (processing_explicit_instantiation)
806     {
807       if (n_template_parm_scopes != 0)
808         /* We've seen a template parameter list during an explicit
809            instantiation.  For example:
810
811              template <class T> template void f(int);
812
813            This is erroneous.  */
814         return tsk_invalid_expl_inst;
815       else
816         return tsk_expl_inst;
817     }
818
819   if (n_template_parm_scopes < n_class_scopes)
820     /* We've not seen enough template headers to match all the
821        specialized classes present.  For example:
822
823          template <class T> void R<T>::S<T>::f(int);
824
825        This is illegal; there needs to be one set of template
826        parameters for each class.  */
827     return tsk_insufficient_parms;
828   else if (n_template_parm_scopes == n_class_scopes)
829     /* We're processing a non-template declaration (even though it may
830        be a member of a template class.)  For example:
831
832          template <class T> void S<T>::f(int);
833
834        The `class T' maches the `S<T>', leaving no template headers
835        corresponding to the `f'.  */
836     return tsk_none;
837   else if (n_template_parm_scopes > n_class_scopes + 1)
838     /* We've got too many template headers.  For example:
839
840          template <> template <class T> void f (T);
841
842        There need to be more enclosing classes.  */
843     return tsk_excessive_parms;
844   else
845     /* This must be a template.  It's of the form:
846
847          template <class T> template <class U> void S<T>::f(U);
848
849        This is a specialization if the innermost level was a
850        specialization; otherwise it's just a definition of the
851        template.  */
852     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
853 }
854
855 void
856 set_class_shadows (shadows)
857      tree shadows;
858 {
859   class_binding_level->class_shadowed = shadows;
860 }
861
862 /* Enter a new binding level.
863    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
864    not for that of tags.  */
865
866 void
867 pushlevel (tag_transparent)
868      int tag_transparent;
869 {
870   struct binding_level *newlevel;
871
872   if (cfun && !doing_semantic_analysis_p ())
873     return;
874
875   /* Reuse or create a struct for this binding level.  */
876 #if defined(DEBUG_CP_BINDING_LEVELS)
877   if (0)
878 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
879   if (free_binding_level)
880 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
881     {
882       newlevel = free_binding_level;
883       free_binding_level = free_binding_level->level_chain;
884     }
885   else
886     newlevel = make_binding_level ();
887
888   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
889   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
890   keep_next_level_flag = 0;
891 }
892
893 /* Enter a new scope.  The KIND indicates what kind of scope is being
894    created.  */
895
896 void
897 begin_scope (sk)
898      scope_kind sk;
899 {
900   pushlevel (0);
901
902   switch (sk)
903     {
904     case sk_template_spec:
905       current_binding_level->template_spec_p = 1;
906       /* Fall through.  */
907
908     case sk_template_parms:
909       current_binding_level->template_parms_p = 1;
910       break;
911
912     default:
913       my_friendly_abort (20000309);
914     }
915 }
916
917 /* Exit the current scope.  */
918
919 void
920 finish_scope ()
921 {
922   poplevel (0, 0, 0);
923 }
924
925 void
926 note_level_for_for ()
927 {
928   current_binding_level->is_for_scope = 1;
929 }
930
931 /* For a binding between a name and an entity at a block scope,
932    this is the `struct binding_level' for the block.  */
933 #define BINDING_LEVEL(NODE) \
934    (((struct tree_binding*)NODE)->scope.level)
935
936 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
937    level at which this declaration is being bound.  */
938
939 static void
940 push_binding (id, decl, level)
941      tree id;
942      tree decl;
943      struct binding_level* level;
944 {
945   tree binding;
946
947   binding = make_node (CPLUS_BINDING);
948
949   /* Now, fill in the binding information.  */
950   BINDING_VALUE (binding) = decl;
951   BINDING_TYPE (binding) = NULL_TREE;
952   BINDING_LEVEL (binding) = level;
953   INHERITED_VALUE_BINDING_P (binding) = 0;
954   LOCAL_BINDING_P (binding) = (level != class_binding_level);
955   BINDING_HAS_LEVEL_P (binding) = 1;
956
957   /* And put it on the front of the list of bindings for ID.  */
958   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
959   IDENTIFIER_BINDING (id) = binding;
960 }
961
962 /* ID is already bound in the current scope.  But, DECL is an
963    additional binding for ID in the same scope.  This is the `struct
964    stat' hack whereby a non-typedef class-name or enum-name can be
965    bound at the same level as some other kind of entity.  It's the
966    responsibility of the caller to check that inserting this name is
967    legal here.  Returns nonzero if the new binding was successful.  */
968 static int
969 add_binding (id, decl)
970      tree id;
971      tree decl;
972 {
973   tree binding = IDENTIFIER_BINDING (id);
974   int ok = 1;
975
976   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
977     /* The new name is the type name.  */
978     BINDING_TYPE (binding) = decl;
979   else if (!BINDING_VALUE (binding))
980     /* This situation arises when push_class_level_binding moves an
981        inherited type-binding out of the way to make room for a new
982        value binding.  */
983     BINDING_VALUE (binding) = decl;
984   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
985            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
986     {
987       /* The old binding was a type name.  It was placed in
988          BINDING_VALUE because it was thought, at the point it was
989          declared, to be the only entity with such a name.  Move the
990          type name into the type slot; it is now hidden by the new
991          binding.  */
992       BINDING_TYPE (binding) = BINDING_VALUE (binding);
993       BINDING_VALUE (binding) = decl;
994       INHERITED_VALUE_BINDING_P (binding) = 0;
995     }
996   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
997            && TREE_CODE (decl) == TYPE_DECL
998            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
999            && same_type_p (TREE_TYPE (decl),
1000                            TREE_TYPE (BINDING_VALUE (binding))))
1001     /* We have two typedef-names, both naming the same type to have
1002        the same name.  This is OK because of:
1003
1004          [dcl.typedef]
1005
1006          In a given scope, a typedef specifier can be used to redefine
1007          the name of any type declared in that scope to refer to the
1008          type to which it already refers.  */
1009     ok = 0;
1010   else
1011     {
1012       cp_error ("declaration of `%#D'", decl);
1013       cp_error_at ("conflicts with previous declaration `%#D'",
1014                    BINDING_VALUE (binding));
1015       ok = 0;
1016     }
1017
1018   return ok;
1019 }
1020
1021 /* Add DECL to the list of things declared in B.  */
1022
1023 static void
1024 add_decl_to_level (decl, b)
1025      tree decl;
1026      struct binding_level *b;
1027 {
1028   /* We build up the list in reverse order, and reverse it later if
1029      necessary.  */
1030   TREE_CHAIN (decl) = b->names;
1031   b->names = decl;
1032 }
1033
1034 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1035    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
1036    doesn't really belong to this binding level, that it got here
1037    through a using-declaration.  */
1038
1039 void
1040 push_local_binding (id, decl, flags)
1041      tree id;
1042      tree decl;
1043      int flags;
1044 {
1045   struct binding_level *b;
1046
1047   /* Skip over any local classes.  This makes sense if we call
1048      push_local_binding with a friend decl of a local class.  */
1049   b = current_binding_level;
1050   while (b->parm_flag == 2)
1051     b = b->level_chain;
1052
1053   if (lookup_name_current_level (id))
1054     {
1055       /* Supplement the existing binding.  */
1056       if (!add_binding (id, decl))
1057         /* It didn't work.  Something else must be bound at this
1058            level.  Do not add DECL to the list of things to pop
1059            later.  */
1060         return;
1061     }
1062   else
1063     /* Create a new binding.  */
1064     push_binding (id, decl, b);
1065
1066   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1067     /* We must put the OVERLOAD into a TREE_LIST since the
1068        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1069        decls that got here through a using-declaration.  */
1070     decl = build_tree_list (NULL_TREE, decl);
1071
1072   /* And put DECL on the list of things declared by the current
1073      binding level.  */
1074   add_decl_to_level (decl, b);
1075 }
1076
1077 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1078    binding was successful.  */
1079
1080 int
1081 push_class_binding (id, decl)
1082      tree id;
1083      tree decl;
1084 {
1085   int result = 1;
1086   tree binding = IDENTIFIER_BINDING (id);
1087   tree context;
1088
1089   /* Note that we declared this value so that we can issue an error if
1090      this an illegal redeclaration of a name already used for some
1091      other purpose.  */
1092   note_name_declared_in_class (id, decl);
1093
1094   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1095     /* Supplement the existing binding.  */
1096     result = add_binding (id, decl);
1097   else
1098     /* Create a new binding.  */
1099     push_binding (id, decl, class_binding_level);
1100
1101   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1102      class-level declaration.  Note that we do not use DECL here
1103      because of the possibility of the `struct stat' hack; if DECL is
1104      a class-name or enum-name we might prefer a field-name, or some
1105      such.  */
1106   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1107
1108   /* If this is a binding from a base class, mark it as such.  */
1109   binding = IDENTIFIER_BINDING (id);
1110   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1111     {
1112       /* Any implicit typename must be from a base-class.  The
1113          context for an implicit typename declaration is always
1114          the derived class in which the lookup was done, so the checks
1115          based on the context of DECL below will not trigger.  */
1116       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1117         INHERITED_VALUE_BINDING_P (binding) = 1;
1118       else
1119         {
1120           if (TREE_CODE (decl) == OVERLOAD)
1121             context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1122           else
1123             {
1124               my_friendly_assert (DECL_P (decl), 0);
1125               context = CP_DECL_CONTEXT (decl);
1126             }
1127
1128           if (is_properly_derived_from (current_class_type, context))
1129             INHERITED_VALUE_BINDING_P (binding) = 1;
1130           else
1131             INHERITED_VALUE_BINDING_P (binding) = 0;
1132         }
1133     }
1134   else if (BINDING_VALUE (binding) == decl)
1135     /* We only encounter a TREE_LIST when push_class_decls detects an
1136        ambiguity.  Such an ambiguity can be overridden by a definition
1137        in this class.  */
1138     INHERITED_VALUE_BINDING_P (binding) = 1;
1139
1140   return result;
1141 }
1142
1143 /* Remove the binding for DECL which should be the innermost binding
1144    for ID.  */
1145
1146 static void
1147 pop_binding (id, decl)
1148      tree id;
1149      tree decl;
1150 {
1151   tree binding;
1152
1153   if (id == NULL_TREE)
1154     /* It's easiest to write the loops that call this function without
1155        checking whether or not the entities involved have names.  We
1156        get here for such an entity.  */
1157     return;
1158
1159   /* Get the innermost binding for ID.  */
1160   binding = IDENTIFIER_BINDING (id);
1161
1162   /* The name should be bound.  */
1163   my_friendly_assert (binding != NULL_TREE, 0);
1164
1165   /* The DECL will be either the ordinary binding or the type
1166      binding for this identifier.  Remove that binding.  */
1167   if (BINDING_VALUE (binding) == decl)
1168     BINDING_VALUE (binding) = NULL_TREE;
1169   else if (BINDING_TYPE (binding) == decl)
1170     BINDING_TYPE (binding) = NULL_TREE;
1171   else
1172     my_friendly_abort (0);
1173
1174   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1175     /* We're completely done with the innermost binding for this
1176        identifier.  Unhook it from the list of bindings.  */
1177     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1178 }
1179
1180 /* When a label goes out of scope, check to see if that label was used
1181    in a valid manner, and issue any appropriate warnings or errors.  */
1182
1183 static void
1184 pop_label (link)
1185      tree link;
1186 {
1187   tree label = TREE_VALUE (link);
1188
1189   if (!processing_template_decl && doing_semantic_analysis_p ())
1190     {
1191       if (DECL_INITIAL (label) == NULL_TREE)
1192         {
1193           cp_error_at ("label `%D' used but not defined", label);
1194           /* Avoid crashing later.  */
1195           define_label (input_filename, 1, DECL_NAME (label));
1196         }
1197       else if (warn_unused && !TREE_USED (label))
1198         cp_warning_at ("label `%D' defined but not used", label);
1199     }
1200
1201   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1202 }
1203
1204 /* At the end of a function, all labels declared within the fucntion
1205    go out of scope.  BLOCK is the top-level block for the
1206    function.  */
1207
1208 static void
1209 pop_labels (block)
1210      tree block;
1211 {
1212   tree link;
1213
1214   /* Clear out the definitions of all label names, since their scopes
1215      end here.  */
1216   for (link = named_labels; link; link = TREE_CHAIN (link))
1217     {
1218       pop_label (link);
1219       /* Put the labels into the "variables" of the top-level block,
1220          so debugger can see them.  */
1221       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1222       BLOCK_VARS (block) = TREE_VALUE (link);
1223     }
1224
1225   named_labels = NULL_TREE;
1226 }
1227
1228 /* Exit a binding level.
1229    Pop the level off, and restore the state of the identifier-decl mappings
1230    that were in effect when this level was entered.
1231
1232    If KEEP == 1, this level had explicit declarations, so
1233    and create a "block" (a BLOCK node) for the level
1234    to record its declarations and subblocks for symbol table output.
1235
1236    If FUNCTIONBODY is nonzero, this level is the body of a function,
1237    so create a block as if KEEP were set and also clear out all
1238    label names.
1239
1240    If REVERSE is nonzero, reverse the order of decls before putting
1241    them into the BLOCK.  */
1242
1243 tree
1244 poplevel (keep, reverse, functionbody)
1245      int keep;
1246      int reverse;
1247      int functionbody;
1248 {
1249   register tree link;
1250   /* The chain of decls was accumulated in reverse order.
1251      Put it into forward order, just for cleanliness.  */
1252   tree decls;
1253   int tmp = functionbody;
1254   int real_functionbody;
1255   tree tags;
1256   tree subblocks;
1257   tree block = NULL_TREE;
1258   tree decl;
1259   int block_previously_created;
1260   int leaving_for_scope;
1261
1262   if (cfun && !doing_semantic_analysis_p ())
1263     return NULL_TREE;
1264
1265   my_friendly_assert (current_binding_level->parm_flag != 2,
1266                       19990916);
1267
1268   real_functionbody = (current_binding_level->keep == 2
1269                        ? ((functionbody = 0), tmp) : functionbody);
1270   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1271   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1272
1273   my_friendly_assert (!current_binding_level->class_shadowed,
1274                       19990414);
1275
1276   /* We used to use KEEP == 2 to indicate that the new block should go
1277      at the beginning of the list of blocks at this binding level,
1278      rather than the end.  This hack is no longer used.  */
1279   my_friendly_assert (keep == 0 || keep == 1, 0);
1280
1281   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1282                       (HOST_WIDE_INT) current_binding_level->level_chain,
1283                       current_binding_level->parm_flag,
1284                       current_binding_level->keep);
1285
1286   if (current_binding_level->keep == 1)
1287     keep = 1;
1288
1289   /* Get the decls in the order they were written.
1290      Usually current_binding_level->names is in reverse order.
1291      But parameter decls were previously put in forward order.  */
1292
1293   if (reverse)
1294     current_binding_level->names
1295       = decls = nreverse (current_binding_level->names);
1296   else
1297     decls = current_binding_level->names;
1298
1299   /* Output any nested inline functions within this block
1300      if they weren't already output.  */
1301   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1302     if (TREE_CODE (decl) == FUNCTION_DECL
1303         && ! TREE_ASM_WRITTEN (decl)
1304         && DECL_INITIAL (decl) != NULL_TREE
1305         && TREE_ADDRESSABLE (decl)
1306         && decl_function_context (decl) == current_function_decl)
1307       {
1308         /* If this decl was copied from a file-scope decl
1309            on account of a block-scope extern decl,
1310            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1311         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1312           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1313         else
1314           {
1315             push_function_context ();
1316             output_inline_function (decl);
1317             pop_function_context ();
1318           }
1319       }
1320
1321   /* When not in function-at-a-time mode, expand_end_bindings will
1322      warn about unused variables.  But, in function-at-a-time mode
1323      expand_end_bindings is not passed the list of variables in the
1324      current scope, and therefore no warning is emitted.  So, we
1325      explicitly warn here.  */
1326   if (!processing_template_decl)
1327     warn_about_unused_variables (getdecls ());
1328
1329   /* If there were any declarations or structure tags in that level,
1330      or if this level is a function body,
1331      create a BLOCK to record them for the life of this function.  */
1332   block = NULL_TREE;
1333   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1334   if (block_previously_created)
1335     block = current_binding_level->this_block;
1336   else if (keep == 1 || functionbody)
1337     block = make_node (BLOCK);
1338   if (block != NULL_TREE)
1339     {
1340       if (block_previously_created)
1341         {
1342           if (decls || tags || subblocks)
1343             {
1344               if (BLOCK_VARS (block))
1345                 warning ("internal compiler error: debugging info corrupted");
1346
1347               BLOCK_VARS (block) = decls;
1348
1349               /* We can have previous subblocks and new subblocks when
1350                  doing fixup_gotos with complex cleanups.  We chain the new
1351                  subblocks onto the end of any pre-existing subblocks.  */
1352               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1353                                                  subblocks);
1354             }
1355         }
1356       else
1357         {
1358           BLOCK_VARS (block) = decls;
1359           BLOCK_SUBBLOCKS (block) = subblocks;
1360         }
1361     }
1362
1363   /* In each subblock, record that this is its superior.  */
1364   if (keep >= 0)
1365     for (link = subblocks; link; link = TREE_CHAIN (link))
1366       BLOCK_SUPERCONTEXT (link) = block;
1367
1368   /* We still support the old for-scope rules, whereby the variables
1369      in a for-init statement were in scope after the for-statement
1370      ended.  We only use the new rules in flag_new_for_scope is
1371      nonzero.  */
1372   leaving_for_scope
1373     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1374
1375   /* Remove declarations for all the DECLs in this level.  */
1376   for (link = decls; link; link = TREE_CHAIN (link))
1377     {
1378       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1379         {
1380           tree outer_binding
1381             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1382           tree ns_binding;
1383
1384           if (!outer_binding)
1385             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1386           else
1387             ns_binding = NULL_TREE;
1388
1389           if (outer_binding
1390               && (BINDING_LEVEL (outer_binding)
1391                   == current_binding_level->level_chain))
1392             /* We have something like:
1393
1394                  int i;
1395                  for (int i; ;);
1396
1397                and we are leaving the `for' scope.  There's no reason to
1398                keep the binding of the inner `i' in this case.  */
1399             pop_binding (DECL_NAME (link), link);
1400           else if ((outer_binding
1401                     && (TREE_CODE (BINDING_VALUE (outer_binding))
1402                         == TYPE_DECL))
1403                    || (ns_binding
1404                        && TREE_CODE (ns_binding) == TYPE_DECL))
1405             /* Here, we have something like:
1406
1407                  typedef int I;
1408
1409                  void f () {
1410                    for (int I; ;);
1411                  }
1412
1413                We must pop the for-scope binding so we know what's a
1414                type and what isn't.  */
1415             pop_binding (DECL_NAME (link), link);
1416           else
1417             {
1418               /* Mark this VAR_DECL as dead so that we can tell we left it
1419                  there only for backward compatibility.  */
1420               DECL_DEAD_FOR_LOCAL (link) = 1;
1421
1422               /* Keep track of what should of have happenned when we
1423                  popped the binding.  */
1424               if (outer_binding && BINDING_VALUE (outer_binding))
1425                 DECL_SHADOWED_FOR_VAR (link)
1426                   = BINDING_VALUE (outer_binding);
1427
1428               /* Add it to the list of dead variables in the next
1429                  outermost binding to that we can remove these when we
1430                  leave that binding.  */
1431               current_binding_level->level_chain->dead_vars_from_for
1432                 = tree_cons (NULL_TREE, link,
1433                              current_binding_level->level_chain->
1434                              dead_vars_from_for);
1435
1436               /* Although we don't pop the CPLUS_BINDING, we do clear
1437                  its BINDING_LEVEL since the level is going away now.  */
1438               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1439                 = 0;
1440             }
1441         }
1442       else
1443         {
1444           /* Remove the binding.  */
1445           decl = link;
1446           if (TREE_CODE (decl) == TREE_LIST)
1447             decl = TREE_VALUE (decl);
1448           if (DECL_P (decl))
1449             pop_binding (DECL_NAME (decl), decl);
1450           else if (TREE_CODE (decl) == OVERLOAD)
1451             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1452           else
1453             my_friendly_abort (0);
1454         }
1455     }
1456
1457   /* Remove declarations for any `for' variables from inner scopes
1458      that we kept around.  */
1459   for (link = current_binding_level->dead_vars_from_for;
1460        link; link = TREE_CHAIN (link))
1461     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1462
1463   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1464   for (link = current_binding_level->type_shadowed;
1465        link; link = TREE_CHAIN (link))
1466     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1467
1468   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1469   for (link = current_binding_level->shadowed_labels;
1470        link;
1471        link = TREE_CHAIN (link))
1472     pop_label (link);
1473
1474   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1475      list if a `using' declaration put them there.  The debugging
1476      back-ends won't understand OVERLOAD, so we remove them here.
1477      Because the BLOCK_VARS are (temporarily) shared with
1478      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1479      popped all the bindings.  */
1480   if (block)
1481     {
1482       tree* d;
1483
1484       for (d = &BLOCK_VARS (block); *d; )
1485         {
1486           if (TREE_CODE (*d) == TREE_LIST)
1487             *d = TREE_CHAIN (*d);
1488           else
1489             d = &TREE_CHAIN (*d);
1490         }
1491     }
1492
1493   /* If the level being exited is the top level of a function,
1494      check over all the labels.  */
1495   if (functionbody)
1496     {
1497       /* Since this is the top level block of a function, the vars are
1498          the function's parameters.  Don't leave them in the BLOCK
1499          because they are found in the FUNCTION_DECL instead.  */
1500       BLOCK_VARS (block) = 0;
1501       pop_labels (block);
1502     }
1503
1504   /* Any uses of undefined labels now operate under constraints
1505      of next binding contour.  */
1506   if (cfun)
1507     {
1508       struct binding_level *level_chain;
1509       level_chain = current_binding_level->level_chain;
1510       if (level_chain)
1511         {
1512           struct named_label_list *labels;
1513           for (labels = named_label_uses; labels; labels = labels->next)
1514             if (labels->binding_level == current_binding_level)
1515               {
1516                 labels->binding_level = level_chain;
1517                 labels->names_in_scope = level_chain->names;
1518               }
1519         }
1520     }
1521
1522   tmp = current_binding_level->keep;
1523
1524   pop_binding_level ();
1525   if (functionbody)
1526     DECL_INITIAL (current_function_decl) = block;
1527   else if (block)
1528     {
1529       if (!block_previously_created)
1530         current_binding_level->blocks
1531           = chainon (current_binding_level->blocks, block);
1532     }
1533   /* If we did not make a block for the level just exited,
1534      any blocks made for inner levels
1535      (since they cannot be recorded as subblocks in that level)
1536      must be carried forward so they will later become subblocks
1537      of something else.  */
1538   else if (subblocks)
1539     current_binding_level->blocks
1540       = chainon (current_binding_level->blocks, subblocks);
1541
1542   /* Each and every BLOCK node created here in `poplevel' is important
1543      (e.g. for proper debugging information) so if we created one
1544      earlier, mark it as "used".  */
1545   if (block)
1546     TREE_USED (block) = 1;
1547
1548   /* Take care of compiler's internal binding structures.  */
1549   if (tmp == 2)
1550     {
1551       tree scope_stmts;
1552
1553       scope_stmts
1554         = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1555       if (block)
1556         {
1557           SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1558           SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1559         }
1560
1561       block = poplevel (keep, reverse, functionbody);
1562     }
1563
1564   return block;
1565 }
1566
1567 /* Delete the node BLOCK from the current binding level.
1568    This is used for the block inside a stmt expr ({...})
1569    so that the block can be reinserted where appropriate.  */
1570
1571 void
1572 delete_block (block)
1573      tree block;
1574 {
1575   tree t;
1576   if (current_binding_level->blocks == block)
1577     current_binding_level->blocks = TREE_CHAIN (block);
1578   for (t = current_binding_level->blocks; t;)
1579     {
1580       if (TREE_CHAIN (t) == block)
1581         TREE_CHAIN (t) = TREE_CHAIN (block);
1582       else
1583         t = TREE_CHAIN (t);
1584     }
1585   TREE_CHAIN (block) = NULL_TREE;
1586   /* Clear TREE_USED which is always set by poplevel.
1587      The flag is set again if insert_block is called.  */
1588   TREE_USED (block) = 0;
1589 }
1590
1591 /* Insert BLOCK at the end of the list of subblocks of the
1592    current binding level.  This is used when a BIND_EXPR is expanded,
1593    to handle the BLOCK node inside the BIND_EXPR.  */
1594
1595 void
1596 insert_block (block)
1597      tree block;
1598 {
1599   TREE_USED (block) = 1;
1600   current_binding_level->blocks
1601     = chainon (current_binding_level->blocks, block);
1602 }
1603
1604 /* Set the BLOCK node for the innermost scope
1605    (the one we are currently in).  */
1606
1607 void
1608 set_block (block)
1609     register tree block;
1610 {
1611   current_binding_level->this_block = block;
1612 }
1613
1614 /* Do a pushlevel for class declarations.  */
1615
1616 void
1617 pushlevel_class ()
1618 {
1619   register struct binding_level *newlevel;
1620
1621   /* Reuse or create a struct for this binding level.  */
1622 #if defined(DEBUG_CP_BINDING_LEVELS)
1623   if (0)
1624 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1625   if (free_binding_level)
1626 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1627     {
1628       newlevel = free_binding_level;
1629       free_binding_level = free_binding_level->level_chain;
1630     }
1631   else
1632     newlevel = make_binding_level ();
1633
1634 #if defined(DEBUG_CP_BINDING_LEVELS)
1635   is_class_level = 1;
1636 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1637
1638   push_binding_level (newlevel, 0, 0);
1639
1640   class_binding_level = current_binding_level;
1641   class_binding_level->parm_flag = 2;
1642   class_binding_level->this_class = current_class_type;
1643 }
1644
1645 /* ...and a poplevel for class declarations.  */
1646
1647 void
1648 poplevel_class ()
1649 {
1650   register struct binding_level *level = class_binding_level;
1651   tree shadowed;
1652
1653   my_friendly_assert (level != 0, 354);
1654
1655   /* If we're leaving a toplevel class, don't bother to do the setting
1656      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1657      shouldn't even be used when current_class_type isn't set, and second,
1658      if we don't touch it here, we're able to use the cache effect if the
1659      next time we're entering a class scope, it is the same class.  */
1660   if (current_class_depth != 1)
1661     {
1662       struct binding_level* b;
1663
1664       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1665       for (shadowed = level->class_shadowed;
1666            shadowed;
1667            shadowed = TREE_CHAIN (shadowed))
1668         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1669
1670       /* Find the next enclosing class, and recreate
1671          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1672       b = level->level_chain;
1673       while (b && b->parm_flag != 2)
1674         b = b->level_chain;
1675
1676       if (b)
1677         for (shadowed = b->class_shadowed;
1678              shadowed;
1679              shadowed = TREE_CHAIN (shadowed))
1680           {
1681             tree t;
1682
1683             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1684             while (t && BINDING_LEVEL (t) != b)
1685               t = TREE_CHAIN (t);
1686
1687             if (t)
1688               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1689                 = BINDING_VALUE (t);
1690           }
1691     }
1692   else
1693     /* Remember to save what IDENTIFIER's were bound in this scope so we
1694        can recover from cache misses.  */
1695     {
1696       previous_class_type = current_class_type;
1697       previous_class_values = class_binding_level->class_shadowed;
1698     }
1699   for (shadowed = level->type_shadowed;
1700        shadowed;
1701        shadowed = TREE_CHAIN (shadowed))
1702     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1703
1704   /* Remove the bindings for all of the class-level declarations.  */
1705   for (shadowed = level->class_shadowed;
1706        shadowed;
1707        shadowed = TREE_CHAIN (shadowed))
1708     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1709
1710   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1711                       (HOST_WIDE_INT) class_binding_level->level_chain,
1712                       class_binding_level->parm_flag,
1713                       class_binding_level->keep);
1714
1715   /* Now, pop out of the binding level which we created up in the
1716      `pushlevel_class' routine.  */
1717 #if defined(DEBUG_CP_BINDING_LEVELS)
1718   is_class_level = 1;
1719 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1720
1721   pop_binding_level ();
1722 }
1723
1724 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1725    for any names in enclosing classes.  */
1726
1727 void
1728 clear_identifier_class_values ()
1729 {
1730   tree t;
1731
1732   if (!class_binding_level)
1733     return;
1734
1735   for (t = class_binding_level->class_shadowed;
1736        t;
1737        t = TREE_CHAIN (t))
1738     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1739 }
1740
1741 /* Returns non-zero if T is a virtual function table.  */
1742
1743 int
1744 vtable_decl_p (t, data)
1745      tree t;
1746      void *data ATTRIBUTE_UNUSED;
1747 {
1748   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1749 }
1750
1751 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1752    functions.  */
1753
1754 int
1755 vtype_decl_p (t, data)
1756      tree t;
1757      void *data ATTRIBUTE_UNUSED;
1758 {
1759   return (TREE_CODE (t) == TYPE_DECL
1760           && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1761           && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
1762 }
1763
1764 /* Return the declarations that are members of the namespace NS.  */
1765
1766 tree
1767 cp_namespace_decls (ns)
1768      tree ns;
1769 {
1770   return NAMESPACE_LEVEL (ns)->names;
1771 }
1772
1773 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1774    itself, calling F for each.  The DATA is passed to F as well.  */
1775
1776 static int
1777 walk_namespaces_r (namespace, f, data)
1778      tree namespace;
1779      walk_namespaces_fn f;
1780      void *data;
1781 {
1782   tree current;
1783   int result = 0;
1784
1785   result |= (*f) (namespace, data);
1786
1787   for (current = cp_namespace_decls (namespace);
1788        current;
1789        current = TREE_CHAIN (current))
1790     {
1791       if (TREE_CODE (current) != NAMESPACE_DECL
1792           || DECL_NAMESPACE_ALIAS (current))
1793         continue;
1794       if (!DECL_LANG_SPECIFIC (current))
1795         {
1796           /* Hmm. std. */
1797           my_friendly_assert (current == std_node, 393);
1798           continue;
1799         }
1800
1801       /* We found a namespace.  */
1802       result |= walk_namespaces_r (current, f, data);
1803     }
1804
1805   return result;
1806 }
1807
1808 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1809    F as well.  */
1810
1811 int
1812 walk_namespaces (f, data)
1813      walk_namespaces_fn f;
1814      void *data;
1815 {
1816   return walk_namespaces_r (global_namespace, f, data);
1817 }
1818
1819 struct walk_globals_data {
1820   walk_globals_pred p;
1821   walk_globals_fn f;
1822   void *data;
1823 };
1824
1825 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1826    for which P returns non-zero, call F with its address.  If any call
1827    to F returns a non-zero value, return a non-zero value.  */
1828
1829 static int
1830 walk_globals_r (namespace, data)
1831      tree namespace;
1832      void *data;
1833 {
1834   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1835   walk_globals_pred p = wgd->p;
1836   walk_globals_fn f = wgd->f;
1837   void *d = wgd->data;
1838   tree *t;
1839   int result = 0;
1840
1841   t = &NAMESPACE_LEVEL (namespace)->names;
1842
1843   while (*t)
1844     {
1845       tree glbl = *t;
1846
1847       if ((*p) (glbl, d))
1848         result |= (*f) (t, d);
1849
1850       /* If F changed *T, then *T still points at the next item to
1851          examine.  */
1852       if (*t == glbl)
1853         t = &TREE_CHAIN (*t);
1854     }
1855
1856   return result;
1857 }
1858
1859 /* Walk the global declarations.  Whenever one is found for which P
1860    returns non-zero, call F with its address.  If any call to F
1861    returns a non-zero value, return a non-zero value.  */
1862
1863 int
1864 walk_globals (p, f, data)
1865      walk_globals_pred p;
1866      walk_globals_fn f;
1867      void *data;
1868 {
1869   struct walk_globals_data wgd;
1870   wgd.p = p;
1871   wgd.f = f;
1872   wgd.data = data;
1873
1874   return walk_namespaces (walk_globals_r, &wgd);
1875 }
1876
1877 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1878    DATA is non-NULL, this is the last time we will call
1879    wrapup_global_declarations for this NAMESPACE.  */
1880
1881 int
1882 wrapup_globals_for_namespace (namespace, data)
1883      tree namespace;
1884      void *data;
1885 {
1886   tree globals = cp_namespace_decls (namespace);
1887   int len = list_length (globals);
1888   tree *vec = (tree *) alloca (sizeof (tree) * len);
1889   int i;
1890   int result;
1891   tree decl;
1892   int last_time = (data != 0);
1893
1894   if (last_time && namespace == global_namespace)
1895     /* Let compile_file handle the global namespace.  */
1896     return 0;
1897
1898   /* Process the decls in reverse order--earliest first.
1899      Put them into VEC from back to front, then take out from front.  */
1900
1901   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1902     {
1903       /* Pretend we've output an unused static variable.  This ensures
1904          that the toplevel __FUNCTION__ etc won't be emitted, unless
1905          needed. */
1906       if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1907           && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1908         {
1909           TREE_ASM_WRITTEN (decl) = 1;
1910           DECL_IGNORED_P (decl) = 1;
1911         }
1912       vec[len - i - 1] = decl;
1913     }
1914
1915   if (last_time)
1916     {
1917       check_global_declarations (vec, len);
1918       return 0;
1919     }
1920
1921   /* Temporarily mark vtables as external.  That prevents
1922      wrapup_global_declarations from writing them out; we must process
1923      them ourselves in finish_vtable_vardecl.  */
1924   for (i = 0; i < len; ++i)
1925     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1926       {
1927         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1928         DECL_EXTERNAL (vec[i]) = 1;
1929       }
1930
1931   /* Write out any globals that need to be output.  */
1932   result = wrapup_global_declarations (vec, len);
1933
1934   /* Undo the hack to DECL_EXTERNAL above.  */
1935   for (i = 0; i < len; ++i)
1936     if (vtable_decl_p (vec[i], /*data=*/0)
1937         && DECL_NOT_REALLY_EXTERN (vec[i]))
1938       {
1939         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1940         DECL_EXTERNAL (vec[i]) = 0;
1941       }
1942
1943   return result;
1944 }
1945
1946 \f
1947 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1948
1949 static void
1950 mark_binding_level (arg)
1951      void *arg;
1952 {
1953   struct binding_level *lvl = *(struct binding_level **)arg;
1954
1955   while (lvl)
1956     {
1957       ggc_mark_tree (lvl->names);
1958       ggc_mark_tree (lvl->tags);
1959       ggc_mark_tree (lvl->usings);
1960       ggc_mark_tree (lvl->using_directives);
1961       ggc_mark_tree (lvl->class_shadowed);
1962       ggc_mark_tree (lvl->type_shadowed);
1963       ggc_mark_tree (lvl->shadowed_labels);
1964       ggc_mark_tree (lvl->blocks);
1965       ggc_mark_tree (lvl->this_block);
1966       ggc_mark_tree (lvl->this_class);
1967       ggc_mark_tree (lvl->incomplete);
1968       ggc_mark_tree (lvl->dead_vars_from_for);
1969
1970       lvl = lvl->level_chain;
1971     }
1972 }
1973 \f
1974 /* For debugging.  */
1975 static int no_print_functions = 0;
1976 static int no_print_builtins = 0;
1977
1978 void
1979 print_binding_level (lvl)
1980      struct binding_level *lvl;
1981 {
1982   tree t;
1983   int i = 0, len;
1984   fprintf (stderr, " blocks=");
1985   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1986   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1987            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1988   if (lvl->tag_transparent)
1989     fprintf (stderr, " tag-transparent");
1990   if (lvl->more_cleanups_ok)
1991     fprintf (stderr, " more-cleanups-ok");
1992   if (lvl->have_cleanups)
1993     fprintf (stderr, " have-cleanups");
1994   fprintf (stderr, "\n");
1995   if (lvl->names)
1996     {
1997       fprintf (stderr, " names:\t");
1998       /* We can probably fit 3 names to a line?  */
1999       for (t = lvl->names; t; t = TREE_CHAIN (t))
2000         {
2001           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2002             continue;
2003           if (no_print_builtins
2004               && (TREE_CODE (t) == TYPE_DECL)
2005               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2006             continue;
2007
2008           /* Function decls tend to have longer names.  */
2009           if (TREE_CODE (t) == FUNCTION_DECL)
2010             len = 3;
2011           else
2012             len = 2;
2013           i += len;
2014           if (i > 6)
2015             {
2016               fprintf (stderr, "\n\t");
2017               i = len;
2018             }
2019           print_node_brief (stderr, "", t, 0);
2020           if (t == error_mark_node)
2021             break;
2022         }
2023       if (i)
2024         fprintf (stderr, "\n");
2025     }
2026   if (lvl->tags)
2027     {
2028       fprintf (stderr, " tags:\t");
2029       i = 0;
2030       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2031         {
2032           if (TREE_PURPOSE (t) == NULL_TREE)
2033             len = 3;
2034           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2035             len = 2;
2036           else
2037             len = 4;
2038           i += len;
2039           if (i > 5)
2040             {
2041               fprintf (stderr, "\n\t");
2042               i = len;
2043             }
2044           if (TREE_PURPOSE (t) == NULL_TREE)
2045             {
2046               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2047               fprintf (stderr, ">");
2048             }
2049           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2050             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2051           else
2052             {
2053               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2054               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055               fprintf (stderr, ">");
2056             }
2057         }
2058       if (i)
2059         fprintf (stderr, "\n");
2060     }
2061   if (lvl->class_shadowed)
2062     {
2063       fprintf (stderr, " class-shadowed:");
2064       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2065         {
2066           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2067         }
2068       fprintf (stderr, "\n");
2069     }
2070   if (lvl->type_shadowed)
2071     {
2072       fprintf (stderr, " type-shadowed:");
2073       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2074         {
2075           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2076         }
2077       fprintf (stderr, "\n");
2078     }
2079 }
2080
2081 void
2082 print_other_binding_stack (stack)
2083      struct binding_level *stack;
2084 {
2085   struct binding_level *level;
2086   for (level = stack; level != global_binding_level; level = level->level_chain)
2087     {
2088       fprintf (stderr, "binding level ");
2089       fprintf (stderr, HOST_PTR_PRINTF, level);
2090       fprintf (stderr, "\n");
2091       print_binding_level (level);
2092     }
2093 }
2094
2095 void
2096 print_binding_stack ()
2097 {
2098   struct binding_level *b;
2099   fprintf (stderr, "current_binding_level=");
2100   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2101   fprintf (stderr, "\nclass_binding_level=");
2102   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2103   fprintf (stderr, "\nglobal_binding_level=");
2104   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2105   fprintf (stderr, "\n");
2106   if (class_binding_level)
2107     {
2108       for (b = class_binding_level; b; b = b->level_chain)
2109         if (b == current_binding_level)
2110           break;
2111       if (b)
2112         b = class_binding_level;
2113       else
2114         b = current_binding_level;
2115     }
2116   else
2117     b = current_binding_level;
2118   print_other_binding_stack (b);
2119   fprintf (stderr, "global:\n");
2120   print_binding_level (global_binding_level);
2121 }
2122
2123 /* Namespace binding access routines: The namespace_bindings field of
2124    the identifier is polymorphic, with three possible values:
2125    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2126    indicating the BINDING_VALUE of global_namespace. */
2127
2128 /* Check whether the a binding for the name to scope is known.
2129    Assumes that the bindings of the name are already a list
2130    of bindings. Returns the binding found, or NULL_TREE. */
2131
2132 static tree
2133 find_binding (name, scope)
2134      tree name;
2135      tree scope;
2136 {
2137   tree iter, prev = NULL_TREE;
2138
2139   scope = ORIGINAL_NAMESPACE (scope);
2140
2141   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2142        iter = TREE_CHAIN (iter))
2143     {
2144       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2145       if (BINDING_SCOPE (iter) == scope)
2146         {
2147           /* Move binding found to the front of the list, so
2148              subsequent lookups will find it faster. */
2149           if (prev)
2150             {
2151               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2152               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2153               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2154             }
2155           return iter;
2156         }
2157       prev = iter;
2158     }
2159   return NULL_TREE;
2160 }
2161
2162 /* Always returns a binding for name in scope. If the
2163    namespace_bindings is not a list, convert it to one first.
2164    If no binding is found, make a new one. */
2165
2166 tree
2167 binding_for_name (name, scope)
2168      tree name;
2169      tree scope;
2170 {
2171   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2172   tree result;
2173
2174   scope = ORIGINAL_NAMESPACE (scope);
2175
2176   if (b && TREE_CODE (b) != CPLUS_BINDING)
2177     {
2178       /* Get rid of optimization for global scope. */
2179       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2180       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2181       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2182     }
2183   if (b && (result = find_binding (name, scope)))
2184     return result;
2185   /* Not found, make a new one. */
2186   result = make_node (CPLUS_BINDING);
2187   TREE_CHAIN (result) = b;
2188   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2189   BINDING_SCOPE (result) = scope;
2190   BINDING_TYPE (result) = NULL_TREE;
2191   BINDING_VALUE (result) = NULL_TREE;
2192   return result;
2193 }
2194
2195 /* Return the binding value for name in scope, considering that
2196    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2197
2198 tree
2199 namespace_binding (name, scope)
2200      tree name;
2201      tree scope;
2202 {
2203   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2204   if (b == NULL_TREE)
2205     return NULL_TREE;
2206   if (scope == NULL_TREE)
2207     scope = global_namespace;
2208   if (TREE_CODE (b) != CPLUS_BINDING)
2209     return (scope == global_namespace) ? b : NULL_TREE;
2210   name = find_binding (name,scope);
2211   if (name == NULL_TREE)
2212     return name;
2213   return BINDING_VALUE (name);
2214 }
2215
2216 /* Set the binding value for name in scope. If modifying the binding
2217    of global_namespace is attempted, try to optimize it. */
2218
2219 void
2220 set_namespace_binding (name, scope, val)
2221      tree name;
2222      tree scope;
2223      tree val;
2224 {
2225   tree b;
2226
2227   if (scope == NULL_TREE)
2228     scope = global_namespace;
2229
2230   if (scope == global_namespace)
2231     {
2232       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2233       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2234         {
2235           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2236           return;
2237         }
2238     }
2239   b = binding_for_name (name, scope);
2240   BINDING_VALUE (b) = val;
2241 }
2242
2243 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2244    select a name that is unique to this compilation unit.  */
2245
2246 void
2247 push_namespace (name)
2248      tree name;
2249 {
2250   tree d = NULL_TREE;
2251   int need_new = 1;
2252   int implicit_use = 0;
2253   int global = 0;
2254   if (!global_namespace)
2255     {
2256       /* This must be ::. */
2257       my_friendly_assert (name == get_identifier ("::"), 377);
2258       global = 1;
2259     }
2260   else if (!name)
2261     {
2262       /* The name of anonymous namespace is unique for the translation
2263          unit.  */
2264       if (!anonymous_namespace_name)
2265         anonymous_namespace_name = get_file_function_name ('N');
2266       name = anonymous_namespace_name;
2267       d = IDENTIFIER_NAMESPACE_VALUE (name);
2268       if (d)
2269         /* Reopening anonymous namespace.  */
2270         need_new = 0;
2271       implicit_use = 1;
2272     }
2273   else if (current_namespace == global_namespace
2274            && name == DECL_NAME (std_node))
2275     {
2276       in_std++;
2277       return;
2278     }
2279   else
2280     {
2281       /* Check whether this is an extended namespace definition. */
2282       d = IDENTIFIER_NAMESPACE_VALUE (name);
2283       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2284         {
2285           need_new = 0;
2286           if (DECL_NAMESPACE_ALIAS (d))
2287             {
2288               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2289                         d, DECL_NAMESPACE_ALIAS (d));
2290               d = DECL_NAMESPACE_ALIAS (d);
2291             }
2292         }
2293     }
2294
2295   if (need_new)
2296     {
2297       /* Make a new namespace, binding the name to it. */
2298       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2299       /* The global namespace is not pushed, and the global binding
2300          level is set elsewhere.  */
2301       if (!global)
2302         {
2303           d = pushdecl (d);
2304           pushlevel (0);
2305           declare_namespace_level ();
2306           NAMESPACE_LEVEL (d) = current_binding_level;
2307         }
2308     }
2309   else
2310     resume_binding_level (NAMESPACE_LEVEL (d));
2311
2312   if (implicit_use)
2313     do_using_directive (d);
2314   /* Enter the name space. */
2315   current_namespace = d;
2316 }
2317
2318 /* Pop from the scope of the current namespace.  */
2319
2320 void
2321 pop_namespace ()
2322 {
2323   if (current_namespace == global_namespace)
2324     {
2325       my_friendly_assert (in_std>0, 980421);
2326       in_std--;
2327       return;
2328     }
2329   current_namespace = CP_DECL_CONTEXT (current_namespace);
2330   /* The binding level is not popped, as it might be re-opened later.  */
2331   suspend_binding_level ();
2332 }
2333
2334 /* Push into the scope of the namespace NS, even if it is deeply
2335    nested within another namespace.  */
2336
2337 void
2338 push_nested_namespace (ns)
2339      tree ns;
2340 {
2341   if (ns == global_namespace)
2342     push_to_top_level ();
2343   else
2344     {
2345       push_nested_namespace (CP_DECL_CONTEXT (ns));
2346       push_namespace (DECL_NAME (ns));
2347     }
2348 }
2349
2350 /* Pop back from the scope of the namespace NS, which was previously
2351    entered with push_nested_namespace.  */
2352
2353 void
2354 pop_nested_namespace (ns)
2355      tree ns;
2356 {
2357   while (ns != global_namespace)
2358     {
2359       pop_namespace ();
2360       ns = CP_DECL_CONTEXT (ns);
2361     }
2362
2363   pop_from_top_level ();
2364 }
2365
2366 \f
2367 /* Subroutines for reverting temporarily to top-level for instantiation
2368    of templates and such.  We actually need to clear out the class- and
2369    local-value slots of all identifiers, so that only the global values
2370    are at all visible.  Simply setting current_binding_level to the global
2371    scope isn't enough, because more binding levels may be pushed.  */
2372 struct saved_scope *scope_chain;
2373
2374 /* Mark ST for GC.  */
2375
2376 static void
2377 mark_stmt_tree (st)
2378      struct stmt_tree *st;
2379 {
2380   ggc_mark_tree (st->x_last_stmt);
2381   ggc_mark_tree (st->x_last_expr_type);
2382 }
2383
2384 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2385
2386 static void
2387 mark_saved_scope (arg)
2388      void *arg;
2389 {
2390   struct saved_scope *t = *(struct saved_scope **)arg;
2391   while (t)
2392     {
2393       mark_binding_level (&t->class_bindings);
2394       ggc_mark_tree (t->old_bindings);
2395       ggc_mark_tree (t->old_namespace);
2396       ggc_mark_tree (t->class_name);
2397       ggc_mark_tree (t->class_type);
2398       ggc_mark_tree (t->access_specifier);
2399       ggc_mark_tree (t->function_decl);
2400       if (t->lang_base)
2401         ggc_mark_tree_varray (t->lang_base);
2402       ggc_mark_tree (t->lang_name);
2403       ggc_mark_tree (t->x_function_parms);
2404       ggc_mark_tree (t->template_parms);
2405       ggc_mark_tree (t->x_previous_class_type);
2406       ggc_mark_tree (t->x_previous_class_values);
2407       ggc_mark_tree (t->x_saved_tree);
2408       ggc_mark_tree (t->incomplete);
2409       ggc_mark_tree (t->lookups);
2410
2411       mark_stmt_tree (&t->x_stmt_tree);
2412       mark_binding_level (&t->bindings);
2413       t = t->prev;
2414     }
2415 }
2416
2417 static tree
2418 store_bindings (names, old_bindings)
2419      tree names, old_bindings;
2420 {
2421   tree t;
2422   for (t = names; t; t = TREE_CHAIN (t))
2423     {
2424       tree binding, t1, id;
2425
2426       if (TREE_CODE (t) == TREE_LIST)
2427         id = TREE_PURPOSE (t);
2428       else
2429         id = DECL_NAME (t);
2430
2431       if (!id
2432           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2433              we have no IDENTIFIER_BINDING if we have left the class
2434              scope, but cached the class-level declarations.  */
2435           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2436         continue;
2437
2438       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2439         if (TREE_VEC_ELT (t1, 0) == id)
2440           goto skip_it;
2441
2442       binding = make_tree_vec (4);
2443
2444       if (id)
2445         {
2446           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2447           TREE_VEC_ELT (binding, 0) = id;
2448           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2449           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2450           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2451           IDENTIFIER_BINDING (id) = NULL_TREE;
2452           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2453         }
2454       TREE_CHAIN (binding) = old_bindings;
2455       old_bindings = binding;
2456     skip_it:
2457       ;
2458     }
2459   return old_bindings;
2460 }
2461
2462 void
2463 maybe_push_to_top_level (pseudo)
2464      int pseudo;
2465 {
2466   struct saved_scope *s;
2467   struct binding_level *b;
2468   tree old_bindings;
2469   int need_pop;
2470
2471   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2472
2473   b = scope_chain ? current_binding_level : 0;
2474
2475   /* If we're in the middle of some function, save our state.  */
2476   if (cfun)
2477     {
2478       need_pop = 1;
2479       push_function_context_to (NULL_TREE);
2480     }
2481   else
2482     need_pop = 0;
2483
2484   old_bindings = NULL_TREE;
2485   if (scope_chain && previous_class_type)
2486     old_bindings = store_bindings (previous_class_values, old_bindings);
2487
2488   /* Have to include global_binding_level, because class-level decls
2489      aren't listed anywhere useful.  */
2490   for (; b; b = b->level_chain)
2491     {
2492       tree t;
2493
2494       /* Template IDs are inserted into the global level. If they were
2495          inserted into namespace level, finish_file wouldn't find them
2496          when doing pending instantiations. Therefore, don't stop at
2497          namespace level, but continue until :: .  */
2498       if (b == global_binding_level || (pseudo && b->template_parms_p))
2499         break;
2500
2501       old_bindings = store_bindings (b->names, old_bindings);
2502       /* We also need to check class_shadowed to save class-level type
2503          bindings, since pushclass doesn't fill in b->names.  */
2504       if (b->parm_flag == 2)
2505         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2506
2507       /* Unwind type-value slots back to top level.  */
2508       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2509         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2510     }
2511   s->prev = scope_chain;
2512   s->old_bindings = old_bindings;
2513   s->bindings = b;
2514   s->need_pop_function_context = need_pop;
2515   s->function_decl = current_function_decl;
2516
2517   scope_chain = s;
2518   current_function_decl = NULL_TREE;
2519   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2520   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2521   current_lang_name = lang_name_cplusplus;
2522   strict_prototype = strict_prototypes_lang_cplusplus;
2523   current_namespace = global_namespace;
2524 }
2525
2526 void
2527 push_to_top_level ()
2528 {
2529   maybe_push_to_top_level (0);
2530 }
2531
2532 void
2533 pop_from_top_level ()
2534 {
2535   struct saved_scope *s = scope_chain;
2536   tree t;
2537
2538   /* Clear out class-level bindings cache.  */
2539   if (previous_class_type)
2540     invalidate_class_lookup_cache ();
2541
2542   VARRAY_FREE (current_lang_base);
2543
2544   scope_chain = s->prev;
2545   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2546     {
2547       tree id = TREE_VEC_ELT (t, 0);
2548       if (id)
2549         {
2550           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2551           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2552           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2553         }
2554     }
2555
2556   if (current_lang_name == lang_name_cplusplus)
2557     strict_prototype = strict_prototypes_lang_cplusplus;
2558   else if (current_lang_name == lang_name_c)
2559     strict_prototype = strict_prototypes_lang_c;
2560
2561   /* If we were in the middle of compiling a function, restore our
2562      state.  */
2563   if (s->need_pop_function_context)
2564     pop_function_context_from (NULL_TREE);
2565   current_function_decl = s->function_decl;
2566
2567   free (s);
2568 }
2569 \f
2570 /* Push a definition of struct, union or enum tag "name".
2571    into binding_level "b".   "type" should be the type node,
2572    We assume that the tag "name" is not already defined.
2573
2574    Note that the definition may really be just a forward reference.
2575    In that case, the TYPE_SIZE will be a NULL_TREE.
2576
2577    C++ gratuitously puts all these tags in the name space.  */
2578
2579 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2580    record the shadowed value for this binding contour.  TYPE is
2581    the type that ID maps to.  */
2582
2583 static void
2584 set_identifier_type_value_with_scope (id, type, b)
2585      tree id;
2586      tree type;
2587      struct binding_level *b;
2588 {
2589   if (!b->namespace_p)
2590     {
2591       /* Shadow the marker, not the real thing, so that the marker
2592          gets restored later. */
2593       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2594       b->type_shadowed
2595         = tree_cons (id, old_type_value, b->type_shadowed);
2596     }
2597   else
2598     {
2599       tree binding = binding_for_name (id, current_namespace);
2600       BINDING_TYPE (binding) = type;
2601       /* Store marker instead of real type. */
2602       type = global_type_node;
2603     }
2604   SET_IDENTIFIER_TYPE_VALUE (id, type);
2605 }
2606
2607 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2608
2609 void
2610 set_identifier_type_value (id, type)
2611      tree id;
2612      tree type;
2613 {
2614   set_identifier_type_value_with_scope (id, type, current_binding_level);
2615 }
2616
2617 /* Return the type associated with id. */
2618
2619 tree
2620 identifier_type_value (id)
2621      tree id;
2622 {
2623   /* There is no type with that name, anywhere. */
2624   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2625     return NULL_TREE;
2626   /* This is not the type marker, but the real thing. */
2627   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2628     return REAL_IDENTIFIER_TYPE_VALUE (id);
2629   /* Have to search for it. It must be on the global level, now.
2630      Ask lookup_name not to return non-types. */
2631   id = lookup_name_real (id, 2, 1, 0);
2632   if (id)
2633     return TREE_TYPE (id);
2634   return NULL_TREE;
2635 }
2636
2637 /* Pop off extraneous binding levels left over due to syntax errors.
2638
2639    We don't pop past namespaces, as they might be valid.  */
2640
2641 void
2642 pop_everything ()
2643 {
2644 #ifdef DEBUG_CP_BINDING_LEVELS
2645   fprintf (stderr, "XXX entering pop_everything ()\n");
2646 #endif
2647   while (!toplevel_bindings_p ())
2648     {
2649       if (current_binding_level->parm_flag == 2)
2650         pop_nested_class ();
2651       else
2652         poplevel (0, 0, 0);
2653     }
2654 #ifdef DEBUG_CP_BINDING_LEVELS
2655   fprintf (stderr, "XXX leaving pop_everything ()\n");
2656 #endif
2657 }
2658
2659 /* The type TYPE is being declared.  If it is a class template, or a
2660    specialization of a class template, do any processing required and
2661    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2662    being declared a friend.  B is the binding level at which this TYPE
2663    should be bound.
2664
2665    Returns the TYPE_DECL for TYPE, which may have been altered by this
2666    processing.  */
2667
2668 static tree
2669 maybe_process_template_type_declaration (type, globalize, b)
2670      tree type;
2671      int globalize;
2672      struct binding_level* b;
2673 {
2674   tree decl = TYPE_NAME (type);
2675
2676   if (processing_template_parmlist)
2677     /* You can't declare a new template type in a template parameter
2678        list.  But, you can declare a non-template type:
2679
2680          template <class A*> struct S;
2681
2682        is a forward-declaration of `A'.  */
2683     ;
2684   else
2685     {
2686       maybe_check_template_type (type);
2687
2688       my_friendly_assert (IS_AGGR_TYPE (type)
2689                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2690
2691
2692       if (processing_template_decl)
2693         {
2694           /* This may change after the call to
2695              push_template_decl_real, but we want the original value.  */
2696           tree name = DECL_NAME (decl);
2697
2698           decl = push_template_decl_real (decl, globalize);
2699           /* If the current binding level is the binding level for the
2700              template parameters (see the comment in
2701              begin_template_parm_list) and the enclosing level is a class
2702              scope, and we're not looking at a friend, push the
2703              declaration of the member class into the class scope.  In the
2704              friend case, push_template_decl will already have put the
2705              friend into global scope, if appropriate.  */
2706           if (TREE_CODE (type) != ENUMERAL_TYPE
2707               && !globalize && b->template_parms_p
2708               && b->level_chain->parm_flag == 2)
2709             {
2710               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2711               /* Put this tag on the list of tags for the class, since
2712                  that won't happen below because B is not the class
2713                  binding level, but is instead the pseudo-global level.  */
2714               b->level_chain->tags =
2715                 tree_cons (name, type, b->level_chain->tags);
2716               if (!COMPLETE_TYPE_P (current_class_type))
2717                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2718             }
2719         }
2720     }
2721
2722   return decl;
2723 }
2724
2725 /* In C++, you don't have to write `struct S' to refer to `S'; you
2726    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2727    if the user had written `typedef struct S S'.  Create and return
2728    the TYPE_DECL for TYPE.  */
2729
2730 tree
2731 create_implicit_typedef (name, type)
2732      tree name;
2733      tree type;
2734 {
2735   tree decl;
2736
2737   decl = build_decl (TYPE_DECL, name, type);
2738   SET_DECL_ARTIFICIAL (decl);
2739   /* There are other implicit type declarations, like the one *within*
2740      a class that allows you to write `S::S'.  We must distinguish
2741      amongst these.  */
2742   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2743   TYPE_NAME (type) = decl;
2744
2745   return decl;
2746 }
2747
2748 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2749    Normally put it into the inner-most non-tag-transparent scope,
2750    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2751    The latter is needed for implicit declarations.  */
2752
2753 void
2754 pushtag (name, type, globalize)
2755      tree name, type;
2756      int globalize;
2757 {
2758   register struct binding_level *b;
2759
2760   b = current_binding_level;
2761   while (b->tag_transparent
2762          || (globalize && b->parm_flag == 2))
2763     b = b->level_chain;
2764
2765   b->tags = tree_cons (name, type, b->tags);
2766
2767   if (name)
2768     {
2769       /* Do C++ gratuitous typedefing.  */
2770       if (IDENTIFIER_TYPE_VALUE (name) != type)
2771         {
2772           register tree d = NULL_TREE;
2773           int in_class = 0;
2774           tree context = TYPE_CONTEXT (type);
2775
2776           if (! context)
2777             {
2778               tree cs = current_scope ();
2779
2780               if (! globalize)
2781                 context = cs;
2782               else if (cs != NULL_TREE && TYPE_P (cs))
2783                 /* When declaring a friend class of a local class, we want
2784                    to inject the newly named class into the scope
2785                    containing the local class, not the namespace scope.  */
2786                 context = decl_function_context (get_type_decl (cs));
2787             }
2788           if (!context)
2789             context = current_namespace;
2790
2791           if ((b->template_parms_p && b->level_chain->parm_flag == 2)
2792               || b->parm_flag == 2)
2793             in_class = 1;
2794
2795           if (current_lang_name == lang_name_java)
2796             TYPE_FOR_JAVA (type) = 1;
2797
2798           d = create_implicit_typedef (name, type);
2799           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2800           if (! in_class)
2801             set_identifier_type_value_with_scope (name, type, b);
2802
2803           d = maybe_process_template_type_declaration (type,
2804                                                        globalize, b);
2805
2806           if (b->parm_flag == 2)
2807             {
2808               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2809                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2810                    class.  But if it's a member template class, we
2811                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2812                    is done later.  */
2813                 finish_member_declaration (d);
2814               else
2815                 pushdecl_class_level (d);
2816             }
2817           else
2818             d = pushdecl_with_scope (d, b);
2819
2820           if (ANON_AGGRNAME_P (name))
2821             DECL_IGNORED_P (d) = 1;
2822
2823           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2824           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2825           if (!uses_template_parms (type))
2826             DECL_ASSEMBLER_NAME (d)
2827               = get_identifier (build_overload_name (type, 1, 1));
2828         }
2829       if (b->parm_flag == 2)
2830         {
2831           if (!COMPLETE_TYPE_P (current_class_type))
2832             CLASSTYPE_TAGS (current_class_type) = b->tags;
2833         }
2834     }
2835
2836   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2837     /* Use the canonical TYPE_DECL for this node.  */
2838     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2839   else
2840     {
2841       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2842          will be the tagged type we just added to the current
2843          binding level.  This fake NULL-named TYPE_DECL node helps
2844          dwarfout.c to know when it needs to output a
2845          representation of a tagged type, and it also gives us a
2846          convenient place to record the "scope start" address for
2847          the tagged type.  */
2848
2849       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2850       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2851     }
2852 }
2853
2854 /* Counter used to create anonymous type names.  */
2855
2856 static int anon_cnt = 0;
2857
2858 /* Return an IDENTIFIER which can be used as a name for
2859    anonymous structs and unions.  */
2860
2861 tree
2862 make_anon_name ()
2863 {
2864   char buf[32];
2865
2866   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2867   return get_identifier (buf);
2868 }
2869
2870 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2871    This keeps dbxout from getting confused.  */
2872
2873 void
2874 clear_anon_tags ()
2875 {
2876   register struct binding_level *b;
2877   register tree tags;
2878   static int last_cnt = 0;
2879
2880   /* Fast out if no new anon names were declared.  */
2881   if (last_cnt == anon_cnt)
2882     return;
2883
2884   b = current_binding_level;
2885   while (b->tag_transparent)
2886     b = b->level_chain;
2887   tags = b->tags;
2888   while (tags)
2889     {
2890       /* A NULL purpose means we have already processed all tags
2891          from here to the end of the list.  */
2892       if (TREE_PURPOSE (tags) == NULL_TREE)
2893         break;
2894       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2895         TREE_PURPOSE (tags) = NULL_TREE;
2896       tags = TREE_CHAIN (tags);
2897     }
2898   last_cnt = anon_cnt;
2899 }
2900 \f
2901 /* Subroutine of duplicate_decls: return truthvalue of whether
2902    or not types of these decls match.
2903
2904    For C++, we must compare the parameter list so that `int' can match
2905    `int&' in a parameter position, but `int&' is not confused with
2906    `const int&'.  */
2907
2908 int
2909 decls_match (newdecl, olddecl)
2910      tree newdecl, olddecl;
2911 {
2912   int types_match;
2913
2914   if (newdecl == olddecl)
2915     return 1;
2916
2917   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2918     /* If the two DECLs are not even the same kind of thing, we're not
2919        interested in their types.  */
2920     return 0;
2921
2922   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2923     {
2924       tree f1 = TREE_TYPE (newdecl);
2925       tree f2 = TREE_TYPE (olddecl);
2926       tree p1 = TYPE_ARG_TYPES (f1);
2927       tree p2 = TYPE_ARG_TYPES (f2);
2928
2929       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
2930           && ! (DECL_LANGUAGE (newdecl) == lang_c
2931                 && DECL_LANGUAGE (olddecl) == lang_c))
2932         return 0;
2933
2934       if (TREE_CODE (f1) != TREE_CODE (f2))
2935         return 0;
2936
2937       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2938         {
2939           if ((! strict_prototypes_lang_c || DECL_BUILT_IN (olddecl))
2940               && DECL_LANGUAGE (olddecl) == lang_c
2941               && p2 == NULL_TREE)
2942             {
2943               types_match = self_promoting_args_p (p1);
2944               if (p1 == void_list_node)
2945                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2946             }
2947           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2948                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2949             {
2950               types_match = self_promoting_args_p (p2);
2951               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2952             }
2953           else
2954             types_match = compparms (p1, p2);
2955         }
2956       else
2957         types_match = 0;
2958     }
2959   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2960     {
2961       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2962                                 DECL_TEMPLATE_PARMS (olddecl)))
2963         return 0;
2964
2965       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2966         types_match = 1;
2967       else
2968         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2969                                    DECL_TEMPLATE_RESULT (newdecl));
2970     }
2971   else
2972     {
2973       if (TREE_TYPE (newdecl) == error_mark_node)
2974         types_match = TREE_TYPE (olddecl) == error_mark_node;
2975       else if (TREE_TYPE (olddecl) == NULL_TREE)
2976         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2977       else if (TREE_TYPE (newdecl) == NULL_TREE)
2978         types_match = 0;
2979       else
2980         types_match = comptypes (TREE_TYPE (newdecl),
2981                                  TREE_TYPE (olddecl),
2982                                  COMPARE_REDECLARATION);
2983     }
2984
2985   return types_match;
2986 }
2987
2988 /* If NEWDECL is `static' and an `extern' was seen previously,
2989    warn about it.  OLDDECL is the previous declaration.
2990
2991    Note that this does not apply to the C++ case of declaring
2992    a variable `extern const' and then later `const'.
2993
2994    Don't complain about built-in functions, since they are beyond
2995    the user's control.  */
2996
2997 static void
2998 warn_extern_redeclared_static (newdecl, olddecl)
2999      tree newdecl, olddecl;
3000 {
3001   static const char *explicit_extern_static_warning
3002     = "`%D' was declared `extern' and later `static'";
3003   static const char *implicit_extern_static_warning
3004     = "`%D' was declared implicitly `extern' and later `static'";
3005
3006   tree name;
3007
3008   if (TREE_CODE (newdecl) == TYPE_DECL
3009       || TREE_CODE (newdecl) == TEMPLATE_DECL)
3010     return;
3011
3012   /* Don't get confused by static member functions; that's a different
3013      use of `static'.  */
3014   if (TREE_CODE (newdecl) == FUNCTION_DECL
3015       && DECL_STATIC_FUNCTION_P (newdecl))
3016     return;
3017
3018   /* If the old declaration was `static', or the new one isn't, then
3019      then everything is OK.  */
3020   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3021     return;
3022
3023   /* It's OK to declare a builtin function as `static'.  */
3024   if (TREE_CODE (olddecl) == FUNCTION_DECL
3025       && DECL_ARTIFICIAL (olddecl))
3026     return;
3027
3028   name = DECL_ASSEMBLER_NAME (newdecl);
3029   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3030               ? implicit_extern_static_warning
3031               : explicit_extern_static_warning, newdecl);
3032   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3033 }
3034
3035 /* Handle when a new declaration NEWDECL has the same name as an old
3036    one OLDDECL in the same binding contour.  Prints an error message
3037    if appropriate.
3038
3039    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3040    Otherwise, return 0.  */
3041
3042 int
3043 duplicate_decls (newdecl, olddecl)
3044      tree newdecl, olddecl;
3045 {
3046   unsigned olddecl_uid = DECL_UID (olddecl);
3047   int olddecl_friend = 0, types_match = 0;
3048   int new_defines_function = 0;
3049
3050   if (newdecl == olddecl)
3051     return 1;
3052
3053   types_match = decls_match (newdecl, olddecl);
3054
3055   /* If either the type of the new decl or the type of the old decl is an
3056      error_mark_node, then that implies that we have already issued an
3057      error (earlier) for some bogus type specification, and in that case,
3058      it is rather pointless to harass the user with yet more error message
3059      about the same declaration, so just pretend the types match here.  */
3060   if (TREE_TYPE (newdecl) == error_mark_node
3061       || TREE_TYPE (olddecl) == error_mark_node)
3062     types_match = 1;
3063
3064   /* Check for redeclaration and other discrepancies. */
3065   if (TREE_CODE (olddecl) == FUNCTION_DECL
3066       && DECL_ARTIFICIAL (olddecl))
3067     {
3068       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3069         {
3070           /* If you declare a built-in or predefined function name as static,
3071              the old definition is overridden, but optionally warn this was a
3072              bad choice of name.  */
3073           if (! TREE_PUBLIC (newdecl))
3074             {
3075               if (warn_shadow)
3076                 cp_warning ("shadowing %s function `%#D'",
3077                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3078                             olddecl);
3079               /* Discard the old built-in function.  */
3080               return 0;
3081             }
3082           /* If the built-in is not ansi, then programs can override
3083              it even globally without an error.  */
3084           else if (! DECL_BUILT_IN (olddecl))
3085             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3086                         olddecl, newdecl);
3087           else
3088             {
3089               cp_error ("declaration of `%#D'", newdecl);
3090               cp_error ("conflicts with built-in declaration `%#D'",
3091                         olddecl);
3092             }
3093           return 0;
3094         }
3095       else if (!types_match)
3096         {
3097           if ((DECL_LANGUAGE (newdecl) == lang_c
3098                && DECL_LANGUAGE (olddecl) == lang_c)
3099               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3100                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3101             {
3102               /* A near match; override the builtin.  */
3103
3104               if (TREE_PUBLIC (newdecl))
3105                 {
3106                   cp_warning ("new declaration `%#D'", newdecl);
3107                   cp_warning ("ambiguates built-in declaration `%#D'",
3108                               olddecl);
3109                 }
3110               else if (warn_shadow)
3111                 cp_warning ("shadowing %s function `%#D'",
3112                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3113                             olddecl);
3114             }
3115           else
3116             /* Discard the old built-in function.  */
3117             return 0;
3118         }
3119
3120       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3121         {
3122           /* If a builtin function is redeclared as `static', merge
3123              the declarations, but make the original one static.  */
3124           DECL_THIS_STATIC (olddecl) = 1;
3125           TREE_PUBLIC (olddecl) = 0;
3126
3127           /* Make the olddeclaration consistent with the new one so that
3128              all remnants of the builtin-ness of this function will be
3129              banished.  */
3130           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3131           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3132           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3133           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3134                                        newdecl);
3135         }
3136     }
3137   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3138     {
3139       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3140            && TREE_CODE (newdecl) != TYPE_DECL
3141            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3142                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3143           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3144               && TREE_CODE (olddecl) != TYPE_DECL
3145               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3146                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3147                         == TYPE_DECL))))
3148         {
3149           /* We do nothing special here, because C++ does such nasty
3150              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3151              get shadowed, and know that if we need to find a TYPE_DECL
3152              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3153              slot of the identifier.  */
3154           return 0;
3155         }
3156
3157       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3158            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3159           || (TREE_CODE (olddecl) == FUNCTION_DECL
3160               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3161         return 0;
3162
3163       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3164       if (TREE_CODE (olddecl) == TREE_LIST)
3165         olddecl = TREE_VALUE (olddecl);
3166       cp_error_at ("previous declaration of `%#D'", olddecl);
3167
3168       /* New decl is completely inconsistent with the old one =>
3169          tell caller to replace the old one.  */
3170
3171       return 0;
3172     }
3173   else if (!types_match)
3174     {
3175       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3176         /* These are certainly not duplicate declarations; they're
3177            from different scopes.  */
3178         return 0;
3179
3180       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3181         {
3182           /* The name of a class template may not be declared to refer to
3183              any other template, class, function, object, namespace, value,
3184              or type in the same scope.  */
3185           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3186               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3187             {
3188               cp_error ("declaration of template `%#D'", newdecl);
3189               cp_error_at ("conflicts with previous declaration `%#D'",
3190                            olddecl);
3191             }
3192           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3193                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3194                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3195                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3196                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3197                                            DECL_TEMPLATE_PARMS (olddecl)))
3198             {
3199               cp_error ("new declaration `%#D'", newdecl);
3200               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3201             }
3202           return 0;
3203         }
3204       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3205         {
3206           if (DECL_LANGUAGE (newdecl) == lang_c
3207               && DECL_LANGUAGE (olddecl) == lang_c)
3208             {
3209               cp_error ("declaration of C function `%#D' conflicts with",
3210                         newdecl);
3211               cp_error_at ("previous declaration `%#D' here", olddecl);
3212             }
3213           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3214                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3215             {
3216               cp_error ("new declaration `%#D'", newdecl);
3217               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3218             }
3219           else
3220             return 0;
3221         }
3222
3223       /* Already complained about this, so don't do so again.  */
3224       else if (current_class_type == NULL_TREE
3225           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3226         {
3227           cp_error ("conflicting types for `%#D'", newdecl);
3228           cp_error_at ("previous declaration as `%#D'", olddecl);
3229         }
3230     }
3231   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3232             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3233                  && (!DECL_TEMPLATE_INFO (newdecl)
3234                      || (DECL_TI_TEMPLATE (newdecl)
3235                          != DECL_TI_TEMPLATE (olddecl))))
3236                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3237                     && (!DECL_TEMPLATE_INFO (olddecl)
3238                         || (DECL_TI_TEMPLATE (olddecl)
3239                             != DECL_TI_TEMPLATE (newdecl))))))
3240     /* It's OK to have a template specialization and a non-template
3241        with the same type, or to have specializations of two
3242        different templates with the same type.  Note that if one is a
3243        specialization, and the other is an instantiation of the same
3244        template, that we do not exit at this point.  That situation
3245        can occur if we instantiate a template class, and then
3246        specialize one of its methods.  This situation is legal, but
3247        the declarations must be merged in the usual way.  */
3248     return 0;
3249   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3250            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3251                 && !DECL_USE_TEMPLATE (newdecl))
3252                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3253                    && !DECL_USE_TEMPLATE (olddecl))))
3254     /* One of the declarations is a template instantiation, and the
3255        other is not a template at all.  That's OK.  */
3256     return 0;
3257   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3258            && DECL_NAMESPACE_ALIAS (newdecl)
3259            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3260     /* Redeclaration of namespace alias, ignore it. */
3261     return 1;
3262   else
3263     {
3264       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3265       if (errmsg)
3266         {
3267           cp_error (errmsg, newdecl);
3268           if (DECL_NAME (olddecl) != NULL_TREE)
3269             cp_error_at ((DECL_INITIAL (olddecl)
3270                           && namespace_bindings_p ())
3271                          ? "`%#D' previously defined here"
3272                          : "`%#D' previously declared here", olddecl);
3273         }
3274       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3275                && DECL_INITIAL (olddecl) != NULL_TREE
3276                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3277                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3278         {
3279           /* Prototype decl follows defn w/o prototype.  */
3280           cp_warning_at ("prototype for `%#D'", newdecl);
3281           cp_warning_at ("follows non-prototype definition here", olddecl);
3282         }
3283       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3284                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3285         {
3286           /* extern "C" int foo ();
3287              int foo () { bar (); }
3288              is OK.  */
3289           if (current_lang_stack
3290               == &VARRAY_TREE (current_lang_base, 0))
3291             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3292           else
3293             {
3294               cp_error_at ("previous declaration of `%#D' with %L linkage",
3295                            olddecl, DECL_LANGUAGE (olddecl));
3296               cp_error ("conflicts with new declaration with %L linkage",
3297                         DECL_LANGUAGE (newdecl));
3298             }
3299         }
3300
3301       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3302         ;
3303       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3304         {
3305           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3306           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3307           int i = 1;
3308
3309           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3310             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3311
3312           for (; t1 && t1 != void_list_node;
3313                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3314             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3315               {
3316                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3317                                            TREE_PURPOSE (t2)))
3318                   {
3319                     if (pedantic)
3320                       {
3321                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3322                                     i, newdecl);
3323                         cp_pedwarn_at ("after previous specification in `%#D'",
3324                                        olddecl);
3325                       }
3326                   }
3327                 else
3328                   {
3329                     cp_error ("default argument given for parameter %d of `%#D'",
3330                               i, newdecl);
3331                     cp_error_at ("after previous specification in `%#D'",
3332                                  olddecl);
3333                   }
3334               }
3335
3336           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3337               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3338             {
3339               cp_warning ("`%#D' was used before it was declared inline",
3340                           newdecl);
3341               cp_warning_at ("previous non-inline declaration here",
3342                              olddecl);
3343             }
3344         }
3345     }
3346
3347   /* If new decl is `static' and an `extern' was seen previously,
3348      warn about it.  */
3349   warn_extern_redeclared_static (newdecl, olddecl);
3350
3351   /* We have committed to returning 1 at this point.  */
3352   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3353     {
3354       /* Now that functions must hold information normally held
3355          by field decls, there is extra work to do so that
3356          declaration information does not get destroyed during
3357          definition.  */
3358       if (DECL_VINDEX (olddecl))
3359         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3360       if (DECL_VIRTUAL_CONTEXT (olddecl))
3361         DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
3362       if (DECL_CONTEXT (olddecl))
3363         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3364       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3365         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3366       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3367       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3368       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3369       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3370       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3371       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3372       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3373
3374       /* Optionally warn about more than one declaration for the same
3375          name, but don't warn about a function declaration followed by a
3376          definition.  */
3377       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3378           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3379           /* Don't warn about extern decl followed by definition. */
3380           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3381           /* Don't warn about friends, let add_friend take care of it. */
3382           && ! DECL_FRIEND_P (newdecl))
3383         {
3384           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3385           cp_warning_at ("previous declaration of `%D'", olddecl);
3386         }
3387     }
3388
3389   /* Deal with C++: must preserve virtual function table size.  */
3390   if (TREE_CODE (olddecl) == TYPE_DECL)
3391     {
3392       register tree newtype = TREE_TYPE (newdecl);
3393       register tree oldtype = TREE_TYPE (olddecl);
3394
3395       if (newtype != error_mark_node && oldtype != error_mark_node
3396           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3397         {
3398           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3399           CLASSTYPE_FRIEND_CLASSES (newtype)
3400             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3401         }
3402     }
3403
3404   /* Copy all the DECL_... slots specified in the new decl
3405      except for any that we copy here from the old type.  */
3406   DECL_MACHINE_ATTRIBUTES (newdecl)
3407     = merge_machine_decl_attributes (olddecl, newdecl);
3408
3409   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3410     {
3411       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3412                              DECL_TEMPLATE_RESULT (olddecl)))
3413         cp_error ("invalid redeclaration of %D", newdecl);
3414       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3415       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3416         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3417                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3418
3419       return 1;
3420     }
3421
3422   if (types_match)
3423     {
3424       /* Automatically handles default parameters.  */
3425       tree oldtype = TREE_TYPE (olddecl);
3426       tree newtype;
3427
3428       /* Merge the data types specified in the two decls.  */
3429       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3430
3431       if (TREE_CODE (newdecl) == VAR_DECL)
3432         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3433       /* Do this after calling `common_type' so that default
3434          parameters don't confuse us.  */
3435       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3436           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3437               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3438         {
3439           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3440                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3441           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3442                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3443
3444           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3445               && DECL_SOURCE_LINE (olddecl) != 0
3446               && flag_exceptions
3447               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3448                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3449             {
3450               cp_error ("declaration of `%F' throws different exceptions",
3451                         newdecl);
3452               cp_error_at ("than previous declaration `%F'", olddecl);
3453             }
3454         }
3455       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3456
3457       /* Lay the type out, unless already done.  */
3458       if (! same_type_p (newtype, oldtype)
3459           && TREE_TYPE (newdecl) != error_mark_node
3460           && !(processing_template_decl && uses_template_parms (newdecl)))
3461         layout_type (TREE_TYPE (newdecl));
3462
3463       if ((TREE_CODE (newdecl) == VAR_DECL
3464            || TREE_CODE (newdecl) == PARM_DECL
3465            || TREE_CODE (newdecl) == RESULT_DECL
3466            || TREE_CODE (newdecl) == FIELD_DECL
3467            || TREE_CODE (newdecl) == TYPE_DECL)
3468           && !(processing_template_decl && uses_template_parms (newdecl)))
3469         layout_decl (newdecl, 0);
3470
3471       /* Merge the type qualifiers.  */
3472       if (TREE_READONLY (newdecl))
3473         TREE_READONLY (olddecl) = 1;
3474       if (TREE_THIS_VOLATILE (newdecl))
3475         TREE_THIS_VOLATILE (olddecl) = 1;
3476
3477       /* Merge the initialization information.  */
3478       if (DECL_INITIAL (newdecl) == NULL_TREE
3479           && DECL_INITIAL (olddecl) != NULL_TREE)
3480         {
3481           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3482           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3483           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3484           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3485               && DECL_LANG_SPECIFIC (newdecl)
3486               && DECL_LANG_SPECIFIC (olddecl))
3487             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3488         }
3489
3490       /* Merge the section attribute.
3491          We want to issue an error if the sections conflict but that must be
3492          done later in decl_attributes since we are called before attributes
3493          are assigned.  */
3494       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3495         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3496
3497       /* Keep the old rtl since we can safely use it.  */
3498       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3499
3500       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3501         {
3502           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3503             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3504           DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3505             |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3506           DECL_NO_LIMIT_STACK (newdecl)
3507             |= DECL_NO_LIMIT_STACK (olddecl);
3508         }
3509     }
3510   /* If cannot merge, then use the new type and qualifiers,
3511      and don't preserve the old rtl.  */
3512   else
3513     {
3514       /* Clean out any memory we had of the old declaration.  */
3515       tree oldstatic = value_member (olddecl, static_aggregates);
3516       if (oldstatic)
3517         TREE_VALUE (oldstatic) = error_mark_node;
3518
3519       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3520       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3521       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3522       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3523     }
3524
3525   /* Merge the storage class information.  */
3526   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3527   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3528   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3529   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3530   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3531   if (! DECL_EXTERNAL (olddecl))
3532     DECL_EXTERNAL (newdecl) = 0;
3533
3534   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3535     {
3536       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3537       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3538       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3539       DECL_TEMPLATE_INSTANTIATED (newdecl)
3540         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3541       /* Don't really know how much of the language-specific
3542          values we should copy from old to new.  */
3543       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3544       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3545       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3546       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3547       olddecl_friend = DECL_FRIEND_P (olddecl);
3548
3549       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3550       if (TREE_CODE (newdecl) == FUNCTION_DECL
3551           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3552         DECL_BEFRIENDING_CLASSES (newdecl)
3553           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3554                      DECL_BEFRIENDING_CLASSES (olddecl));
3555     }
3556
3557   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3558     {
3559       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3560           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3561         {
3562           /* If newdecl is not a specialization, then it is not a
3563              template-related function at all.  And that means that we
3564              shoud have exited above, returning 0.  */
3565           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3566                               0);
3567
3568           if (TREE_USED (olddecl))
3569             /* From [temp.expl.spec]:
3570
3571                If a template, a member template or the member of a class
3572                template is explicitly specialized then that
3573                specialization shall be declared before the first use of
3574                that specialization that would cause an implicit
3575                instantiation to take place, in every translation unit in
3576                which such a use occurs.  */
3577             cp_error ("explicit specialization of %D after first use",
3578                       olddecl);
3579
3580           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3581         }
3582       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3583
3584       /* If either decl says `inline', this fn is inline, unless its
3585          definition was passed already.  */
3586       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3587         DECL_INLINE (olddecl) = 1;
3588       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3589
3590       if (! types_match)
3591         {
3592           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3593           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3594           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3595         }
3596       if (! types_match || new_defines_function)
3597         {
3598           /* These need to be copied so that the names are available.
3599              Note that if the types do match, we'll preserve inline
3600              info and other bits, but if not, we won't.  */
3601           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3602           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3603         }
3604       if (new_defines_function)
3605         /* If defining a function declared with other language
3606            linkage, use the previously declared language linkage.  */
3607         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3608       else if (types_match)
3609         {
3610           /* If redeclaring a builtin function, and not a definition,
3611              it stays built in.  */
3612           if (DECL_BUILT_IN (olddecl))
3613             {
3614               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3615               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3616               /* If we're keeping the built-in definition, keep the rtl,
3617                  regardless of declaration matches.  */
3618               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3619             }
3620           else
3621             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3622
3623           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3624           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3625             /* Previously saved insns go together with
3626                the function's previous definition.  */
3627             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3628           /* Don't clear out the arguments if we're redefining a function.  */
3629           if (DECL_ARGUMENTS (olddecl))
3630             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3631         }
3632     }
3633
3634   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3635     {
3636       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3637     }
3638
3639   /* Now preserve various other info from the definition.  */
3640   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3641   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3642   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3643   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3644
3645   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3646     {
3647       int function_size;
3648
3649       function_size = sizeof (struct tree_decl);
3650
3651       bcopy ((char *) newdecl + sizeof (struct tree_common),
3652              (char *) olddecl + sizeof (struct tree_common),
3653              function_size - sizeof (struct tree_common));
3654
3655       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3656         {
3657           /* If newdecl is a template instantiation, it is possible that
3658              the following sequence of events has occurred:
3659
3660              o A friend function was declared in a class template.  The
3661              class template was instantiated.
3662
3663              o The instantiation of the friend declaration was
3664              recorded on the instantiation list, and is newdecl.
3665
3666              o Later, however, instantiate_class_template called pushdecl
3667              on the newdecl to perform name injection.  But, pushdecl in
3668              turn called duplicate_decls when it discovered that another
3669              declaration of a global function with the same name already
3670              existed.
3671
3672              o Here, in duplicate_decls, we decided to clobber newdecl.
3673
3674              If we're going to do that, we'd better make sure that
3675              olddecl, and not newdecl, is on the list of
3676              instantiations so that if we try to do the instantiation
3677              again we won't get the clobbered declaration.  */
3678
3679           tree tmpl = DECL_TI_TEMPLATE (newdecl);
3680           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3681
3682           for (; decls; decls = TREE_CHAIN (decls))
3683             if (TREE_VALUE (decls) == newdecl)
3684               TREE_VALUE (decls) = olddecl;
3685         }
3686     }
3687   else
3688     {
3689       bcopy ((char *) newdecl + sizeof (struct tree_common),
3690              (char *) olddecl + sizeof (struct tree_common),
3691              sizeof (struct tree_decl) - sizeof (struct tree_common)
3692              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3693     }
3694
3695   DECL_UID (olddecl) = olddecl_uid;
3696   if (olddecl_friend)
3697     DECL_FRIEND_P (olddecl) = 1;
3698
3699   /* NEWDECL contains the merged attribute lists.
3700      Update OLDDECL to be the same.  */
3701   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3702
3703   return 1;
3704 }
3705
3706 /* Record a decl-node X as belonging to the current lexical scope.
3707    Check for errors (such as an incompatible declaration for the same
3708    name already seen in the same scope).
3709
3710    Returns either X or an old decl for the same name.
3711    If an old decl is returned, it may have been smashed
3712    to agree with what X says.  */
3713
3714 tree
3715 pushdecl (x)
3716      tree x;
3717 {
3718   register tree t;
3719   register tree name;
3720   int need_new_binding;
3721
3722   /* We shouldn't be calling pushdecl when we're generating RTL for a
3723      function that we already did semantic analysis on previously.  */
3724   my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3725                       19990913);
3726
3727   name = DECL_ASSEMBLER_NAME (x);
3728   need_new_binding = 1;
3729
3730   if (DECL_TEMPLATE_PARM_P (x))
3731     /* Template parameters have no context; they are not X::T even
3732        when declared within a class or namespace.  */
3733     ;
3734   else
3735     {
3736       if (current_function_decl && x != current_function_decl
3737           /* A local declaration for a function doesn't constitute
3738              nesting.  */
3739           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3740           /* A local declaration for an `extern' variable is in the
3741              scoped of the current namespace, not the current
3742              function.  */
3743           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3744           && !DECL_CONTEXT (x))
3745         DECL_CONTEXT (x) = current_function_decl;
3746       if (!DECL_CONTEXT (x))
3747         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3748
3749       /* If this is the declaration for a namespace-scope function,
3750          but the declaration itself is in a local scope, mark the
3751          declaration.  */
3752       if (TREE_CODE (x) == FUNCTION_DECL
3753           && DECL_NAMESPACE_SCOPE_P (x)
3754           && current_function_decl
3755           && x != current_function_decl)
3756         DECL_LOCAL_FUNCTION_P (x) = 1;
3757     }
3758
3759   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3760      compiler wants to use.  */
3761   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3762       || TREE_CODE (x) == NAMESPACE_DECL)
3763     name = DECL_NAME (x);
3764
3765   if (name)
3766     {
3767 #if 0
3768       /* Not needed...see below.  */
3769       char *file;
3770       int line;
3771 #endif
3772       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3773         name = TREE_OPERAND (name, 0);
3774
3775       /* Namespace-scoped variables are not found in the current level. */
3776       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3777         t = namespace_binding (name, DECL_CONTEXT (x));
3778       else
3779         t = lookup_name_current_level (name);
3780       if (t == error_mark_node)
3781         {
3782           /* error_mark_node is 0 for a while during initialization!  */
3783           t = NULL_TREE;
3784           cp_error_at ("`%#D' used prior to declaration", x);
3785         }
3786
3787       else if (t != NULL_TREE)
3788         {
3789 #if 0
3790           /* This is turned off until I have time to do it right (bpk).  */
3791           /* With the code below that uses it...  */
3792           file = DECL_SOURCE_FILE (t);
3793           line = DECL_SOURCE_LINE (t);
3794 #endif
3795           if (TREE_CODE (t) == PARM_DECL)
3796             {
3797               if (DECL_CONTEXT (t) == NULL_TREE)
3798                 fatal ("parse errors have confused me too much");
3799
3800               /* Check for duplicate params.  */
3801               if (duplicate_decls (x, t))
3802                 return t;
3803             }
3804           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3805                     || DECL_FUNCTION_TEMPLATE_P (x))
3806                    && is_overloaded_fn (t))
3807             /* Don't do anything just yet. */;
3808           else if (t == wchar_decl_node)
3809             {
3810               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3811                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3812
3813               /* Throw away the redeclaration.  */
3814               return t;
3815             }
3816           else if (TREE_CODE (t) != TREE_CODE (x))
3817             {
3818               if (duplicate_decls (x, t))
3819                 return t;
3820             }
3821           else if (duplicate_decls (x, t))
3822             {
3823 #if 0
3824               /* This is turned off until I have time to do it right (bpk).  */
3825
3826               /* Also warn if they did a prototype with `static' on it, but
3827                  then later left the `static' off.  */
3828               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3829                 {
3830                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3831                     return t;
3832
3833                   if (extra_warnings)
3834                     {
3835                       cp_warning ("`static' missing from declaration of `%D'",
3836                                   t);
3837                       warning_with_file_and_line (file, line,
3838                                                   "previous declaration of `%s'",
3839                                                   decl_as_string (t, 0));
3840                     }
3841
3842                   /* Now fix things so it'll do what they expect.  */
3843                   if (current_function_decl)
3844                     TREE_PUBLIC (current_function_decl) = 0;
3845                 }
3846               /* Due to interference in memory reclamation (X may be
3847                  obstack-deallocated at this point), we must guard against
3848                  one really special case.  [jason: This should be handled
3849                  by start_function]  */
3850               if (current_function_decl == x)
3851                 current_function_decl = t;
3852 #endif
3853               if (TREE_CODE (t) == TYPE_DECL)
3854                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3855               else if (TREE_CODE (t) == FUNCTION_DECL)
3856                 check_default_args (t);
3857
3858               return t;
3859             }
3860           else if (DECL_MAIN_P (x))
3861             {
3862               /* A redeclaration of main, but not a duplicate of the
3863                  previous one.
3864
3865                  [basic.start.main]
3866
3867                  This function shall not be overloaded.  */
3868               cp_error_at ("invalid redeclaration of `%D'", t);
3869               cp_error ("as `%D'", x);
3870               /* We don't try to push this declaration since that
3871                  causes a crash.  */
3872               return x;
3873             }
3874         }
3875
3876       check_template_shadow (x);
3877
3878       /* If this is a function conjured up by the backend, massage it
3879          so it looks friendly.  */
3880       if (TREE_CODE (x) == FUNCTION_DECL
3881           && ! DECL_LANG_SPECIFIC (x))
3882         {
3883           retrofit_lang_decl (x);
3884           DECL_LANGUAGE (x) = lang_c;
3885         }
3886
3887       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3888         {
3889           t = push_overloaded_decl (x, PUSH_LOCAL);
3890           if (t != x)
3891             return t;
3892           if (!namespace_bindings_p ())
3893             /* We do not need to create a binding for this name;
3894                push_overloaded_decl will have already done so if
3895                necessary.  */
3896             need_new_binding = 0;
3897         }
3898       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3899         {
3900           t = push_overloaded_decl (x, PUSH_GLOBAL);
3901           if (t == x)
3902             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3903           return t;
3904         }
3905
3906       /* If declaring a type as a typedef, copy the type (unless we're
3907          at line 0), and install this TYPE_DECL as the new type's typedef
3908          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3909       if (TREE_CODE (x) == TYPE_DECL)
3910         {
3911           tree type = TREE_TYPE (x);
3912           if (DECL_SOURCE_LINE (x) == 0)
3913             {
3914               if (TYPE_NAME (type) == 0)
3915                 TYPE_NAME (type) = x;
3916             }
3917           else if (type != error_mark_node && TYPE_NAME (type) != x
3918                    /* We don't want to copy the type when all we're
3919                       doing is making a TYPE_DECL for the purposes of
3920                       inlining.  */
3921                    && (!TYPE_NAME (type)
3922                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3923             {
3924               DECL_ORIGINAL_TYPE (x) = type;
3925               type = build_type_copy (type);
3926               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3927               TYPE_NAME (type) = x;
3928               TREE_TYPE (x) = type;
3929             }
3930
3931           if (type != error_mark_node
3932               && TYPE_NAME (type)
3933               && TYPE_IDENTIFIER (type))
3934             set_identifier_type_value_with_scope (DECL_NAME (x), type,
3935                                                   current_binding_level);
3936
3937         }
3938
3939       /* Multiple external decls of the same identifier ought to match.
3940
3941          We get warnings about inline functions where they are defined.
3942          We get warnings about other functions from push_overloaded_decl.
3943
3944          Avoid duplicate warnings where they are used.  */
3945       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3946         {
3947           tree decl;
3948
3949           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3950               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3951                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3952             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3953           else
3954             decl = NULL_TREE;
3955
3956           if (decl
3957               /* If different sort of thing, we already gave an error.  */
3958               && TREE_CODE (decl) == TREE_CODE (x)
3959               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3960             {
3961               cp_pedwarn ("type mismatch with previous external decl", x);
3962               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3963             }
3964         }
3965
3966       /* This name is new in its binding level.
3967          Install the new declaration and return it.  */
3968       if (namespace_bindings_p ())
3969         {
3970           /* Install a global value.  */
3971
3972           /* If the first global decl has external linkage,
3973              warn if we later see static one.  */
3974           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3975             TREE_PUBLIC (name) = 1;
3976
3977           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3978                 && t != NULL_TREE)
3979               /* For an ordinary function, we create a binding from
3980                  the mangled name (i.e., NAME) to the DECL.  But, for
3981                  an `extern "C"' function, the mangled name and the
3982                  ordinary name are the same so we need not do this.  */
3983               && !(TREE_CODE (x) == FUNCTION_DECL &&
3984                    DECL_LANGUAGE (x) == lang_c))
3985             {
3986               if (TREE_CODE (x) == FUNCTION_DECL)
3987                 my_friendly_assert
3988                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3989                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3990               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3991             }
3992
3993           /* Don't forget if the function was used via an implicit decl.  */
3994           if (IDENTIFIER_IMPLICIT_DECL (name)
3995               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3996             TREE_USED (x) = 1;
3997
3998           /* Don't forget if its address was taken in that way.  */
3999           if (IDENTIFIER_IMPLICIT_DECL (name)
4000               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4001             TREE_ADDRESSABLE (x) = 1;
4002
4003           /* Warn about mismatches against previous implicit decl.  */
4004           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4005               /* If this real decl matches the implicit, don't complain.  */
4006               && ! (TREE_CODE (x) == FUNCTION_DECL
4007                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4008             cp_warning
4009               ("`%D' was previously implicitly declared to return `int'", x);
4010
4011           /* If new decl is `static' and an `extern' was seen previously,
4012              warn about it.  */
4013           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4014             warn_extern_redeclared_static (x, t);
4015         }
4016       else
4017         {
4018           /* Here to install a non-global value.  */
4019           tree oldlocal = IDENTIFIER_VALUE (name);
4020           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4021
4022           if (need_new_binding)
4023             {
4024               push_local_binding (name, x, 0);
4025               /* Because push_local_binding will hook X on to the
4026                  current_binding_level's name list, we don't want to
4027                  do that again below.  */
4028               need_new_binding = 0;
4029             }
4030
4031           /* If this is a TYPE_DECL, push it into the type value slot.  */
4032           if (TREE_CODE (x) == TYPE_DECL)
4033             set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4034                                                   current_binding_level);
4035
4036           /* Clear out any TYPE_DECL shadowed by a namespace so that
4037              we won't think this is a type.  The C struct hack doesn't
4038              go through namespaces.  */
4039           if (TREE_CODE (x) == NAMESPACE_DECL)
4040             set_identifier_type_value_with_scope (name, NULL_TREE,
4041                                                   current_binding_level);
4042
4043           if (oldlocal)
4044             {
4045               tree d = oldlocal;
4046
4047               while (oldlocal
4048                      && TREE_CODE (oldlocal) == VAR_DECL
4049                      && DECL_DEAD_FOR_LOCAL (oldlocal))
4050                 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4051
4052               if (oldlocal == NULL_TREE)
4053                 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4054             }
4055
4056           /* If this is an extern function declaration, see if we
4057              have a global definition or declaration for the function.  */
4058           if (oldlocal == NULL_TREE
4059               && DECL_EXTERNAL (x)
4060               && oldglobal != NULL_TREE
4061               && TREE_CODE (x) == FUNCTION_DECL
4062               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4063             {
4064               /* We have one.  Their types must agree.  */
4065               if (decls_match (x, oldglobal))
4066                 /* OK */;
4067               else
4068                 {
4069                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4070                   cp_warning_at ("global declaration `%#D'", oldglobal);
4071                 }
4072             }
4073           /* If we have a local external declaration,
4074              and no file-scope declaration has yet been seen,
4075              then if we later have a file-scope decl it must not be static.  */
4076           if (oldlocal == NULL_TREE
4077               && oldglobal == NULL_TREE
4078               && DECL_EXTERNAL (x)
4079               && TREE_PUBLIC (x))
4080             TREE_PUBLIC (name) = 1;
4081
4082           /* Warn if shadowing an argument at the top level of the body.  */
4083           if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4084               /* Inline decls shadow nothing.  */
4085               && !DECL_FROM_INLINE (x)
4086               && TREE_CODE (oldlocal) == PARM_DECL
4087               /* Don't complain if it's from an enclosing function.  */
4088               && DECL_CONTEXT (oldlocal) == current_function_decl
4089               && TREE_CODE (x) != PARM_DECL)
4090             {
4091               /* Go to where the parms should be and see if we
4092                  find them there.  */
4093               struct binding_level *b = current_binding_level->level_chain;
4094
4095               if (cleanup_label)
4096                 b = b->level_chain;
4097
4098               /* ARM $8.3 */
4099               if (b->parm_flag == 1)
4100                 cp_error ("declaration of `%#D' shadows a parameter", name);
4101             }
4102
4103           /* Maybe warn if shadowing something else.  */
4104           if (warn_shadow && !DECL_EXTERNAL (x)
4105               /* Inline decls shadow nothing.  */
4106               && !DECL_FROM_INLINE (x)
4107               /* No shadow warnings for internally generated vars.  */
4108               && ! DECL_ARTIFICIAL (x)
4109               /* No shadow warnings for vars made for inlining.  */
4110               && ! DECL_FROM_INLINE (x))
4111             {
4112               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4113                 warning ("declaration of `%s' shadows a parameter",
4114                         IDENTIFIER_POINTER (name));
4115               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4116                        && current_class_ptr
4117                        && !TREE_STATIC (name))
4118                 warning ("declaration of `%s' shadows a member of `this'",
4119                         IDENTIFIER_POINTER (name));
4120               else if (oldlocal != NULL_TREE)
4121                 warning ("declaration of `%s' shadows previous local",
4122                         IDENTIFIER_POINTER (name));
4123               else if (oldglobal != NULL_TREE)
4124                 /* XXX shadow warnings in outer-more namespaces */
4125                 warning ("declaration of `%s' shadows global declaration",
4126                         IDENTIFIER_POINTER (name));
4127             }
4128         }
4129
4130       if (TREE_CODE (x) == FUNCTION_DECL)
4131         check_default_args (x);
4132
4133       /* Keep count of variables in this level with incomplete type.  */
4134       if (TREE_CODE (x) == VAR_DECL
4135           && TREE_TYPE (x) != error_mark_node
4136           && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
4137                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4138               /* RTTI TD entries are created while defining the type_info.  */
4139               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4140                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4141         {
4142           if (namespace_bindings_p ())
4143             namespace_scope_incomplete
4144               = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4145           else
4146             current_binding_level->incomplete
4147               = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4148         }
4149     }
4150
4151   if (need_new_binding)
4152     add_decl_to_level (x,
4153                        DECL_NAMESPACE_SCOPE_P (x)
4154                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4155                        : current_binding_level);
4156
4157   return x;
4158 }
4159
4160 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4161    caller to set DECL_CONTEXT properly.  */
4162
4163 static tree
4164 pushdecl_with_scope (x, level)
4165      tree x;
4166      struct binding_level *level;
4167 {
4168   register struct binding_level *b;
4169   tree function_decl = current_function_decl;
4170
4171   current_function_decl = NULL_TREE;
4172   if (level->parm_flag == 2)
4173     {
4174       b = class_binding_level;
4175       class_binding_level = level;
4176       pushdecl_class_level (x);
4177       class_binding_level = b;
4178     }
4179   else
4180     {
4181       b = current_binding_level;
4182       current_binding_level = level;
4183       x = pushdecl (x);
4184       current_binding_level = b;
4185     }
4186   current_function_decl = function_decl;
4187   return x;
4188 }
4189
4190 /* Like pushdecl, only it places X in the current namespace,
4191    if appropriate.  */
4192
4193 tree
4194 pushdecl_namespace_level (x)
4195      tree x;
4196 {
4197   register struct binding_level *b = current_binding_level;
4198   register tree t;
4199
4200   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4201
4202   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4203      what we want.  */
4204   if (TREE_CODE (x) == TYPE_DECL)
4205     {
4206       tree name = DECL_NAME (x);
4207       tree newval;
4208       tree *ptr = (tree *)0;
4209       for (; b != global_binding_level; b = b->level_chain)
4210         {
4211           tree shadowed = b->type_shadowed;
4212           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4213             if (TREE_PURPOSE (shadowed) == name)
4214               {
4215                 ptr = &TREE_VALUE (shadowed);
4216                 /* Can't break out of the loop here because sometimes
4217                    a binding level will have duplicate bindings for
4218                    PT names.  It's gross, but I haven't time to fix it.  */
4219               }
4220         }
4221       newval = TREE_TYPE (x);
4222       if (ptr == (tree *)0)
4223         {
4224           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4225              up here if this is changed to an assertion.  --KR  */
4226           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4227         }
4228       else
4229         {
4230           *ptr = newval;
4231         }
4232     }
4233   return t;
4234 }
4235
4236 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4237    if appropriate.  */
4238
4239 tree
4240 pushdecl_top_level (x)
4241      tree x;
4242 {
4243   push_to_top_level ();
4244   x = pushdecl_namespace_level (x);
4245   pop_from_top_level ();
4246   return x;
4247 }
4248
4249 /* Make the declaration of X appear in CLASS scope.  */
4250
4251 void
4252 pushdecl_class_level (x)
4253      tree x;
4254 {
4255   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4256      scope looks for the pre-mangled name.  */
4257   register tree name;
4258
4259   if (TREE_CODE (x) == OVERLOAD)
4260     x = OVL_CURRENT (x);
4261   name = DECL_NAME (x);
4262
4263   if (name)
4264     {
4265       push_class_level_binding (name, x);
4266       if (TREE_CODE (x) == TYPE_DECL)
4267         set_identifier_type_value (name, TREE_TYPE (x));
4268     }
4269   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4270     {
4271       tree f;
4272
4273       for (f = TYPE_FIELDS (TREE_TYPE (x));
4274            f;
4275            f = TREE_CHAIN (f))
4276         pushdecl_class_level (f);
4277     }
4278 }
4279
4280 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4281    DECL, or a modified version thereof.  */
4282
4283 tree
4284 maybe_push_decl (decl)
4285      tree decl;
4286 {
4287   tree type = TREE_TYPE (decl);
4288
4289   /* Add this decl to the current binding level, but not if it comes
4290      from another scope, e.g. a static member variable.  TEM may equal
4291      DECL or it may be a previous decl of the same name.  */
4292   if (decl == error_mark_node
4293       || (TREE_CODE (decl) != PARM_DECL
4294           && DECL_CONTEXT (decl) != NULL_TREE
4295           /* Definitions of namespace members outside their namespace are
4296              possible. */
4297           && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4298       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4299       || TREE_CODE (type) == UNKNOWN_TYPE
4300       /* The declaration of a template specialization does not affect
4301          the functions available for overload resolution, so we do not
4302          call pushdecl.  */
4303       || (TREE_CODE (decl) == FUNCTION_DECL
4304           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4305     return decl;
4306   else
4307     return pushdecl (decl);
4308 }
4309
4310 /* Make the declaration(s) of X appear in CLASS scope
4311    under the name NAME.  */
4312
4313 void
4314 push_class_level_binding (name, x)
4315      tree name;
4316      tree x;
4317 {
4318   tree binding;
4319   /* The class_binding_level will be NULL if x is a template
4320      parameter name in a member template.  */
4321   if (!class_binding_level)
4322     return;
4323
4324   /* Make sure that this new member does not have the same name
4325      as a template parameter.  */
4326   if (TYPE_BEING_DEFINED (current_class_type))
4327     check_template_shadow (x);
4328
4329   /* If this declaration shadows a declaration from an enclosing
4330      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4331      we leave this class.  Record the shadowed declaration here.  */
4332   binding = IDENTIFIER_BINDING (name);
4333   if (binding
4334       && ((TREE_CODE (x) == OVERLOAD
4335            && BINDING_VALUE (binding)
4336            && is_overloaded_fn (BINDING_VALUE (binding)))
4337           || INHERITED_VALUE_BINDING_P (binding)))
4338     {
4339       tree shadow;
4340       tree old_decl;
4341
4342       /* If the old binding was from a base class, and was for a tag
4343          name, slide it over to make room for the new binding.  The
4344          old binding is still visible if explicitly qualified with a
4345          class-key.  */
4346       if (INHERITED_VALUE_BINDING_P (binding)
4347           && BINDING_VALUE (binding)
4348           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4349           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4350           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4351         {
4352           old_decl = BINDING_TYPE (binding);
4353           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4354           BINDING_VALUE (binding) = NULL_TREE;
4355           INHERITED_VALUE_BINDING_P (binding) = 0;
4356         }
4357       else
4358         old_decl = BINDING_VALUE (binding);
4359
4360       /* There was already a binding for X containing fewer
4361          functions than are named in X.  Find the previous
4362          declaration of X on the class-shadowed list, and update it.  */
4363       for (shadow = class_binding_level->class_shadowed;
4364            shadow;
4365            shadow = TREE_CHAIN (shadow))
4366         if (TREE_PURPOSE (shadow) == name
4367             && TREE_TYPE (shadow) == old_decl)
4368           {
4369             BINDING_VALUE (binding) = x;
4370             INHERITED_VALUE_BINDING_P (binding) = 0;
4371             TREE_TYPE (shadow) = x;
4372             return;
4373           }
4374     }
4375
4376   /* If we didn't replace an existing binding, put the binding on the
4377      stack of bindings for the identifier, and update
4378      IDENTIFIER_CLASS_VALUE.  */
4379   if (push_class_binding (name, x))
4380     {
4381       class_binding_level->class_shadowed
4382         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4383                      class_binding_level->class_shadowed);
4384       /* Record the value we are binding NAME to so that we can know
4385          what to pop later.  */
4386       TREE_TYPE (class_binding_level->class_shadowed) = x;
4387     }
4388 }
4389
4390 /* Insert another USING_DECL into the current binding level,
4391    returning this declaration. If this is a redeclaration,
4392    do nothing and return NULL_TREE.  */
4393
4394 tree
4395 push_using_decl (scope, name)
4396      tree scope;
4397      tree name;
4398 {
4399   tree decl;
4400
4401   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4402   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4403   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4404     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4405       break;
4406   if (decl)
4407     return NULL_TREE;
4408   decl = build_lang_decl (USING_DECL, name, void_type_node);
4409   DECL_INITIAL (decl) = scope;
4410   TREE_CHAIN (decl) = current_binding_level->usings;
4411   current_binding_level->usings = decl;
4412   return decl;
4413 }
4414
4415 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4416    changed (i.e. there was already a directive), or the fresh
4417    TREE_LIST otherwise.  */
4418
4419 tree
4420 push_using_directive (used)
4421      tree used;
4422 {
4423   tree ud = current_binding_level->using_directives;
4424   tree iter, ancestor;
4425
4426   /* Check if we already have this. */
4427   if (purpose_member (used, ud) != NULL_TREE)
4428     return NULL_TREE;
4429
4430   /* Recursively add all namespaces used. */
4431   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4432     push_using_directive (TREE_PURPOSE (iter));
4433
4434   ancestor = namespace_ancestor (current_decl_namespace (), used);
4435   ud = current_binding_level->using_directives;
4436   ud = tree_cons (used, ancestor, ud);
4437   current_binding_level->using_directives = ud;
4438   return ud;
4439 }
4440
4441 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4442    other definitions already in place.  We get around this by making
4443    the value of the identifier point to a list of all the things that
4444    want to be referenced by that name.  It is then up to the users of
4445    that name to decide what to do with that list.
4446
4447    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4448    DECL_TEMPLATE_RESULT.  It is dealt with the same way.
4449
4450    FLAGS is a bitwise-or of the following values:
4451      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4452                  namespace scope.
4453      PUSH_USING: DECL is being pushed as the result of a using
4454                  declaration.
4455
4456    The value returned may be a previous declaration if we guessed wrong
4457    about what language DECL should belong to (C or C++).  Otherwise,
4458    it's always DECL (and never something that's not a _DECL).  */
4459
4460 tree
4461 push_overloaded_decl (decl, flags)
4462      tree decl;
4463      int flags;
4464 {
4465   tree name = DECL_NAME (decl);
4466   tree old;
4467   tree new_binding;
4468   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4469
4470   if (doing_global)
4471     old = namespace_binding (name, DECL_CONTEXT (decl));
4472   else
4473     old = lookup_name_current_level (name);
4474
4475   if (old)
4476     {
4477       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4478         {
4479           tree t = TREE_TYPE (old);
4480           if (IS_AGGR_TYPE (t) && warn_shadow
4481               && (! DECL_IN_SYSTEM_HEADER (decl)
4482                   || ! DECL_IN_SYSTEM_HEADER (old)))
4483             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4484           old = NULL_TREE;
4485         }
4486       else if (is_overloaded_fn (old))
4487         {
4488           tree tmp;
4489
4490           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4491             {
4492               tree fn = OVL_CURRENT (tmp);
4493
4494               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4495                   && !(flags & PUSH_USING)
4496                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4497                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4498                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4499                           decl, fn);
4500
4501               if (duplicate_decls (decl, fn))
4502                 return fn;
4503             }
4504         }
4505       else
4506         {
4507           cp_error_at ("previous non-function declaration `%#D'", old);
4508           cp_error ("conflicts with function declaration `%#D'", decl);
4509           return decl;
4510         }
4511     }
4512
4513   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4514     {
4515       if (old && TREE_CODE (old) != OVERLOAD)
4516         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4517       else
4518         new_binding = ovl_cons (decl, old);
4519       if (flags & PUSH_USING)
4520         OVL_USED (new_binding) = 1;
4521     }
4522   else
4523     /* NAME is not ambiguous.  */
4524     new_binding = decl;
4525
4526   if (doing_global)
4527     set_namespace_binding (name, current_namespace, new_binding);
4528   else
4529     {
4530       /* We only create an OVERLOAD if there was a previous binding at
4531          this level, or if decl is a template. In the former case, we
4532          need to remove the old binding and replace it with the new
4533          binding.  We must also run through the NAMES on the binding
4534          level where the name was bound to update the chain.  */
4535
4536       if (TREE_CODE (new_binding) == OVERLOAD && old)
4537         {
4538           tree *d;
4539
4540           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4541                *d;
4542                d = &TREE_CHAIN (*d))
4543             if (*d == old
4544                 || (TREE_CODE (*d) == TREE_LIST
4545                     && TREE_VALUE (*d) == old))
4546               {
4547                 if (TREE_CODE (*d) == TREE_LIST)
4548                   /* Just replace the old binding with the new.  */
4549                   TREE_VALUE (*d) = new_binding;
4550                 else
4551                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4552                   *d = tree_cons (NULL_TREE, new_binding,
4553                                   TREE_CHAIN (*d));
4554
4555                 /* And update the CPLUS_BINDING node.  */
4556                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4557                   = new_binding;
4558                 return decl;
4559               }
4560
4561           /* We should always find a previous binding in this case.  */
4562           my_friendly_abort (0);
4563         }
4564
4565       /* Install the new binding.  */
4566       push_local_binding (name, new_binding, flags);
4567     }
4568
4569   return decl;
4570 }
4571 \f
4572 /* Generate an implicit declaration for identifier FUNCTIONID
4573    as a function of type int ().  Print a warning if appropriate.  */
4574
4575 tree
4576 implicitly_declare (functionid)
4577      tree functionid;
4578 {
4579   register tree decl;
4580
4581   /* We used to reuse an old implicit decl here,
4582      but this loses with inline functions because it can clobber
4583      the saved decl chains.  */
4584   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4585
4586   DECL_EXTERNAL (decl) = 1;
4587   TREE_PUBLIC (decl) = 1;
4588
4589   /* ISO standard says implicit declarations are in the innermost block.
4590      So we record the decl in the standard fashion.  */
4591   pushdecl (decl);
4592   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4593
4594   if (warn_implicit
4595       /* Only one warning per identifier.  */
4596       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4597     {
4598       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4599     }
4600
4601   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4602
4603   return decl;
4604 }
4605
4606 /* Return zero if the declaration NEWDECL is valid
4607    when the declaration OLDDECL (assumed to be for the same name)
4608    has already been seen.
4609    Otherwise return an error message format string with a %s
4610    where the identifier should go.  */
4611
4612 static const char *
4613 redeclaration_error_message (newdecl, olddecl)
4614      tree newdecl, olddecl;
4615 {
4616   if (TREE_CODE (newdecl) == TYPE_DECL)
4617     {
4618       /* Because C++ can put things into name space for free,
4619          constructs like "typedef struct foo { ... } foo"
4620          would look like an erroneous redeclaration.  */
4621       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4622         return 0;
4623       else
4624         return "redefinition of `%#D'";
4625     }
4626   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4627     {
4628       /* If this is a pure function, its olddecl will actually be
4629          the original initialization to `0' (which we force to call
4630          abort()).  Don't complain about redefinition in this case.  */
4631       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4632         return 0;
4633
4634       /* If both functions come from different namespaces, this is not
4635          a redeclaration - this is a conflict with a used function. */
4636       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4637           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4638         return "`%D' conflicts with used function";
4639
4640       /* We'll complain about linkage mismatches in
4641          warn_extern_redeclared_static.  */
4642
4643       /* Defining the same name twice is no good.  */
4644       if (DECL_INITIAL (olddecl) != NULL_TREE
4645           && DECL_INITIAL (newdecl) != NULL_TREE)
4646         {
4647           if (DECL_NAME (olddecl) == NULL_TREE)
4648             return "`%#D' not declared in class";
4649           else
4650             return "redefinition of `%#D'";
4651         }
4652       return 0;
4653     }
4654   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4655     {
4656       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4657            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4658            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4659           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4660               && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4661               && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4662         return "redefinition of `%#D'";
4663       return 0;
4664     }
4665   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4666     {
4667       /* Objects declared at top level:  */
4668       /* If at least one is a reference, it's ok.  */
4669       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4670         return 0;
4671       /* Reject two definitions.  */
4672       return "redefinition of `%#D'";
4673     }
4674   else
4675     {
4676       /* Objects declared with block scope:  */
4677       /* Reject two definitions, and reject a definition
4678          together with an external reference.  */
4679       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4680         return "redeclaration of `%#D'";
4681       return 0;
4682     }
4683 }
4684 \f
4685 /* Create a new label, named ID.  */
4686
4687 static tree
4688 make_label_decl (id, local_p)
4689      tree id;
4690      int local_p;
4691 {
4692   tree decl;
4693
4694   decl = build_decl (LABEL_DECL, id, void_type_node);
4695   if (expanding_p)
4696     /* Make sure every label has an rtx.  */
4697     label_rtx (decl);
4698
4699   DECL_CONTEXT (decl) = current_function_decl;
4700   DECL_MODE (decl) = VOIDmode;
4701   C_DECLARED_LABEL_FLAG (decl) = local_p;
4702
4703   /* Say where one reference is to the label, for the sake of the
4704      error if it is not defined.  */
4705   DECL_SOURCE_LINE (decl) = lineno;
4706   DECL_SOURCE_FILE (decl) = input_filename;
4707
4708   /* Record the fact that this identifier is bound to this label.  */
4709   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4710
4711   /* Record this label on the list of used labels so that we can check
4712      at the end of the function to see whether or not the label was
4713      actually defined.  */
4714   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4715       && (named_label_uses == NULL
4716           || named_label_uses->names_in_scope != current_binding_level->names
4717           || named_label_uses->label_decl != decl))
4718     {
4719       struct named_label_list *new_ent;
4720       new_ent
4721         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4722       new_ent->label_decl = decl;
4723       new_ent->names_in_scope = current_binding_level->names;
4724       new_ent->binding_level = current_binding_level;
4725       new_ent->lineno_o_goto = lineno;
4726       new_ent->filename_o_goto = input_filename;
4727       new_ent->next = named_label_uses;
4728       named_label_uses = new_ent;
4729     }
4730
4731   return decl;
4732 }
4733
4734 /* Look for a label named ID in the current function.  If one cannot
4735    be found, create one.  (We keep track of used, but undefined,
4736    labels, and complain about them at the end of a function.)  */
4737
4738 tree
4739 lookup_label (id)
4740      tree id;
4741 {
4742   tree decl;
4743
4744   /* You can't use labels at global scope.  */
4745   if (current_function_decl == NULL_TREE)
4746     {
4747       error ("label `%s' referenced outside of any function",
4748              IDENTIFIER_POINTER (id));
4749       return NULL_TREE;
4750     }
4751
4752   /* See if we've already got this label.  */
4753   decl = IDENTIFIER_LABEL_VALUE (id);
4754   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4755     return decl;
4756
4757   /* Record this label on the list of labels used in this function.
4758      We do this before calling make_label_decl so that we get the
4759      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4760   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4761                             named_labels);
4762   /* We need a new label.  */
4763   decl = make_label_decl (id, /*local_p=*/0);
4764   /* Now fill in the information we didn't have before.  */
4765   TREE_VALUE (named_labels) = decl;
4766
4767   return decl;
4768 }
4769
4770 /* Declare a local label named ID.  */
4771
4772 tree
4773 declare_local_label (id)
4774      tree id;
4775 {
4776   tree decl;
4777
4778   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4779      this scope we can restore the old value of
4780      IDENTIFIER_TYPE_VALUE.  */
4781   current_binding_level->shadowed_labels
4782     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4783                  current_binding_level->shadowed_labels);
4784   /* Look for the label.  */
4785   decl = make_label_decl (id, /*local_p=*/1);
4786   /* Now fill in the information we didn't have before.  */
4787   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4788
4789   return decl;
4790 }
4791
4792 /* Define a label, specifying the location in the source file.
4793    Return the LABEL_DECL node for the label, if the definition is valid.
4794    Otherwise return 0.  */
4795
4796 tree
4797 define_label (filename, line, name)
4798      char *filename;
4799      int line;
4800      tree name;
4801 {
4802   tree decl = lookup_label (name);
4803
4804   /* After labels, make any new cleanups go into their
4805      own new (temporary) binding contour.  */
4806   current_binding_level->more_cleanups_ok = 0;
4807
4808   if (name == get_identifier ("wchar_t"))
4809     cp_pedwarn ("label named wchar_t");
4810
4811   if (DECL_INITIAL (decl) != NULL_TREE)
4812     {
4813       cp_error ("duplicate label `%D'", decl);
4814       return 0;
4815     }
4816   else
4817     {
4818       struct named_label_list *uses, *prev;
4819       int identified = 0;
4820       int saw_eh = 0;
4821
4822       /* Mark label as having been defined.  */
4823       DECL_INITIAL (decl) = error_mark_node;
4824       /* Say where in the source.  */
4825       DECL_SOURCE_FILE (decl) = filename;
4826       DECL_SOURCE_LINE (decl) = line;
4827
4828       prev = NULL;
4829       uses = named_label_uses;
4830       while (uses != NULL)
4831         if (uses->label_decl == decl)
4832           {
4833             struct binding_level *b = current_binding_level;
4834             while (b)
4835               {
4836                 tree new_decls = b->names;
4837                 tree old_decls = (b == uses->binding_level)
4838                                   ? uses->names_in_scope : NULL_TREE;
4839                 while (new_decls != old_decls)
4840                   {
4841                     if (TREE_CODE (new_decls) == VAR_DECL
4842                         /* Don't complain about crossing initialization
4843                            of internal entities.  They can't be accessed,
4844                            and they should be cleaned up
4845                            by the time we get to the label.  */
4846                         && ! DECL_ARTIFICIAL (new_decls)
4847                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4848                              && pod_type_p (TREE_TYPE (new_decls))))
4849                       {
4850                         /* This is really only important if we're crossing
4851                            an initialization.  The POD stuff is just
4852                            pedantry; why should it matter if the class
4853                            contains a field of pointer to member type?  */
4854                         int problem = (DECL_INITIAL (new_decls)
4855                                        || (TYPE_NEEDS_CONSTRUCTING
4856                                            (TREE_TYPE (new_decls))));
4857
4858                         if (! identified)
4859                           {
4860                             if (problem)
4861                               {
4862                                 cp_error ("jump to label `%D'", decl);
4863                                 error_with_file_and_line
4864                                   (uses->filename_o_goto,
4865                                    uses->lineno_o_goto, "  from here");
4866                               }
4867                             else
4868                               {
4869                                 cp_pedwarn ("jump to label `%D'", decl);
4870                                 pedwarn_with_file_and_line
4871                                   (uses->filename_o_goto,
4872                                    uses->lineno_o_goto, "  from here");
4873                               }
4874                             identified = 1;
4875                           }
4876
4877                         if (problem)
4878                           cp_error_at ("  crosses initialization of `%#D'",
4879                                        new_decls);
4880                         else
4881                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4882                                          new_decls);
4883                       }
4884                     new_decls = TREE_CHAIN (new_decls);
4885                   }
4886                 if (b == uses->binding_level)
4887                   break;
4888                 if (b->eh_region && ! saw_eh)
4889                   {
4890                     if (! identified)
4891                       {
4892                         cp_error ("jump to label `%D'", decl);
4893                         error_with_file_and_line
4894                           (uses->filename_o_goto,
4895                            uses->lineno_o_goto, "  from here");
4896                         identified = 1;
4897                       }
4898                     error ("  enters exception handling block");
4899                     saw_eh = 1;
4900                   }
4901                 b = b->level_chain;
4902               }
4903
4904             if (prev != NULL)
4905               prev->next = uses->next;
4906             else
4907               named_label_uses = uses->next;
4908
4909             uses = uses->next;
4910           }
4911         else
4912           {
4913             prev = uses;
4914             uses = uses->next;
4915           }
4916       current_function_return_value = NULL_TREE;
4917       return decl;
4918     }
4919 }
4920
4921 struct cp_switch
4922 {
4923   struct binding_level *level;
4924   struct cp_switch *next;
4925 };
4926
4927 static struct cp_switch *switch_stack;
4928
4929 void
4930 push_switch ()
4931 {
4932   struct cp_switch *p
4933     = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
4934   p->level = current_binding_level;
4935   p->next = switch_stack;
4936   switch_stack = p;
4937 }
4938
4939 void
4940 pop_switch ()
4941 {
4942   struct cp_switch *cs;
4943   
4944   cs = switch_stack;
4945   switch_stack = switch_stack->next;
4946   free (cs);
4947 }
4948
4949 /* Note that we've seen a definition of a case label, and complain if this
4950    is a bad place for one.  */
4951
4952 void
4953 define_case_label ()
4954 {
4955   tree cleanup = last_cleanup_this_contour ();
4956   struct binding_level *b = current_binding_level;
4957   int identified = 0;
4958
4959   if (! switch_stack)
4960     /* Don't crash; we'll complain in do_case.  */
4961     return;
4962
4963   if (cleanup)
4964     {
4965       static int explained = 0;
4966       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4967       warning ("where case label appears here");
4968       if (!explained)
4969         {
4970           warning ("(enclose actions of previous case statements requiring");
4971           warning ("destructors in their own binding contours.)");
4972           explained = 1;
4973         }
4974     }
4975
4976   for (; b && b != switch_stack->level; b = b->level_chain)
4977     {
4978       tree new_decls = b->names;
4979       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4980         {
4981           if (TREE_CODE (new_decls) == VAR_DECL
4982               /* Don't complain about crossing initialization
4983                  of internal entities.  They can't be accessed,
4984                  and they should be cleaned up
4985                  by the time we get to the label.  */
4986               && ! DECL_ARTIFICIAL (new_decls)
4987               && ((DECL_INITIAL (new_decls) != NULL_TREE
4988                    && DECL_INITIAL (new_decls) != error_mark_node)
4989                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4990             {
4991               if (! identified)
4992                 error ("jump to case label");
4993               identified = 1;
4994               cp_error_at ("  crosses initialization of `%#D'",
4995                            new_decls);
4996             }
4997         }
4998     }
4999
5000   /* After labels, make any new cleanups go into their
5001      own new (temporary) binding contour.  */
5002
5003   current_binding_level->more_cleanups_ok = 0;
5004   current_function_return_value = NULL_TREE;
5005 }
5006 \f
5007 /* Return the list of declarations of the current level.
5008    Note that this list is in reverse order unless/until
5009    you nreverse it; and when you do nreverse it, you must
5010    store the result back using `storedecls' or you will lose.  */
5011
5012 tree
5013 getdecls ()
5014 {
5015   return current_binding_level->names;
5016 }
5017
5018 /* Return the list of type-tags (for structs, etc) of the current level.  */
5019
5020 tree
5021 gettags ()
5022 {
5023   return current_binding_level->tags;
5024 }
5025
5026 /* Store the list of declarations of the current level.
5027    This is done for the parameter declarations of a function being defined,
5028    after they are modified in the light of any missing parameters.  */
5029
5030 static void
5031 storedecls (decls)
5032      tree decls;
5033 {
5034   current_binding_level->names = decls;
5035 }
5036
5037 /* Similarly, store the list of tags of the current level.  */
5038
5039 void
5040 storetags (tags)
5041      tree tags;
5042 {
5043   current_binding_level->tags = tags;
5044 }
5045 \f
5046 /* Given NAME, an IDENTIFIER_NODE,
5047    return the structure (or union or enum) definition for that name.
5048    Searches binding levels from BINDING_LEVEL up to the global level.
5049    If THISLEVEL_ONLY is nonzero, searches only the specified context
5050    (but skips any tag-transparent contexts to find one that is
5051    meaningful for tags).
5052    FORM says which kind of type the caller wants;
5053    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5054    If the wrong kind of type is found, and it's not a template, an error is
5055    reported.  */
5056
5057 static tree
5058 lookup_tag (form, name, binding_level, thislevel_only)
5059      enum tree_code form;
5060      tree name;
5061      struct binding_level *binding_level;
5062      int thislevel_only;
5063 {
5064   register struct binding_level *level;
5065   /* Non-zero if, we should look past a template parameter level, even
5066      if THISLEVEL_ONLY.  */
5067   int allow_template_parms_p = 1;
5068
5069   for (level = binding_level; level; level = level->level_chain)
5070     {
5071       register tree tail;
5072       if (ANON_AGGRNAME_P (name))
5073         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5074           {
5075             /* There's no need for error checking here, because
5076                anon names are unique throughout the compilation.  */
5077             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5078               return TREE_VALUE (tail);
5079           }
5080       else if (level->namespace_p)
5081         /* Do namespace lookup. */
5082         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5083           {
5084             tree old = binding_for_name (name, tail);
5085
5086             /* If we just skipped past a template parameter level,
5087                even though THISLEVEL_ONLY, and we find a template
5088                class declaration, then we use the _TYPE node for the
5089                template.  See the example below.  */
5090             if (thislevel_only && !allow_template_parms_p
5091                 && old && BINDING_VALUE (old)
5092                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5093               old = TREE_TYPE (BINDING_VALUE (old));
5094             else
5095               old = BINDING_TYPE (old);
5096
5097             /* If it has an original type, it is a typedef, and we
5098                should not return it.  */
5099             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5100               old = NULL_TREE;
5101             if (old && TREE_CODE (old) != form
5102                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5103               {
5104                 cp_error ("`%#D' redeclared as %C", old, form);
5105                 return NULL_TREE;
5106               }
5107             if (old)
5108               return old;
5109             if (thislevel_only || tail == global_namespace)
5110               return NULL_TREE;
5111           }
5112       else
5113         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5114           {
5115             if (TREE_PURPOSE (tail) == name)
5116               {
5117                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5118                 /* Should tighten this up; it'll probably permit
5119                    UNION_TYPE and a struct template, for example.  */
5120                 if (code != form
5121                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5122                   {
5123                     /* Definition isn't the kind we were looking for.  */
5124                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5125                               form);
5126                     return NULL_TREE;
5127                   }
5128                 return TREE_VALUE (tail);
5129               }
5130           }
5131       if (thislevel_only && ! level->tag_transparent)
5132         {
5133           if (level->template_parms_p && allow_template_parms_p)
5134             {
5135               /* We must deal with cases like this:
5136
5137                    template <class T> struct S;
5138                    template <class T> struct S {};
5139
5140                  When looking up `S', for the second declaration, we
5141                  would like to find the first declaration.  But, we
5142                  are in the pseudo-global level created for the
5143                  template parameters, rather than the (surrounding)
5144                  namespace level.  Thus, we keep going one more level,
5145                  even though THISLEVEL_ONLY is non-zero.  */
5146               allow_template_parms_p = 0;
5147               continue;
5148             }
5149           else
5150             return NULL_TREE;
5151         }
5152     }
5153   return NULL_TREE;
5154 }
5155
5156 #if 0
5157 void
5158 set_current_level_tags_transparency (tags_transparent)
5159      int tags_transparent;
5160 {
5161   current_binding_level->tag_transparent = tags_transparent;
5162 }
5163 #endif
5164
5165 /* Given a type, find the tag that was defined for it and return the tag name.
5166    Otherwise return 0.  However, the value can never be 0
5167    in the cases in which this is used.
5168
5169    C++: If NAME is non-zero, this is the new name to install.  This is
5170    done when replacing anonymous tags with real tag names.  */
5171
5172 static tree
5173 lookup_tag_reverse (type, name)
5174      tree type;
5175      tree name;
5176 {
5177   register struct binding_level *level;
5178
5179   for (level = current_binding_level; level; level = level->level_chain)
5180     {
5181       register tree tail;
5182       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5183         {
5184           if (TREE_VALUE (tail) == type)
5185             {
5186               if (name)
5187                 TREE_PURPOSE (tail) = name;
5188               return TREE_PURPOSE (tail);
5189             }
5190         }
5191     }
5192   return NULL_TREE;
5193 }
5194 \f
5195 /* Look up NAME in the NAMESPACE.  */
5196
5197 tree
5198 lookup_namespace_name (namespace, name)
5199      tree namespace, name;
5200 {
5201   tree val;
5202   tree template_id = NULL_TREE;
5203
5204   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5205
5206   if (TREE_CODE (name) == NAMESPACE_DECL)
5207     /* This happens for A::B<int> when B is a namespace. */
5208     return name;
5209   else if (TREE_CODE (name) == TEMPLATE_DECL)
5210     {
5211       /* This happens for A::B where B is a template, and there are no
5212          template arguments.  */
5213       cp_error ("invalid use of `%D'", name);
5214       return error_mark_node;
5215     }
5216
5217   namespace = ORIGINAL_NAMESPACE (namespace);
5218
5219   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5220     {
5221       template_id = name;
5222       name = TREE_OPERAND (name, 0);
5223       if (TREE_CODE (name) == OVERLOAD)
5224         name = DECL_NAME (OVL_CURRENT (name));
5225       else if (DECL_P (name))
5226         name = DECL_NAME (name);
5227     }
5228
5229   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5230
5231   val = make_node (CPLUS_BINDING);
5232   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5233     return error_mark_node;
5234
5235   if (BINDING_VALUE (val))
5236     {
5237       val = BINDING_VALUE (val);
5238
5239       if (template_id)
5240         {
5241           if (DECL_CLASS_TEMPLATE_P (val))
5242             val = lookup_template_class (val,
5243                                          TREE_OPERAND (template_id, 1),
5244                                          /*in_decl=*/NULL_TREE,
5245                                          /*context=*/NULL_TREE,
5246                                          /*entering_scope=*/0);
5247           else if (DECL_FUNCTION_TEMPLATE_P (val)
5248                    || TREE_CODE (val) == OVERLOAD)
5249             val = lookup_template_function (val,
5250                                             TREE_OPERAND (template_id, 1));
5251           else
5252             {
5253               cp_error ("`%D::%D' is not a template",
5254                         namespace, name);
5255               return error_mark_node;
5256             }
5257         }
5258
5259       /* If we have a single function from a using decl, pull it out.  */
5260       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5261         val = OVL_FUNCTION (val);
5262       return val;
5263     }
5264
5265   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5266   return error_mark_node;
5267 }
5268
5269 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5270
5271 static unsigned long
5272 typename_hash (k)
5273      hash_table_key k;
5274 {
5275   unsigned long hash;
5276   tree t;
5277
5278   t = (tree) k;
5279   hash = (((unsigned long) TYPE_CONTEXT (t))
5280           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5281
5282   return hash;
5283 }
5284
5285 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5286
5287 static boolean
5288 typename_compare (k1, k2)
5289      hash_table_key k1;
5290      hash_table_key k2;
5291 {
5292   tree t1;
5293   tree t2;
5294   tree d1;
5295   tree d2;
5296
5297   t1 = (tree) k1;
5298   t2 = (tree) k2;
5299   d1 = TYPE_NAME (t1);
5300   d2 = TYPE_NAME (t2);
5301
5302   return (DECL_NAME (d1) == DECL_NAME (d2)
5303           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5304           && ((TREE_TYPE (t1) != NULL_TREE)
5305               == (TREE_TYPE (t2) != NULL_TREE))
5306           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5307           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5308 }
5309
5310 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5311    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5312    is non-NULL, this type is being created by the implicit typename
5313    extension, and BASE_TYPE is a type named `t' in some base class of
5314    `T' which depends on template parameters.
5315
5316    Returns the new TYPENAME_TYPE.  */
5317
5318 tree
5319 build_typename_type (context, name, fullname, base_type)
5320      tree context;
5321      tree name;
5322      tree fullname;
5323      tree base_type;
5324 {
5325   tree t;
5326   tree d;
5327   struct hash_entry* e;
5328
5329   static struct hash_table ht;
5330
5331   if (!ht.table)
5332     {
5333       static struct hash_table *h = &ht;
5334       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5335                             &typename_compare))
5336         fatal ("virtual memory exhausted");
5337       ggc_add_tree_hash_table_root (&h, 1);
5338     }
5339
5340   /* Build the TYPENAME_TYPE.  */
5341   t = make_aggr_type (TYPENAME_TYPE);
5342   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5343   TYPENAME_TYPE_FULLNAME (t) = fullname;
5344   TREE_TYPE (t) = base_type;
5345
5346   /* Build the corresponding TYPE_DECL.  */
5347   d = build_decl (TYPE_DECL, name, t);
5348   TYPE_NAME (TREE_TYPE (d)) = d;
5349   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5350   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5351   DECL_ARTIFICIAL (d) = 1;
5352
5353   /* See if we already have this type.  */
5354   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5355   if (e)
5356     t = (tree) e->key;
5357   else
5358     /* Insert the type into the table.  */
5359     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5360
5361   return t;
5362 }
5363
5364 /* Resolve `typename CONTEXT::NAME'.  Returns an appropriate type,
5365    unless an error occurs, in which case error_mark_node is returned.
5366    If COMPLAIN zero, don't complain about any errors that occur.  */
5367
5368 tree
5369 make_typename_type (context, name, complain)
5370      tree context, name;
5371      int complain;
5372 {
5373   tree fullname;
5374
5375   if (TYPE_P (name))
5376     {
5377       if (!(TYPE_LANG_SPECIFIC (name)
5378             && (CLASSTYPE_IS_TEMPLATE (name)
5379                 || CLASSTYPE_USE_TEMPLATE (name))))
5380         name = TYPE_IDENTIFIER (name);
5381       else
5382         /* Create a TEMPLATE_ID_EXPR for the type.  */
5383         name = build_nt (TEMPLATE_ID_EXPR,
5384                          CLASSTYPE_TI_TEMPLATE (name),
5385                          CLASSTYPE_TI_ARGS (name));
5386     }
5387   else if (TREE_CODE (name) == TYPE_DECL)
5388     name = DECL_NAME (name);
5389
5390   fullname = name;
5391
5392   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5393     {
5394       name = TREE_OPERAND (name, 0);
5395       if (TREE_CODE (name) == TEMPLATE_DECL)
5396         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5397     }
5398   if (TREE_CODE (name) != IDENTIFIER_NODE)
5399     my_friendly_abort (2000);
5400
5401   if (TREE_CODE (context) == NAMESPACE_DECL)
5402     {
5403       /* We can get here from typename_sub0 in the explicit_template_type
5404          expansion.  Just fail.  */
5405       if (complain)
5406         cp_error ("no class template named `%#T' in `%#T'",
5407                   name, context);
5408       return error_mark_node;
5409     }
5410
5411   if (! uses_template_parms (context)
5412       || currently_open_class (context))
5413     {
5414       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5415         {
5416           tree tmpl = NULL_TREE;
5417           if (IS_AGGR_TYPE (context))
5418             tmpl = lookup_field (context, name, 0, 0);
5419           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5420             {
5421               if (complain)
5422                 cp_error ("no class template named `%#T' in `%#T'",
5423                           name, context);
5424               return error_mark_node;
5425             }
5426
5427           return lookup_template_class (tmpl,
5428                                         TREE_OPERAND (fullname, 1),
5429                                         NULL_TREE, context,
5430                                         /*entering_scope=*/0);
5431         }
5432       else
5433         {
5434           tree t;
5435
5436           if (!IS_AGGR_TYPE (context))
5437             {
5438               if (complain)
5439                 cp_error ("no type named `%#T' in `%#T'", name, context);
5440               return error_mark_node;
5441             }
5442
5443           t = lookup_field (context, name, 0, 1);
5444           if (t)
5445             return TREE_TYPE (t);
5446         }
5447     }
5448
5449   /* If the CONTEXT is not a template type, then either the field is
5450      there now or its never going to be.  */
5451   if (!uses_template_parms (context))
5452     {
5453       if (complain)
5454         cp_error ("no type named `%#T' in `%#T'", name, context);
5455       return error_mark_node;
5456     }
5457
5458
5459   return build_typename_type (context, name, fullname,  NULL_TREE);
5460 }
5461
5462 /* Select the right _DECL from multiple choices. */
5463
5464 static tree
5465 select_decl (binding, flags)
5466      tree binding;
5467      int flags;
5468 {
5469   tree val;
5470   val = BINDING_VALUE (binding);
5471   if (LOOKUP_NAMESPACES_ONLY (flags))
5472     {
5473       /* We are not interested in types. */
5474       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5475         return val;
5476       return NULL_TREE;
5477     }
5478
5479   /* If we could have a type and
5480      we have nothing or we need a type and have none.  */
5481   if (BINDING_TYPE (binding)
5482       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5483                    && TREE_CODE (val) != TYPE_DECL)))
5484     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5485   /* Don't return non-types if we really prefer types. */
5486   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5487            && (TREE_CODE (val) != TEMPLATE_DECL
5488                || !DECL_CLASS_TEMPLATE_P (val)))
5489     val = NULL_TREE;
5490
5491   return val;
5492 }
5493
5494 /* Unscoped lookup of a global: iterate over current namespaces,
5495    considering using-directives.  If SPACESP is non-NULL, store a list
5496    of the namespaces we've considered in it.  */
5497
5498 tree
5499 unqualified_namespace_lookup (name, flags, spacesp)
5500      tree name;
5501      int flags;
5502      tree *spacesp;
5503 {
5504   tree b = make_node (CPLUS_BINDING);
5505   tree initial = current_decl_namespace();
5506   tree scope = initial;
5507   tree siter;
5508   struct binding_level *level;
5509   tree val = NULL_TREE;
5510
5511   if (spacesp)
5512     *spacesp = NULL_TREE;
5513
5514   for (; !val; scope = CP_DECL_CONTEXT (scope))
5515     {
5516       if (spacesp)
5517         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5518       val = binding_for_name (name, scope);
5519
5520       /* Initialize binding for this context. */
5521       BINDING_VALUE (b) = BINDING_VALUE (val);
5522       BINDING_TYPE (b) = BINDING_TYPE (val);
5523
5524       /* Add all _DECLs seen through local using-directives. */
5525       for (level = current_binding_level;
5526            !level->namespace_p;
5527            level = level->level_chain)
5528         if (!lookup_using_namespace (name, b, level->using_directives,
5529                                      scope, flags, spacesp))
5530           /* Give up because of error. */
5531           return error_mark_node;
5532
5533       /* Add all _DECLs seen through global using-directives. */
5534       /* XXX local and global using lists should work equally. */
5535       siter = initial;
5536       while (1)
5537         {
5538           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5539                                        scope, flags, spacesp))
5540             /* Give up because of error. */
5541             return error_mark_node;
5542           if (siter == scope) break;
5543           siter = CP_DECL_CONTEXT (siter);
5544         }
5545
5546       val = select_decl (b, flags);
5547       if (scope == global_namespace)
5548         break;
5549     }
5550   return val;
5551 }
5552
5553 /* Combine prefer_type and namespaces_only into flags.  */
5554
5555 static int
5556 lookup_flags (prefer_type, namespaces_only)
5557   int prefer_type, namespaces_only;
5558 {
5559   if (namespaces_only)
5560     return LOOKUP_PREFER_NAMESPACES;
5561   if (prefer_type > 1)
5562     return LOOKUP_PREFER_TYPES;
5563   if (prefer_type > 0)
5564     return LOOKUP_PREFER_BOTH;
5565   return 0;
5566 }
5567
5568 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5569    ignore it or not.  Subroutine of lookup_name_real.  */
5570
5571 static tree
5572 qualify_lookup (val, flags)
5573      tree val;
5574      int flags;
5575 {
5576   if (val == NULL_TREE)
5577     return val;
5578   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5579     return val;
5580   if ((flags & LOOKUP_PREFER_TYPES)
5581       && (TREE_CODE (val) == TYPE_DECL
5582           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5583               && DECL_CLASS_TEMPLATE_P (val))))
5584     return val;
5585   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5586     return NULL_TREE;
5587   return val;
5588 }
5589
5590 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5591    that.  */
5592
5593 static void
5594 warn_about_implicit_typename_lookup (typename, binding)
5595      tree typename;
5596      tree binding;
5597 {
5598   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5599   tree name = DECL_NAME (typename);
5600
5601   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5602          && CLASSTYPE_TEMPLATE_INFO (subtype)
5603          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5604       && ! (TREE_CODE (binding) == TYPE_DECL
5605             && same_type_p (TREE_TYPE (binding), subtype)))
5606     {
5607       cp_warning ("lookup of `%D' finds `%#D'",
5608                   name, binding);
5609       cp_warning ("  instead of `%D' from dependent base class",
5610                   typename);
5611       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5612                   constructor_name (current_class_type), name);
5613     }
5614 }
5615
5616 /* Look up NAME in the current binding level and its superiors in the
5617    namespace of variables, functions and typedefs.  Return a ..._DECL
5618    node of some kind representing its definition if there is only one
5619    such declaration, or return a TREE_LIST with all the overloaded
5620    definitions if there are many, or return 0 if it is undefined.
5621
5622    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5623    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5624    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5625    Otherwise we prefer non-TYPE_DECLs.
5626
5627    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5628    using IDENTIFIER_CLASS_VALUE.  */
5629
5630 static tree
5631 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5632      tree name;
5633      int prefer_type, nonclass, namespaces_only;
5634 {
5635   tree t;
5636   tree val = NULL_TREE;
5637   int yylex = 0;
5638   tree from_obj = NULL_TREE;
5639   int flags;
5640   int val_is_implicit_typename = 0;
5641
5642   /* Hack: copy flag set by parser, if set. */
5643   if (only_namespace_names)
5644     namespaces_only = 1;
5645
5646   if (prefer_type == -2)
5647     {
5648       extern int looking_for_typename;
5649       tree type = NULL_TREE;
5650
5651       yylex = 1;
5652       prefer_type = looking_for_typename;
5653
5654       flags = lookup_flags (prefer_type, namespaces_only);
5655       /* If the next thing is '<', class templates are types. */
5656       if (looking_for_template)
5657         flags |= LOOKUP_TEMPLATES_EXPECTED;
5658
5659       /* std:: becomes :: for now.  */
5660       if (got_scope == std_node)
5661         got_scope = void_type_node;
5662
5663       if (got_scope)
5664         type = got_scope;
5665       else if (got_object != error_mark_node)
5666         type = got_object;
5667
5668       if (type)
5669         {
5670           if (type == error_mark_node)
5671             return error_mark_node;
5672           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5673             type = TREE_TYPE (type);
5674
5675           if (TYPE_P (type))
5676             type = complete_type (type);
5677
5678           if (TREE_CODE (type) == VOID_TYPE)
5679             type = global_namespace;
5680           if (TREE_CODE (type) == NAMESPACE_DECL)
5681             {
5682               val = make_node (CPLUS_BINDING);
5683               flags |= LOOKUP_COMPLAIN;
5684               if (!qualified_lookup_using_namespace (name, type, val, flags))
5685                 return NULL_TREE;
5686               val = select_decl (val, flags);
5687             }
5688           else if (! IS_AGGR_TYPE (type)
5689                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5690                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5691                    || TREE_CODE (type) == TYPENAME_TYPE)
5692             /* Someone else will give an error about this if needed.  */
5693             val = NULL_TREE;
5694           else if (type == current_class_type)
5695             val = IDENTIFIER_CLASS_VALUE (name);
5696           else
5697             {
5698               val = lookup_member (type, name, 0, prefer_type);
5699               type_access_control (type, val);
5700             }
5701         }
5702       else
5703         val = NULL_TREE;
5704
5705       if (got_scope)
5706         goto done;
5707       else if (got_object && val)
5708         from_obj = val;
5709     }
5710   else
5711     {
5712       flags = lookup_flags (prefer_type, namespaces_only);
5713       /* If we're not parsing, we need to complain. */
5714       flags |= LOOKUP_COMPLAIN;
5715     }
5716
5717   /* First, look in non-namespace scopes.  */
5718
5719   if (current_class_type == NULL_TREE)
5720     nonclass = 1;
5721
5722   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5723     {
5724       tree binding;
5725
5726       if (!LOCAL_BINDING_P (t) && nonclass)
5727         /* We're not looking for class-scoped bindings, so keep going.  */
5728         continue;
5729
5730       /* If this is the kind of thing we're looking for, we're done.  */
5731       if (qualify_lookup (BINDING_VALUE (t), flags))
5732         binding = BINDING_VALUE (t);
5733       else if ((flags & LOOKUP_PREFER_TYPES)
5734                && qualify_lookup (BINDING_TYPE (t), flags))
5735         binding = BINDING_TYPE (t);
5736       else
5737         binding = NULL_TREE;
5738
5739       /* Handle access control on types from enclosing or base classes.  */
5740       if (binding && ! yylex
5741           && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5742         type_access_control (BINDING_LEVEL (t)->this_class, binding);
5743
5744       if (binding
5745           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5746         {
5747           if (val_is_implicit_typename && !yylex)
5748             warn_about_implicit_typename_lookup (val, binding);
5749           val = binding;
5750           val_is_implicit_typename
5751             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5752           if (!val_is_implicit_typename)
5753             break;
5754         }
5755     }
5756
5757   /* Now lookup in namespace scopes.  */
5758   if (!val || val_is_implicit_typename)
5759     {
5760       t = unqualified_namespace_lookup (name, flags, 0);
5761       if (t)
5762         {
5763           if (val_is_implicit_typename && !yylex)
5764             warn_about_implicit_typename_lookup (val, t);
5765           val = t;
5766         }
5767     }
5768
5769  done:
5770   if (val)
5771     {
5772       /* This should only warn about types used in qualified-ids.  */
5773       if (from_obj && from_obj != val)
5774         {
5775           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5776               && TREE_CODE (val) == TYPE_DECL
5777               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5778             {
5779               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5780                           name, got_object, TREE_TYPE (from_obj));
5781               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5782                           TREE_TYPE (val));
5783             }
5784
5785           /* We don't change val to from_obj if got_object depends on
5786              template parms because that breaks implicit typename for
5787              destructor calls.  */
5788           if (! uses_template_parms (got_object))
5789             val = from_obj;
5790         }
5791
5792       /* If we have a single function from a using decl, pull it out.  */
5793       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5794         val = OVL_FUNCTION (val);
5795     }
5796   else if (from_obj)
5797     val = from_obj;
5798
5799   return val;
5800 }
5801
5802 tree
5803 lookup_name_nonclass (name)
5804      tree name;
5805 {
5806   return lookup_name_real (name, 0, 1, 0);
5807 }
5808
5809 tree
5810 lookup_function_nonclass (name, args)
5811      tree name;
5812      tree args;
5813 {
5814   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5815 }
5816
5817 tree
5818 lookup_name_namespace_only (name)
5819      tree name;
5820 {
5821   /* type-or-namespace, nonclass, namespace_only */
5822   return lookup_name_real (name, 1, 1, 1);
5823 }
5824
5825 tree
5826 lookup_name (name, prefer_type)
5827      tree name;
5828      int prefer_type;
5829 {
5830   return lookup_name_real (name, prefer_type, 0, 0);
5831 }
5832
5833 /* Similar to `lookup_name' but look only in the innermost non-class
5834    binding level.  */
5835
5836 tree
5837 lookup_name_current_level (name)
5838      tree name;
5839 {
5840   struct binding_level *b;
5841   tree t = NULL_TREE;
5842
5843   b = current_binding_level;
5844   while (b->parm_flag == 2)
5845     b = b->level_chain;
5846
5847   if (b->namespace_p)
5848     {
5849       t = IDENTIFIER_NAMESPACE_VALUE (name);
5850
5851       /* extern "C" function() */
5852       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5853         t = TREE_VALUE (t);
5854     }
5855   else if (IDENTIFIER_BINDING (name)
5856            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5857     {
5858       while (1)
5859         {
5860           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5861             return IDENTIFIER_VALUE (name);
5862
5863           if (b->keep == 2)
5864             b = b->level_chain;
5865           else
5866             break;
5867         }
5868     }
5869
5870   return t;
5871 }
5872
5873 /* Like lookup_name_current_level, but for types.  */
5874
5875 tree
5876 lookup_type_current_level (name)
5877      tree name;
5878 {
5879   register tree t = NULL_TREE;
5880
5881   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5882
5883   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5884       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5885     {
5886       struct binding_level *b = current_binding_level;
5887       while (1)
5888         {
5889           if (purpose_member (name, b->type_shadowed))
5890             return REAL_IDENTIFIER_TYPE_VALUE (name);
5891           if (b->keep == 2)
5892             b = b->level_chain;
5893           else
5894             break;
5895         }
5896     }
5897
5898   return t;
5899 }
5900
5901 void
5902 begin_only_namespace_names ()
5903 {
5904   only_namespace_names = 1;
5905 }
5906
5907 void
5908 end_only_namespace_names ()
5909 {
5910   only_namespace_names = 0;
5911 }
5912 \f
5913 /* Arrange for the user to get a source line number, even when the
5914    compiler is going down in flames, so that she at least has a
5915    chance of working around problems in the compiler.  We used to
5916    call error(), but that let the segmentation fault continue
5917    through; now, it's much more passive by asking them to send the
5918    maintainers mail about the problem.  */
5919
5920 static void
5921 signal_catch (sig)
5922      int sig ATTRIBUTE_UNUSED;
5923 {
5924   signal (SIGSEGV, SIG_DFL);
5925 #ifdef SIGIOT
5926   signal (SIGIOT, SIG_DFL);
5927 #endif
5928 #ifdef SIGILL
5929   signal (SIGILL, SIG_DFL);
5930 #endif
5931 #ifdef SIGABRT
5932   signal (SIGABRT, SIG_DFL);
5933 #endif
5934 #ifdef SIGBUS
5935   signal (SIGBUS, SIG_DFL);
5936 #endif
5937   my_friendly_abort (0);
5938 }
5939
5940 /* Push the declarations of builtin types into the namespace.
5941    RID_INDEX, if < RID_MAX is the index of the builtin type
5942    in the array RID_POINTERS.  NAME is the name used when looking
5943    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5944
5945 static void
5946 record_builtin_type (rid_index, name, type)
5947      enum rid rid_index;
5948      const char *name;
5949      tree type;
5950 {
5951   tree rname = NULL_TREE, tname = NULL_TREE;
5952   tree tdecl = NULL_TREE;
5953
5954   if ((int) rid_index < (int) RID_MAX)
5955     rname = ridpointers[(int) rid_index];
5956   if (name)
5957     tname = get_identifier (name);
5958
5959   TYPE_BUILT_IN (type) = 1;
5960
5961   if (tname)
5962     {
5963       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5964       set_identifier_type_value (tname, NULL_TREE);
5965       if ((int) rid_index < (int) RID_MAX)
5966         /* Built-in types live in the global namespace. */
5967         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5968     }
5969   if (rname != NULL_TREE)
5970     {
5971       if (tname != NULL_TREE)
5972         {
5973           set_identifier_type_value (rname, NULL_TREE);
5974           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5975         }
5976       else
5977         {
5978           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5979           set_identifier_type_value (rname, NULL_TREE);
5980         }
5981     }
5982 }
5983
5984 /* Record one of the standard Java types.
5985  * Declare it as having the given NAME.
5986  * If SIZE > 0, it is the size of one of the integral types;
5987  * otherwise it is the negative of the size of one of the other types.  */
5988
5989 static tree
5990 record_builtin_java_type (name, size)
5991      const char *name;
5992      int size;
5993 {
5994   tree type, decl;
5995   if (size > 0)
5996     type = make_signed_type (size);
5997   else if (size > -32)
5998     { /* "__java_char" or ""__java_boolean". */
5999       type = make_unsigned_type (-size);
6000       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6001     }
6002   else
6003     { /* "__java_float" or ""__java_double". */
6004       type = make_node (REAL_TYPE);
6005       TYPE_PRECISION (type) = - size;
6006       layout_type (type);
6007     }
6008   record_builtin_type (RID_MAX, name, type);
6009   decl = TYPE_NAME (type);
6010
6011   /* Suppress generate debug symbol entries for these types,
6012      since for normal C++ they are just clutter.
6013      However, push_lang_context undoes this if extern "Java" is seen. */
6014   DECL_IGNORED_P (decl) = 1;
6015
6016   TYPE_FOR_JAVA (type) = 1;
6017   return type;
6018 }
6019
6020 /* Push a type into the namespace so that the back-ends ignore it. */
6021
6022 static void
6023 record_unknown_type (type, name)
6024      tree type;
6025      const char *name;
6026 {
6027   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6028   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6029   DECL_IGNORED_P (decl) = 1;
6030   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6031   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6032   TYPE_ALIGN (type) = 1;
6033   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6034 }
6035
6036 /* An string for which we should create an IDENTIFIER_NODE at
6037    startup.  */
6038
6039 typedef struct predefined_identifier
6040 {
6041   /* The name of the identifier.  */
6042   const char *name;
6043   /* The place where the IDENTIFIER_NODE should be stored.  */
6044   tree *node;
6045   /* Non-zero if this is the name of a constructor or destructor.  */
6046   int ctor_or_dtor_p;
6047 } predefined_identifier;
6048
6049 /* Create all the predefined identifiers.  */
6050
6051 static void
6052 initialize_predefined_identifiers () 
6053 {
6054   struct predefined_identifier *pid;
6055
6056   /* A table of identifiers to create at startup.  */
6057   static predefined_identifier predefined_identifiers[] = {
6058     { "C++", &lang_name_cplusplus, 0 },
6059     { "C", &lang_name_c, 0 },
6060     { "Java", &lang_name_java, 0 },
6061     { CTOR_NAME, &ctor_identifier, 1 },
6062     { "__base_ctor", &base_ctor_identifier, 1 },
6063     { "__comp_ctor", &complete_ctor_identifier, 1 },
6064     { DTOR_NAME, &dtor_identifier, 1 },
6065     { "__comp_dtor", &complete_dtor_identifier, 1 },
6066     { "__base_dtor", &base_dtor_identifier, 1 },
6067     { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6068     { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6069     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6070     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6071     { VTABLE_INDEX_NAME, &index_identifier, 0 },
6072     { "nelts", &nelts_identifier, 0 },
6073     { THIS_NAME, &this_identifier, 0 },
6074     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6075     { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6076     { "_vptr", &vptr_identifier, 0 },
6077     { "__cp_push_exception", &cp_push_exception_identifier, 0 },
6078     { NULL, NULL, 0 }
6079   };
6080
6081   for (pid = predefined_identifiers; pid->name; ++pid)
6082     {
6083       *pid->node = get_identifier (pid->name);
6084       if (pid->ctor_or_dtor_p)
6085         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6086     }
6087 }
6088
6089 /* Create the predefined scalar types of C,
6090    and some nodes representing standard constants (0, 1, (void *)0).
6091    Initialize the global binding level.
6092    Make definitions for built-in primitive functions.  */
6093
6094 void
6095 init_decl_processing ()
6096 {
6097   tree fields[20];
6098   int wchar_type_size;
6099   tree array_domain_type;
6100
6101   /* Check to see that the user did not specify an invalid combination
6102      of command-line options.  */
6103   if (flag_new_abi && !flag_vtable_thunks)
6104     fatal ("the new ABI requires vtable thunks");
6105
6106   /* Create all the identifiers we need.  */
6107   initialize_predefined_identifiers ();
6108
6109   /* Let the back-end now how to save and restore language-specific
6110      per-function globals.  */
6111   init_lang_status = &push_cp_function_context;
6112   free_lang_status = &pop_cp_function_context;
6113   mark_lang_status = &mark_cp_function_context;
6114
6115   cp_parse_init ();
6116   init_decl2 ();
6117   init_pt ();
6118
6119   /* Create the global variables.  */
6120   push_to_top_level ();
6121
6122   /* Enter the global namespace. */
6123   my_friendly_assert (global_namespace == NULL_TREE, 375);
6124   push_namespace (get_identifier ("::"));
6125   global_namespace = current_namespace;
6126   current_lang_name = NULL_TREE;
6127
6128   /* Adjust various flags based on command-line settings.  */
6129   if (flag_strict_prototype == 2)
6130     flag_strict_prototype = pedantic;
6131   if (! flag_permissive && ! pedantic)
6132     flag_pedantic_errors = 1;
6133   if (!flag_no_inline)
6134     flag_inline_trees = 1;
6135
6136   strict_prototypes_lang_c = flag_strict_prototype;
6137
6138   /* Initially, C.  */
6139   current_lang_name = lang_name_c;
6140
6141   current_function_decl = NULL_TREE;
6142   current_binding_level = NULL_BINDING_LEVEL;
6143   free_binding_level = NULL_BINDING_LEVEL;
6144
6145   /* Because most segmentation signals can be traced back into user
6146      code, catch them and at least give the user a chance of working
6147      around compiler bugs.  */
6148   signal (SIGSEGV, signal_catch);
6149
6150   /* We will also catch aborts in the back-end through signal_catch and
6151      give the user a chance to see where the error might be, and to defeat
6152      aborts in the back-end when there have been errors previously in their
6153      code.  */
6154 #ifdef SIGIOT
6155   signal (SIGIOT, signal_catch);
6156 #endif
6157 #ifdef SIGILL
6158   signal (SIGILL, signal_catch);
6159 #endif
6160 #ifdef SIGABRT
6161   signal (SIGABRT, signal_catch);
6162 #endif
6163 #ifdef SIGBUS
6164   signal (SIGBUS, signal_catch);
6165 #endif
6166
6167   build_common_tree_nodes (flag_signed_char);
6168
6169   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6170   TREE_TYPE (error_mark_list) = error_mark_node;
6171
6172   /* Make the binding_level structure for global names.  */
6173   pushlevel (0);
6174   global_binding_level = current_binding_level;
6175   /* The global level is the namespace level of ::.  */
6176   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6177   declare_namespace_level ();
6178
6179   /* Define `int' and `char' first so that dbx will output them first.  */
6180   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6181   record_builtin_type (RID_CHAR, "char", char_type_node);
6182
6183   /* `signed' is the same as `int' */
6184   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6185   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6186   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6187   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6188   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6189   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6190   record_builtin_type (RID_MAX, "long long unsigned int",
6191                        long_long_unsigned_type_node);
6192   record_builtin_type (RID_MAX, "long long unsigned",
6193                        long_long_unsigned_type_node);
6194   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6195   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6196   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6197
6198   ptrdiff_type_node
6199     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6200
6201   /* Define both `signed char' and `unsigned char'.  */
6202   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6203   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6204
6205   /* `unsigned long' is the standard type for sizeof.
6206      Note that stddef.h uses `unsigned long',
6207      and this must agree, even if long and int are the same size.  */
6208   set_sizetype
6209     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6210
6211   /* Create the widest literal types. */
6212   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6213   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6214                         widest_integer_literal_type_node));
6215
6216   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6217   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6218                         widest_unsigned_literal_type_node));
6219
6220   /* These are types that type_for_size and type_for_mode use.  */
6221   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6222   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6223   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6224   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6225 #if HOST_BITS_PER_WIDE_INT >= 64
6226   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6227 #endif
6228   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6229   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6230   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6231   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6232 #if HOST_BITS_PER_WIDE_INT >= 64
6233   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6234 #endif
6235
6236   build_common_tree_nodes_2 (flag_short_double);
6237
6238   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6239   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6240   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6241   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6242   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6243   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6244   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6245   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6246
6247   integer_two_node = build_int_2 (2, 0);
6248   TREE_TYPE (integer_two_node) = integer_type_node;
6249   integer_three_node = build_int_2 (3, 0);
6250   TREE_TYPE (integer_three_node) = integer_type_node;
6251
6252   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6253   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6254   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6255   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6256   TYPE_PRECISION (boolean_type_node) = 1;
6257   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6258   boolean_false_node = build_int_2 (0, 0);
6259   TREE_TYPE (boolean_false_node) = boolean_type_node;
6260   boolean_true_node = build_int_2 (1, 0);
6261   TREE_TYPE (boolean_true_node) = boolean_type_node;
6262
6263   signed_size_zero_node = build_int_2 (0, 0);
6264   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6265   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6266   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6267
6268   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6269                         complex_integer_type_node));
6270   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6271                         complex_float_type_node));
6272   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6273                         complex_double_type_node));
6274   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6275                         complex_long_double_type_node));
6276
6277   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6278
6279   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6280   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6281   TREE_PARMLIST (void_list_node) = 1;
6282
6283   /* Used for expressions that do nothing, but are not errors.  */
6284   void_zero_node = build_int_2 (0, 0);
6285   TREE_TYPE (void_zero_node) = void_type_node;
6286
6287   string_type_node = build_pointer_type (char_type_node);
6288   const_string_type_node
6289     = build_pointer_type (build_qualified_type (char_type_node,
6290                                                 TYPE_QUAL_CONST));
6291   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6292 #if 0
6293   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6294 #endif
6295
6296   /* Make a type to be the domain of a few array types
6297      whose domains don't really matter.
6298      200 is small enough that it always fits in size_t.  */
6299   array_domain_type = build_index_type (build_int_2 (200, 0));
6300
6301   /* Make a type for arrays of characters.
6302      With luck nothing will ever really depend on the length of this
6303      array type.  */
6304   char_array_type_node
6305     = build_array_type (char_type_node, array_domain_type);
6306   /* Likewise for arrays of ints.  */
6307   int_array_type_node
6308     = build_array_type (integer_type_node, array_domain_type);
6309
6310   if (flag_new_abi)
6311     delta_type_node = ptrdiff_type_node;
6312   else if (flag_huge_objects)
6313     delta_type_node = long_integer_type_node;
6314   else
6315     delta_type_node = short_integer_type_node;
6316
6317   if (flag_new_abi)
6318     vtable_index_type = ptrdiff_type_node;
6319   else
6320     vtable_index_type = delta_type_node;
6321
6322   default_function_type
6323     = build_function_type (integer_type_node, NULL_TREE);
6324
6325   ptr_type_node = build_pointer_type (void_type_node);
6326   const_ptr_type_node
6327     = build_pointer_type (build_qualified_type (void_type_node,
6328                                                 TYPE_QUAL_CONST));
6329   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6330   lang_type_promotes_to = convert_type_from_ellipsis;
6331
6332   void_ftype_ptr
6333     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6334
6335   /* C++ extensions */
6336
6337   unknown_type_node = make_node (UNKNOWN_TYPE);
6338   record_unknown_type (unknown_type_node, "unknown type");
6339
6340   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6341   TREE_TYPE (unknown_type_node) = unknown_type_node;
6342
6343   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6344
6345   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6346      result.  */
6347   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6348   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6349
6350   /* This is special for C++ so functions can be overloaded.  */
6351   wchar_type_node = get_identifier (flag_short_wchar
6352                                     ? "short unsigned int"
6353                                     : WCHAR_TYPE);
6354   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6355   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6356   signed_wchar_type_node = make_signed_type (wchar_type_size);
6357   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6358   wchar_type_node
6359     = TREE_UNSIGNED (wchar_type_node)
6360       ? unsigned_wchar_type_node
6361       : signed_wchar_type_node;
6362   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6363
6364   /* Artificial declaration of wchar_t -- can be bashed */
6365   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6366                                 wchar_type_node);
6367   pushdecl (wchar_decl_node);
6368
6369   /* This is for wide string constants.  */
6370   wchar_array_type_node
6371     = build_array_type (wchar_type_node, array_domain_type);
6372
6373   if (flag_vtable_thunks)
6374     {
6375       /* Make sure we get a unique function type, so we can give
6376          its pointer type a name.  (This wins for gdb.) */
6377       tree vfunc_type = make_node (FUNCTION_TYPE);
6378       TREE_TYPE (vfunc_type) = integer_type_node;
6379       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6380       layout_type (vfunc_type);
6381
6382       vtable_entry_type = build_pointer_type (vfunc_type);
6383     }
6384   else
6385     {
6386       vtable_entry_type = make_aggr_type (RECORD_TYPE);
6387       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6388                                    delta_type_node);
6389       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6390                                    delta_type_node);
6391       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6392                                    ptr_type_node);
6393       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6394                            double_type_node);
6395
6396       /* Make this part of an invisible union.  */
6397       fields[3] = copy_node (fields[2]);
6398       TREE_TYPE (fields[3]) = delta_type_node;
6399       DECL_NAME (fields[3]) = delta2_identifier;
6400       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6401       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6402       DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
6403       TREE_UNSIGNED (fields[3]) = 0;
6404       TREE_CHAIN (fields[2]) = fields[3];
6405       vtable_entry_type = build_qualified_type (vtable_entry_type,
6406                                                 TYPE_QUAL_CONST);
6407     }
6408   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6409
6410   vtbl_type_node
6411     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6412   layout_type (vtbl_type_node);
6413   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6414   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6415   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6416   layout_type (vtbl_ptr_type_node);
6417   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6418
6419   std_node = build_decl (NAMESPACE_DECL,
6420                          get_identifier (flag_honor_std ? "fake std":"std"),
6421                          void_type_node);
6422   pushdecl (std_node);
6423   
6424   if (flag_new_abi)
6425     {
6426       push_namespace (get_identifier ("__cxxabiv1"));
6427       abi_node = current_namespace;
6428       pop_namespace ();
6429     }
6430
6431   global_type_node = make_node (LANG_TYPE);
6432   record_unknown_type (global_type_node, "global type");
6433
6434   /* Now, C++.  */
6435   current_lang_name = lang_name_cplusplus;
6436
6437   {
6438     tree bad_alloc_type_node, newtype, deltype;
6439     if (flag_honor_std)
6440       push_namespace (get_identifier ("std"));
6441     bad_alloc_type_node = xref_tag
6442       (class_type_node, get_identifier ("bad_alloc"), 1);
6443     if (flag_honor_std)
6444       pop_namespace ();
6445     newtype = build_exception_variant
6446       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6447     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6448     push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6449     push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6450     global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6451                                                deltype);
6452     push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6453   }
6454
6455   abort_fndecl
6456     = build_library_fn_ptr ("__pure_virtual", void_ftype);
6457
6458   /* Perform other language dependent initializations.  */
6459   init_class_processing ();
6460   init_init_processing ();
6461   init_search_processing ();
6462   init_rtti_processing ();
6463
6464   if (flag_exceptions)
6465     init_exception_processing ();
6466   if (flag_no_inline)
6467     {
6468       flag_inline_functions = 0;
6469     }
6470
6471   if (! supports_one_only ())
6472     flag_weak = 0;
6473
6474   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6475   make_fname_decl = cp_make_fname_decl;
6476   declare_function_name ();
6477
6478   /* Prepare to check format strings against argument lists.  */
6479   init_function_format_info ();
6480
6481   /* Show we use EH for cleanups.  */
6482   using_eh_for_cleanups ();
6483
6484   print_error_function = lang_print_error_function;
6485   lang_get_alias_set = &c_get_alias_set;
6486   valid_lang_attribute = cp_valid_lang_attribute;
6487
6488   /* Maintain consistency.  Perhaps we should just complain if they
6489      say -fwritable-strings?  */
6490   if (flag_writable_strings)
6491     flag_const_strings = 0;
6492
6493   /* Add GC roots for all of our global variables.  */
6494   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6495   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6496   ggc_add_tree_root (&integer_three_node, 1);
6497   ggc_add_tree_root (&integer_two_node, 1);
6498   ggc_add_tree_root (&signed_size_zero_node, 1);
6499   ggc_add_tree_root (&size_one_node, 1);
6500   ggc_add_tree_root (&size_zero_node, 1);
6501   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6502                 mark_binding_level);
6503   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6504   ggc_add_tree_root (&static_ctors, 1);
6505   ggc_add_tree_root (&static_dtors, 1);
6506   ggc_add_tree_root (&lastiddecl, 1);
6507
6508   ggc_add_tree_root (&last_function_parm_tags, 1);
6509   ggc_add_tree_root (&current_function_return_value, 1);
6510   ggc_add_tree_root (&current_function_parms, 1);
6511   ggc_add_tree_root (&current_function_parm_tags, 1);
6512   ggc_add_tree_root (&last_function_parms, 1);
6513   ggc_add_tree_root (&error_mark_list, 1);
6514
6515   ggc_add_tree_root (&global_namespace, 1);
6516   ggc_add_tree_root (&global_type_node, 1);
6517   ggc_add_tree_root (&anonymous_namespace_name, 1);
6518
6519   ggc_add_tree_root (&got_object, 1);
6520   ggc_add_tree_root (&got_scope, 1);
6521
6522   ggc_add_tree_root (&current_lang_name, 1);
6523   ggc_add_tree_root (&static_aggregates, 1);
6524 }
6525
6526 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6527    decl, NAME is the initialization string and TYPE_DEP indicates whether
6528    NAME depended on the type of the function. We make use of that to detect
6529    __PRETTY_FUNCTION__ inside a template fn.  Because we build a tree for
6530    the function before emitting any of it, we don't need to treat the
6531    VAR_DECL specially. We can decide whether to emit it later, if it was
6532    used.  */
6533
6534 static tree
6535 cp_make_fname_decl (id, name, type_dep)
6536      tree id;
6537      const char *name;
6538      int type_dep;
6539 {
6540   tree decl, type, init;
6541   size_t length = strlen (name);
6542   tree domain = NULL_TREE;
6543   
6544   if (!processing_template_decl)
6545     type_dep = 0;
6546   if (!type_dep)
6547     domain = build_index_type (build_int_2 (length, 0));
6548
6549   type =  build_cplus_array_type
6550           (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6551            domain);
6552
6553   decl = build_decl (VAR_DECL, id, type);
6554   TREE_STATIC (decl) = 1;
6555   TREE_READONLY (decl) = 1;
6556   DECL_SOURCE_LINE (decl) = 0;
6557   DECL_ARTIFICIAL (decl) = 1;
6558   DECL_IN_SYSTEM_HEADER (decl) = 1;
6559   pushdecl (decl);
6560   if (processing_template_decl)
6561     decl = push_template_decl (decl);
6562   if (type_dep)
6563     {
6564       init = build (FUNCTION_NAME, type);
6565       DECL_PRETTY_FUNCTION_P (decl) = 1;
6566     }
6567   else
6568     {
6569       init = build_string (length + 1, name);
6570       TREE_TYPE (init) = type;
6571     }
6572   DECL_INITIAL (decl) = init;
6573   cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6574   
6575   /* We will have to make sure we only emit this, if it is actually used. */
6576   return decl;
6577 }
6578
6579 /* Function to print any language-specific context for an error message.  */
6580
6581 static void
6582 lang_print_error_function (file)
6583      const char *file;
6584 {
6585   default_print_error_function (file);
6586   maybe_print_template_context ();
6587 }
6588
6589 /* Entry point for the benefit of c_common_nodes_and_builtins.
6590
6591    Make a definition for a builtin function named NAME and whose data type
6592    is TYPE.  TYPE should be a function type with argument types.
6593
6594    CLASS and CODE tell later passes how to compile calls to this function.
6595    See tree.h for possible values.
6596
6597    If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6598    the name to be called if we can't opencode the function.  */
6599
6600 tree
6601 builtin_function (name, type, code, class, libname)
6602      const char *name;
6603      tree type;
6604      int code;
6605      enum built_in_class class;
6606      const char *libname;
6607 {
6608   tree decl = build_library_fn_1 (get_identifier (name), type);
6609   DECL_BUILT_IN_CLASS (decl) = class;
6610   DECL_FUNCTION_CODE (decl) = code;
6611
6612   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6613
6614   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6615      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6616      function in the namespace.  */
6617   pushdecl (decl);
6618   if (libname)
6619     DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
6620   make_function_rtl (decl);
6621   return decl;
6622 }
6623
6624 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6625    function.  Not called directly.  */
6626
6627 static tree
6628 build_library_fn_1 (name, type)
6629      tree name;
6630      tree type;
6631 {
6632   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6633   DECL_EXTERNAL (fn) = 1;
6634   TREE_PUBLIC (fn) = 1;
6635   DECL_ARTIFICIAL (fn) = 1;
6636   TREE_NOTHROW (fn) = 1;
6637   return fn;
6638 }
6639
6640 /* Returns the _DECL for a library function with C linkage.
6641    We assume that such functions never throw; if this is incorrect,
6642    callers should unset TREE_NOTHROW.  */
6643
6644 tree
6645 build_library_fn (name, type)
6646      tree name;
6647      tree type;
6648 {
6649   tree fn = build_library_fn_1 (name, type);
6650   make_function_rtl (fn);
6651   return fn;
6652 }
6653
6654 /* Returns the _DECL for a library function with C++ linkage.  */
6655
6656 tree
6657 build_cp_library_fn (name, type)
6658      tree name;
6659      tree type;
6660 {
6661   tree fn = build_library_fn_1 (name, type);
6662   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6663   set_mangled_name_for_decl (fn);
6664   make_function_rtl (fn);
6665   return fn;
6666 }
6667
6668 /* Like build_library_fn, but takes a C string instead of an
6669    IDENTIFIER_NODE.  */
6670
6671 tree
6672 build_library_fn_ptr (name, type)
6673      const char *name;
6674      tree type;
6675 {
6676   return build_library_fn (get_identifier (name), type);
6677 }
6678
6679 /* Like build_cp_library_fn, but takes a C string instead of an
6680    IDENTIFIER_NODE.  */
6681
6682 tree
6683 build_cp_library_fn_ptr (name, type)
6684      const char *name;
6685      tree type;
6686 {
6687   return build_cp_library_fn (get_identifier (name), type);
6688 }
6689
6690 /* Like build_library_fn, but also pushes the function so that we will
6691    be able to find it via IDENTIFIER_GLOBAL_VALUE.  */
6692
6693 tree
6694 push_library_fn (name, type)
6695      tree name, type;
6696 {
6697   tree fn = build_library_fn (name, type);
6698   pushdecl_top_level (fn);
6699   return fn;
6700 }
6701
6702 /* Like build_cp_library_fn, but also pushes the function so that it
6703    will be found by normal lookup.  */
6704
6705 tree
6706 push_cp_library_fn (name, type)
6707      tree name;
6708      tree type;
6709 {
6710   tree fn = build_cp_library_fn (name, type);
6711   pushdecl (fn);
6712   return fn;
6713 }
6714
6715 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6716    a FUNCTION_TYPE.  */
6717
6718 tree
6719 push_void_library_fn (name, parmtypes)
6720      tree name, parmtypes;
6721 {
6722   tree type = build_function_type (void_type_node, parmtypes);
6723   return push_library_fn (name, type);
6724 }
6725
6726 /* Like push_library_fn, but also note that this function throws
6727    and does not return.  Used for __throw_foo and the like.  */
6728
6729 tree
6730 push_throw_library_fn (name, type)
6731      tree name, type;
6732 {
6733   tree fn = push_library_fn (name, type);
6734   TREE_THIS_VOLATILE (fn) = 1;
6735   TREE_NOTHROW (fn) = 0;
6736   return fn;
6737 }
6738 \f
6739 /* When we call finish_struct for an anonymous union, we create
6740    default copy constructors and such.  But, an anonymous union
6741    shouldn't have such things; this function undoes the damage to the
6742    anonymous union type T.
6743
6744    (The reason that we create the synthesized methods is that we don't
6745    distinguish `union { int i; }' from `typedef union { int i; } U'.
6746    The first is an anonymous union; the second is just an ordinary
6747    union type.)  */
6748
6749 void
6750 fixup_anonymous_aggr (t)
6751      tree t;
6752 {
6753   tree *q;
6754
6755   /* Wipe out memory of synthesized methods */
6756   TYPE_HAS_CONSTRUCTOR (t) = 0;
6757   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6758   TYPE_HAS_INIT_REF (t) = 0;
6759   TYPE_HAS_CONST_INIT_REF (t) = 0;
6760   TYPE_HAS_ASSIGN_REF (t) = 0;
6761   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6762
6763   /* Splice the implicitly generated functions out of the TYPE_METHODS
6764      list.  */
6765   q = &TYPE_METHODS (t);
6766   while (*q)
6767     {
6768       if (DECL_ARTIFICIAL (*q))
6769         *q = TREE_CHAIN (*q);
6770       else
6771         q = &TREE_CHAIN (*q);
6772     }
6773
6774   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
6775   if (TYPE_METHODS (t))
6776     error ("an anonymous union cannot have function members");
6777 }
6778
6779 /* Make sure that a declaration with no declarator is well-formed, i.e.
6780    just defines a tagged type or anonymous union.
6781
6782    Returns the type defined, if any.  */
6783
6784 tree
6785 check_tag_decl (declspecs)
6786      tree declspecs;
6787 {
6788   int found_type = 0;
6789   int saw_friend = 0;
6790   tree ob_modifier = NULL_TREE;
6791   register tree link;
6792   register tree t = NULL_TREE;
6793
6794   for (link = declspecs; link; link = TREE_CHAIN (link))
6795     {
6796       register tree value = TREE_VALUE (link);
6797
6798       if (TYPE_P (value)
6799           || (TREE_CODE (value) == IDENTIFIER_NODE
6800               && IDENTIFIER_GLOBAL_VALUE (value)
6801               && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
6802         {
6803           ++found_type;
6804
6805           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6806             {
6807               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6808               t = value;
6809             }
6810         }
6811       else if (value == ridpointers[(int) RID_FRIEND])
6812         {
6813           if (current_class_type == NULL_TREE
6814               || current_scope () != current_class_type)
6815             ob_modifier = value;
6816           else
6817             saw_friend = 1;
6818         }
6819       else if (value == ridpointers[(int) RID_STATIC]
6820                || value == ridpointers[(int) RID_EXTERN]
6821                || value == ridpointers[(int) RID_AUTO]
6822                || value == ridpointers[(int) RID_REGISTER]
6823                || value == ridpointers[(int) RID_INLINE]
6824                || value == ridpointers[(int) RID_VIRTUAL]
6825                || value == ridpointers[(int) RID_CONST]
6826                || value == ridpointers[(int) RID_VOLATILE]
6827                || value == ridpointers[(int) RID_EXPLICIT])
6828         ob_modifier = value;
6829     }
6830
6831   if (found_type > 1)
6832     error ("multiple types in one declaration");
6833
6834   if (t == NULL_TREE && ! saw_friend)
6835     pedwarn ("declaration does not declare anything");
6836
6837   /* Check for an anonymous union.  We're careful
6838      accessing TYPE_IDENTIFIER because some built-in types, like
6839      pointer-to-member types, do not have TYPE_NAME.  */
6840   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6841            && TYPE_NAME (t)
6842            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6843     {
6844       /* Anonymous unions are objects, so they can have specifiers.  */;
6845       SET_ANON_AGGR_TYPE_P (t);
6846
6847       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6848         pedwarn ("ISO C++ prohibits anonymous structs");
6849     }
6850
6851   else if (ob_modifier)
6852     {
6853       if (ob_modifier == ridpointers[(int) RID_INLINE]
6854           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6855         cp_error ("`%D' can only be specified for functions", ob_modifier);
6856       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6857         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6858       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6859         cp_error ("`%D' can only be specified for constructors",
6860                   ob_modifier);
6861       else
6862         cp_error ("`%D' can only be specified for objects and functions",
6863                   ob_modifier);
6864     }
6865
6866   return t;
6867 }
6868
6869 /* Called when a declaration is seen that contains no names to declare.
6870    If its type is a reference to a structure, union or enum inherited
6871    from a containing scope, shadow that tag name for the current scope
6872    with a forward reference.
6873    If its type defines a new named structure or union
6874    or defines an enum, it is valid but we need not do anything here.
6875    Otherwise, it is an error.
6876
6877    C++: may have to grok the declspecs to learn about static,
6878    complain for anonymous unions.  */
6879
6880 void
6881 shadow_tag (declspecs)
6882      tree declspecs;
6883 {
6884   tree t = check_tag_decl (declspecs);
6885
6886   if (t)
6887     maybe_process_partial_specialization (t);
6888
6889   /* This is where the variables in an anonymous union are
6890      declared.  An anonymous union declaration looks like:
6891      union { ... } ;
6892      because there is no declarator after the union, the parser
6893      sends that declaration here.  */
6894   if (t && ANON_AGGR_TYPE_P (t))
6895     {
6896       fixup_anonymous_aggr (t);
6897
6898       if (TYPE_FIELDS (t))
6899         {
6900           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6901                                       NULL_TREE);
6902           finish_anon_union (decl);
6903         }
6904     }
6905 }
6906 \f
6907 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6908
6909 tree
6910 groktypename (typename)
6911      tree typename;
6912 {
6913   if (TREE_CODE (typename) != TREE_LIST)
6914     return typename;
6915   return grokdeclarator (TREE_VALUE (typename),
6916                          TREE_PURPOSE (typename),
6917                          TYPENAME, 0, NULL_TREE);
6918 }
6919
6920 /* Decode a declarator in an ordinary declaration or data definition.
6921    This is called as soon as the type information and variable name
6922    have been parsed, before parsing the initializer if any.
6923    Here we create the ..._DECL node, fill in its type,
6924    and put it on the list of decls for the current context.
6925    The ..._DECL node is returned as the value.
6926
6927    Exception: for arrays where the length is not specified,
6928    the type is left null, to be filled in by `cp_finish_decl'.
6929
6930    Function definitions do not come here; they go to start_function
6931    instead.  However, external and forward declarations of functions
6932    do go through here.  Structure field declarations are done by
6933    grokfield and not through here.  */
6934
6935 tree
6936 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6937      tree declarator, declspecs;
6938      int initialized;
6939      tree attributes, prefix_attributes;
6940 {
6941   register tree decl;
6942   register tree type, tem;
6943   tree context;
6944   extern int have_extern_spec;
6945   extern int used_extern_spec;
6946   tree attrlist;
6947
6948 #if 0
6949   /* See code below that used this.  */
6950   int init_written = initialized;
6951 #endif
6952
6953   /* This should only be done once on the top most decl.  */
6954   if (have_extern_spec && !used_extern_spec)
6955     {
6956       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6957                                   declspecs);
6958       used_extern_spec = 1;
6959     }
6960
6961   if (attributes || prefix_attributes)
6962     attrlist = build_tree_list (attributes, prefix_attributes);
6963   else
6964     attrlist = NULL_TREE;
6965
6966   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6967                          attrlist);
6968
6969   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6970     return NULL_TREE;
6971
6972   type = TREE_TYPE (decl);
6973
6974   if (type == error_mark_node)
6975     return NULL_TREE;
6976
6977   context = DECL_CONTEXT (decl);
6978
6979   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6980       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6981     {
6982       /* When parsing the initializer, lookup should use the object's
6983          namespace. */
6984       push_decl_namespace (context);
6985     }
6986
6987   /* We are only interested in class contexts, later. */
6988   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6989     context = NULL_TREE;
6990
6991   if (initialized)
6992     /* Is it valid for this decl to have an initializer at all?
6993        If not, set INITIALIZED to zero, which will indirectly
6994        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6995     switch (TREE_CODE (decl))
6996       {
6997       case TYPE_DECL:
6998         /* typedef foo = bar  means give foo the same type as bar.
6999            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7000            Any other case of an initialization in a TYPE_DECL is an error.  */
7001         if (pedantic || list_length (declspecs) > 1)
7002           {
7003             cp_error ("typedef `%D' is initialized", decl);
7004             initialized = 0;
7005           }
7006         break;
7007
7008       case FUNCTION_DECL:
7009         cp_error ("function `%#D' is initialized like a variable", decl);
7010         initialized = 0;
7011         break;
7012
7013       default:
7014         break;
7015       }
7016
7017   if (initialized)
7018     {
7019       if (! toplevel_bindings_p ()
7020           && DECL_EXTERNAL (decl))
7021         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7022                     decl);
7023       DECL_EXTERNAL (decl) = 0;
7024       if (toplevel_bindings_p ())
7025         TREE_STATIC (decl) = 1;
7026
7027       /* Tell `pushdecl' this is an initialized decl
7028          even though we don't yet have the initializer expression.
7029          Also tell `cp_finish_decl' it may store the real initializer.  */
7030       DECL_INITIAL (decl) = error_mark_node;
7031     }
7032
7033 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7034   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7035 #endif
7036
7037   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7038   cplus_decl_attributes (decl, attributes, prefix_attributes);
7039
7040   if (context && COMPLETE_TYPE_P (complete_type (context)))
7041     {
7042       push_nested_class (context, 2);
7043
7044       if (TREE_CODE (decl) == VAR_DECL)
7045         {
7046           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7047           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7048             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7049           else
7050             {
7051               if (DECL_CONTEXT (field) != context)
7052                 {
7053                   cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7054                               DECL_CONTEXT (field), DECL_NAME (decl),
7055                               context, DECL_NAME (decl));
7056                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7057                 }
7058               /* Static data member are tricky; an in-class initialization
7059                  still doesn't provide a definition, so the in-class
7060                  declaration will have DECL_EXTERNAL set, but will have an
7061                  initialization.  Thus, duplicate_decls won't warn
7062                  about this situation, and so we check here.  */
7063               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7064                 cp_error ("duplicate initialization of %D", decl);
7065               if (duplicate_decls (decl, field))
7066                 decl = field;
7067             }
7068         }
7069       else
7070         {
7071           tree field = check_classfn (context, decl);
7072           if (field && duplicate_decls (decl, field))
7073             decl = field;
7074         }
7075
7076       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7077       DECL_IN_AGGR_P (decl) = 0;
7078       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7079           || CLASSTYPE_USE_TEMPLATE (context))
7080         {
7081           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7082           /* [temp.expl.spec] An explicit specialization of a static data
7083              member of a template is a definition if the declaration
7084              includes an initializer; otherwise, it is a declaration.
7085
7086              We check for processing_specialization so this only applies
7087              to the new specialization syntax.  */
7088           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7089             DECL_EXTERNAL (decl) = 1;
7090         }
7091
7092       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7093         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7094                     decl);
7095     }
7096
7097   /* Enter this declaration into the symbol table.  */
7098   tem = maybe_push_decl (decl);
7099
7100   if (processing_template_decl)
7101     tem = push_template_decl (tem);
7102
7103 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7104   /* Tell the back-end to use or not use .common as appropriate.  If we say
7105      -fconserve-space, we want this to save .data space, at the expense of
7106      wrong semantics.  If we say -fno-conserve-space, we want this to
7107      produce errors about redefs; to do this we force variables into the
7108      data segment.  */
7109   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7110 #endif
7111
7112   if (! processing_template_decl)
7113     start_decl_1 (tem);
7114
7115   return tem;
7116 }
7117
7118 void
7119 start_decl_1 (decl)
7120      tree decl;
7121 {
7122   tree type = TREE_TYPE (decl);
7123   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7124
7125   if (type == error_mark_node)
7126     return;
7127
7128   /* If this type of object needs a cleanup, but we're not allowed to
7129      add any more objects with cleanups to the current scope, create a
7130      new binding level.  */
7131   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7132       && current_binding_level->more_cleanups_ok == 0)
7133     {
7134       keep_next_level (2);
7135       pushlevel (1);
7136       clear_last_expr ();
7137       add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7138     }
7139
7140   if (initialized)
7141     /* Is it valid for this decl to have an initializer at all?
7142        If not, set INITIALIZED to zero, which will indirectly
7143        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7144     {
7145       /* Don't allow initializations for incomplete types except for
7146          arrays which might be completed by the initialization.  */
7147       if (COMPLETE_TYPE_P (complete_type (type)))
7148         ;                       /* A complete type is ok.  */
7149       else if (TREE_CODE (type) != ARRAY_TYPE)
7150         {
7151           cp_error ("variable `%#D' has initializer but incomplete type",
7152                     decl);
7153           initialized = 0;
7154           type = TREE_TYPE (decl) = error_mark_node;
7155         }
7156       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7157         {
7158           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7159             cp_error ("elements of array `%#D' have incomplete type", decl);
7160           /* else we already gave an error in start_decl.  */
7161           initialized = 0;
7162         }
7163     }
7164
7165   if (!initialized
7166       && TREE_CODE (decl) != TYPE_DECL
7167       && TREE_CODE (decl) != TEMPLATE_DECL
7168       && type != error_mark_node
7169       && IS_AGGR_TYPE (type) 
7170       && ! DECL_EXTERNAL (decl))
7171     {
7172       if ((! processing_template_decl || ! uses_template_parms (type))
7173           && !COMPLETE_TYPE_P (complete_type (type)))
7174         {
7175           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7176                  decl);
7177           /* Change the type so that assemble_variable will give
7178              DECL an rtl we can live with: (mem (const_int 0)).  */
7179           type = TREE_TYPE (decl) = error_mark_node;
7180         }
7181       else
7182         {
7183           /* If any base type in the hierarchy of TYPE needs a constructor,
7184              then we set initialized to 1.  This way any nodes which are
7185              created for the purposes of initializing this aggregate
7186              will live as long as it does.  This is necessary for global
7187              aggregates which do not have their initializers processed until
7188              the end of the file.  */
7189           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7190         }
7191     }
7192
7193   if (! initialized)
7194     DECL_INITIAL (decl) = NULL_TREE;
7195 }
7196
7197 /* Handle initialization of references.
7198    These three arguments are from `cp_finish_decl', and have the
7199    same meaning here that they do there.
7200
7201    Quotes on semantics can be found in ARM 8.4.3.  */
7202
7203 static void
7204 grok_reference_init (decl, type, init)
7205      tree decl, type, init;
7206 {
7207   tree tmp;
7208
7209   if (init == NULL_TREE)
7210     {
7211       if ((DECL_LANG_SPECIFIC (decl) == 0
7212            || DECL_IN_AGGR_P (decl) == 0)
7213           && ! DECL_THIS_EXTERN (decl))
7214         cp_error ("`%D' declared as reference but not initialized", decl);
7215       return;
7216     }
7217
7218   if (init == error_mark_node)
7219     return;
7220
7221   if (TREE_CODE (init) == CONSTRUCTOR)
7222     {
7223       cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7224       return;
7225     }
7226
7227   if (TREE_CODE (init) == TREE_LIST)
7228     init = build_compound_expr (init);
7229
7230   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7231     init = convert_from_reference (init);
7232
7233   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7234       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7235     {
7236       /* Note: default conversion is only called in very special cases.  */
7237       init = default_conversion (init);
7238     }
7239
7240   /* Convert INIT to the reference type TYPE.  This may involve the
7241      creation of a temporary, whose lifetime must be the same as that
7242      of the reference.  If so, a DECL_STMT for the temporary will be
7243      added just after the DECL_STMT for DECL.  That's why we don't set
7244      DECL_INITIAL for local references (instead assigning to them
7245      explicitly); we need to allow the temporary to be initialized
7246      first.  */
7247   tmp = convert_to_reference
7248     (type, init, CONV_IMPLICIT,
7249      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7250
7251   if (tmp == error_mark_node)
7252     return;
7253   else if (tmp != NULL_TREE)
7254     {
7255       init = tmp;
7256       tmp = save_expr (tmp);
7257       if (building_stmt_tree ())
7258         {
7259           /* Initialize the declaration.  */
7260           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7261           finish_expr_stmt (tmp);
7262         }
7263       else
7264         DECL_INITIAL (decl) = tmp;
7265     }
7266   else
7267     {
7268       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7269       return;
7270     }
7271
7272   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7273     {
7274       expand_static_init (decl, DECL_INITIAL (decl));
7275       DECL_INITIAL (decl) = NULL_TREE;
7276     }
7277   return;
7278 }
7279
7280 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7281    mucking with forces it does not comprehend (i.e. initialization with a
7282    constructor).  If we are at global scope and won't go into COMMON, fill
7283    it in with a dummy CONSTRUCTOR to force the variable into .data;
7284    otherwise we can use error_mark_node.  */
7285
7286 static tree
7287 obscure_complex_init (decl, init)
7288      tree decl, init;
7289 {
7290   if (! flag_no_inline && TREE_STATIC (decl))
7291     {
7292       if (extract_init (decl, init))
7293         return NULL_TREE;
7294     }
7295
7296 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7297   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7298     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7299                                  NULL_TREE);
7300   else
7301 #endif
7302     DECL_INITIAL (decl) = error_mark_node;
7303
7304   return init;
7305 }
7306
7307 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7308    array until we finish parsing the initializer.  If that's the
7309    situation we're in, update DECL accordingly.  */
7310
7311 static void
7312 maybe_deduce_size_from_array_init (decl, init)
7313      tree decl;
7314      tree init;
7315 {
7316   tree type = TREE_TYPE (decl);
7317
7318   if (TREE_CODE (type) == ARRAY_TYPE
7319       && TYPE_DOMAIN (type) == NULL_TREE
7320       && TREE_CODE (decl) != TYPE_DECL)
7321     {
7322       int do_default
7323         = (TREE_STATIC (decl)
7324            /* Even if pedantic, an external linkage array
7325               may have incomplete type at first.  */
7326            ? pedantic && ! DECL_EXTERNAL (decl)
7327            : !DECL_EXTERNAL (decl));
7328       tree initializer = init ? init : DECL_INITIAL (decl);
7329       int failure = complete_array_type (type, initializer, do_default);
7330
7331       if (failure == 1)
7332         cp_error ("initializer fails to determine size of `%D'", decl);
7333
7334       if (failure == 2)
7335         {
7336           if (do_default)
7337             cp_error ("array size missing in `%D'", decl);
7338           /* If a `static' var's size isn't known, make it extern as
7339              well as static, so it does not get allocated.  If it's not
7340              `static', then don't mark it extern; finish_incomplete_decl
7341              will give it a default size and it will get allocated.  */
7342           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7343             DECL_EXTERNAL (decl) = 1;
7344         }
7345
7346       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7347           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7348                               integer_zero_node))
7349         cp_error ("zero-size array `%D'", decl);
7350
7351       layout_decl (decl, 0);
7352     }
7353 }
7354
7355 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7356    any appropriate error messages regarding the layout.  */
7357
7358 static void
7359 layout_var_decl (decl)
7360      tree decl;
7361 {
7362   tree type = TREE_TYPE (decl);
7363 #if 0
7364   tree ttype = target_type (type);
7365 #endif
7366
7367   /* If we haven't already layed out this declaration, do so now.
7368      Note that we must not call complete type for an external object
7369      because it's type might involve templates that we are not
7370      supposed to isntantiate yet.  (And it's perfectly legal to say
7371      `extern X x' for some incomplete type `X'.)  */
7372   if (!DECL_EXTERNAL (decl))
7373     complete_type (type);
7374   if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
7375     layout_decl (decl, 0);
7376
7377   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7378     {
7379       /* An automatic variable with an incomplete type: that is an error.
7380          Don't talk about array types here, since we took care of that
7381          message in grokdeclarator.  */
7382       cp_error ("storage size of `%D' isn't known", decl);
7383       TREE_TYPE (decl) = error_mark_node;
7384     }
7385 #if 0
7386   /* Keep this code around in case we later want to control debug info
7387      based on whether a type is "used".  (jason 1999-11-11) */
7388
7389   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7390     /* Let debugger know it should output info for this type.  */
7391     note_debug_info_needed (ttype);
7392
7393   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7394     note_debug_info_needed (DECL_CONTEXT (decl));
7395 #endif
7396
7397   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7398       && DECL_SIZE (decl) != NULL_TREE
7399       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7400     {
7401       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7402         constant_expression_warning (DECL_SIZE (decl));
7403       else
7404         cp_error ("storage size of `%D' isn't constant", decl);
7405     }
7406 }
7407
7408 /* If a local static variable is declared in an inline function, or if
7409    we have a weak definition, we must endeavor to create only one
7410    instance of the variable at link-time.  */
7411
7412 static void
7413 maybe_commonize_var (decl)
7414      tree decl;
7415 {
7416   /* Static data in a function with comdat linkage also has comdat
7417      linkage.  */
7418   if (TREE_STATIC (decl)
7419       /* Don't mess with __FUNCTION__.  */
7420       && ! DECL_ARTIFICIAL (decl)
7421       && current_function_decl
7422       && DECL_CONTEXT (decl) == current_function_decl
7423       && (DECL_THIS_INLINE (current_function_decl)
7424           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7425       && TREE_PUBLIC (current_function_decl))
7426     {
7427       /* Rather than try to get this right with inlining, we suppress
7428          inlining of such functions.  */
7429       current_function_cannot_inline
7430         = "function with static variable cannot be inline";
7431
7432       /* If flag_weak, we don't need to mess with this, as we can just
7433          make the function weak, and let it refer to its unique local
7434          copy.  This works because we don't allow the function to be
7435          inlined.  */
7436       if (! flag_weak)
7437         {
7438           if (DECL_INTERFACE_KNOWN (current_function_decl))
7439             {
7440               TREE_PUBLIC (decl) = 1;
7441               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7442             }
7443           else if (DECL_INITIAL (decl) == NULL_TREE
7444                    || DECL_INITIAL (decl) == error_mark_node)
7445             {
7446               TREE_PUBLIC (decl) = 1;
7447               DECL_COMMON (decl) = 1;
7448             }
7449           /* else we lose. We can only do this if we can use common,
7450              which we can't if it has been initialized.  */
7451
7452           if (TREE_PUBLIC (decl))
7453             DECL_ASSEMBLER_NAME (decl)
7454               = build_static_name (current_function_decl, DECL_NAME (decl));
7455           else
7456             {
7457               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7458               cp_warning_at ("  you can work around this by removing the initializer", decl);
7459             }
7460         }
7461     }
7462   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7463     /* Set it up again; we might have set DECL_INITIAL since the last
7464        time.  */
7465     comdat_linkage (decl);
7466 }
7467
7468 /* Issue an error message if DECL is an uninitialized const variable.  */
7469
7470 static void
7471 check_for_uninitialized_const_var (decl)
7472      tree decl;
7473 {
7474   tree type = TREE_TYPE (decl);
7475
7476   /* ``Unless explicitly declared extern, a const object does not have
7477      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7478      7.1.6 */
7479   if (TREE_CODE (decl) == VAR_DECL
7480       && TREE_CODE (type) != REFERENCE_TYPE
7481       && CP_TYPE_CONST_P (type)
7482       && !TYPE_NEEDS_CONSTRUCTING (type)
7483       && !DECL_INITIAL (decl))
7484     cp_error ("uninitialized const `%D'", decl);
7485 }
7486
7487 /* Verify INIT (the initializer for DECL), and record the
7488    initialization in DECL_INITIAL, if appropriate.  Returns a new
7489    value for INIT.  */
7490
7491 static tree
7492 check_initializer (decl, init)
7493      tree decl;
7494      tree init;
7495 {
7496   tree type;
7497
7498   if (TREE_CODE (decl) == FIELD_DECL)
7499     return init;
7500
7501   type = TREE_TYPE (decl);
7502
7503   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7504   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7505     init = NULL_TREE;
7506
7507   /* Check the initializer.  */
7508   if (init)
7509     {
7510       /* Things that are going to be initialized need to have complete
7511          type.  */
7512       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7513
7514       if (type == error_mark_node)
7515         /* We will have already complained.  */
7516         init = NULL_TREE;
7517       else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7518         {
7519           cp_error ("variable-sized object `%D' may not be initialized", decl);
7520           init = NULL_TREE;
7521         }
7522       else if (TREE_CODE (type) == ARRAY_TYPE
7523                && !COMPLETE_TYPE_P (TREE_TYPE (type)))
7524         {
7525           cp_error ("elements of array `%#D' have incomplete type", decl);
7526           init = NULL_TREE;
7527         }
7528       else if (!COMPLETE_TYPE_P (type))
7529         {
7530           cp_error ("`%D' has incomplete type", decl);
7531           TREE_TYPE (decl) = error_mark_node;
7532           init = NULL_TREE;
7533         }
7534     }
7535
7536   if (TREE_CODE (decl) == CONST_DECL)
7537     {
7538       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7539
7540       DECL_INITIAL (decl) = init;
7541
7542       /* This will keep us from needing to worry about our obstacks.  */
7543       my_friendly_assert (init != NULL_TREE, 149);
7544       init = NULL_TREE;
7545     }
7546   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7547     {
7548       if (TREE_STATIC (decl))
7549         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7550       grok_reference_init (decl, type, init);
7551       init = NULL_TREE;
7552     }
7553   else if (init)
7554     {
7555       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7556         {
7557           if (TREE_CODE (type) == ARRAY_TYPE)
7558             init = digest_init (type, init, (tree *) 0);
7559           else if (TREE_CODE (init) == CONSTRUCTOR
7560                    && TREE_HAS_CONSTRUCTOR (init))
7561             {
7562               if (TYPE_NON_AGGREGATE_CLASS (type))
7563                 {
7564                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7565                             decl);
7566                   init = error_mark_node;
7567                 }
7568               else
7569                 goto dont_use_constructor;
7570             }
7571         }
7572       else
7573         {
7574         dont_use_constructor:
7575           if (TREE_CODE (init) != TREE_VEC)
7576             init = store_init_value (decl, init);
7577         }
7578
7579       if (init)
7580         /* We must hide the initializer so that expand_decl
7581            won't try to do something it does not understand.  */
7582         init = obscure_complex_init (decl, init);
7583     }
7584   else if (DECL_EXTERNAL (decl))
7585     ;
7586   else if (TYPE_P (type)
7587            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7588     {
7589       tree core_type = strip_array_types (type);
7590
7591       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7592         {
7593           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7594             cp_error ("structure `%D' with uninitialized const members", decl);
7595           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7596             cp_error ("structure `%D' with uninitialized reference members",
7597                       decl);
7598         }
7599
7600       check_for_uninitialized_const_var (decl);
7601
7602       if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
7603         init = obscure_complex_init (decl, NULL_TREE);
7604
7605     }
7606   else
7607     check_for_uninitialized_const_var (decl);
7608
7609   return init;
7610 }
7611
7612 /* If DECL is not a local variable, give it RTL.  */
7613
7614 static void
7615 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7616      tree decl;
7617      tree init;
7618      const char *asmspec;
7619 {
7620   int toplev;
7621   tree type;
7622
7623   type = TREE_TYPE (decl);
7624   toplev = toplevel_bindings_p ();
7625
7626   /* Handle non-variables up front.  */
7627   if (TREE_CODE (decl) != VAR_DECL)
7628     {
7629       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7630       return;
7631     }
7632
7633   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7634   if (asmspec)
7635     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7636
7637   if (DECL_VIRTUAL_P (decl))
7638     make_decl_rtl (decl, NULL_PTR, toplev);
7639   else if (TREE_READONLY (decl)
7640            && DECL_INITIAL (decl) != NULL_TREE
7641            && DECL_INITIAL (decl) != error_mark_node
7642            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7643     {
7644       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7645
7646       if (toplev && ! TREE_PUBLIC (decl))
7647         {
7648           /* If this is a static const, change its apparent linkage
7649              if it belongs to a #pragma interface.  */
7650           if (!interface_unknown)
7651             {
7652               TREE_PUBLIC (decl) = 1;
7653               DECL_EXTERNAL (decl) = interface_only;
7654             }
7655           make_decl_rtl (decl, asmspec, toplev);
7656         }
7657       else if (toplev)
7658         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7659     }
7660   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7661     {
7662       my_friendly_assert (TREE_STATIC (decl), 19990828);
7663
7664       if (init == NULL_TREE
7665 #ifdef DEFAULT_STATIC_DEFS
7666           /* If this code is dead, then users must
7667              explicitly declare static member variables
7668              outside the class def'n as well.  */
7669           && TYPE_NEEDS_CONSTRUCTING (type)
7670 #endif
7671           )
7672         {
7673           DECL_EXTERNAL (decl) = 1;
7674           make_decl_rtl (decl, asmspec, 1);
7675         }
7676       else
7677         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7678     }
7679   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7680            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7681     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7682 }
7683
7684 /* Create RTL for the local static variable DECL.  */
7685
7686 void
7687 make_rtl_for_local_static (decl)
7688      tree decl;
7689 {
7690   const char *asmspec = NULL;
7691
7692   /* If we inlined this variable, we could see it's declaration
7693      again.  */
7694   if (DECL_RTL (decl))
7695     return;
7696
7697   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7698     {
7699       /* The only way this situaton can occur is if the
7700          user specified a name for this DECL using the
7701          `attribute' syntax.  */
7702       asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7703       DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7704     }
7705
7706   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7707 }
7708
7709 /* The old ARM scoping rules injected variables declared in the
7710    initialization statement of a for-statement into the surrounding
7711    scope.  We support this usage, in order to be backward-compatible.
7712    DECL is a just-declared VAR_DECL; if necessary inject its
7713    declaration into the surrounding scope.  */
7714
7715 void
7716 maybe_inject_for_scope_var (decl)
7717      tree decl;
7718 {
7719   if (current_binding_level->is_for_scope)
7720     {
7721       struct binding_level *outer
7722         = current_binding_level->level_chain;
7723
7724       /* Check to see if the same name is already bound at the outer
7725          level, either because it was directly declared, or because a
7726          dead for-decl got preserved.  In either case, the code would
7727          not have been valid under the ARM scope rules, so clear
7728          is_for_scope for the current_binding_level.
7729
7730          Otherwise, we need to preserve the temp slot for decl to last
7731          into the outer binding level.  */
7732
7733       tree outer_binding
7734         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7735
7736       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7737           && (TREE_CODE (BINDING_VALUE (outer_binding))
7738               == VAR_DECL)
7739           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7740         {
7741           BINDING_VALUE (outer_binding)
7742             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7743           current_binding_level->is_for_scope = 0;
7744         }
7745       else if (DECL_IN_MEMORY_P (decl))
7746         preserve_temp_slots (DECL_RTL (decl));
7747     }
7748 }
7749
7750 /* Generate code to initialize DECL (a local variable).  */
7751
7752 void
7753 initialize_local_var (decl, init, flags)
7754      tree decl;
7755      tree init;
7756      int flags;
7757 {
7758   tree type = TREE_TYPE (decl);
7759
7760   /* If the type is bogus, don't bother initializing the variable.  */
7761   if (type == error_mark_node)
7762     return;
7763
7764   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7765     {
7766       /* If we used it already as memory, it must stay in memory.  */
7767       DECL_INITIAL (decl) = NULL_TREE;
7768       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7769     }
7770
7771   /* Local statics are handled differently from ordinary automatic
7772      variables.  */
7773   if (TREE_STATIC (decl))
7774     {
7775       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7776           || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7777         expand_static_init (decl, init);
7778       return;
7779     }
7780
7781   if (DECL_SIZE (decl) && type != error_mark_node)
7782     {
7783       int already_used;
7784
7785       /* Compute and store the initial value.  */
7786       already_used = TREE_USED (decl) || TREE_USED (type);
7787
7788       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7789         {
7790           int saved_stmts_are_full_exprs_p;
7791
7792           emit_line_note (DECL_SOURCE_FILE (decl),
7793                           DECL_SOURCE_LINE (decl));
7794           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7795           stmts_are_full_exprs_p = 1;
7796           finish_expr_stmt (build_aggr_init (decl, init, flags));
7797           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7798         }
7799
7800       /* Set this to 0 so we can tell whether an aggregate which was
7801          initialized was ever used.  Don't do this if it has a
7802          destructor, so we don't complain about the 'resource
7803          allocation is initialization' idiom.  Now set
7804          attribute((unused)) on types so decls of that type will be
7805          marked used. (see TREE_USED, above.)  */
7806       if (TYPE_NEEDS_CONSTRUCTING (type)
7807           && ! already_used
7808           && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7809           && DECL_NAME (decl))
7810         TREE_USED (decl) = 0;
7811       else if (already_used)
7812         TREE_USED (decl) = 1;
7813     }
7814 }
7815
7816 /* Generate code to destroy DECL (a local variable).  */
7817
7818 static void
7819 destroy_local_var (decl)
7820      tree decl;
7821 {
7822   tree type = TREE_TYPE (decl);
7823   tree cleanup;
7824
7825   /* Only variables get cleaned up.  */
7826   if (TREE_CODE (decl) != VAR_DECL)
7827     return;
7828
7829   /* And only things with destructors need cleaning up.  */
7830   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7831     return;
7832
7833   if (TREE_CODE (decl) == VAR_DECL &&
7834       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7835     /* We don't clean up things that aren't defined in this
7836        translation unit, or that need a static cleanup.  The latter
7837        are handled by finish_file.  */
7838     return;
7839
7840   /* Compute the cleanup.  */
7841   cleanup = maybe_build_cleanup (decl);
7842
7843   /* Record the cleanup required for this declaration.  */
7844   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7845       && cleanup)
7846     finish_decl_cleanup (decl, cleanup);
7847 }
7848
7849 /* Let the back-end know about DECL.  */
7850
7851 void
7852 emit_local_var (decl)
7853      tree decl;
7854 {
7855   /* Create RTL for this variable.  */
7856   if (DECL_RTL (decl))
7857     /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7858        All other local variables are assigned RTL in this function.  */
7859     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7860                         19990828);
7861   else
7862     {
7863       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7864         /* The user must have specified an assembler name for this
7865            variable.  Set that up now.  */
7866         rest_of_decl_compilation
7867           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7868            /*top_level=*/0, /*at_end=*/0);
7869       else
7870         expand_decl (decl);
7871     }
7872
7873   /* Actually do the initialization.  */
7874   expand_start_target_temps ();
7875   expand_decl_init (decl);
7876   expand_end_target_temps ();
7877 }
7878
7879 /* Finish processing of a declaration;
7880    install its line number and initial value.
7881    If the length of an array type is not known before,
7882    it must be determined now, from the initial value, or it is an error.
7883
7884    INIT0 holds the value of an initializer that should be allowed to escape
7885    the normal rules.
7886
7887    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
7888    if the (init) syntax was used.  */
7889
7890 void
7891 cp_finish_decl (decl, init, asmspec_tree, flags)
7892      tree decl, init;
7893      tree asmspec_tree;
7894      int flags;
7895 {
7896   register tree type;
7897   tree ttype = NULL_TREE;
7898   const char *asmspec = NULL;
7899   int was_readonly = 0;
7900
7901   if (! decl)
7902     {
7903       if (init)
7904         error ("assignment (not initialization) in declaration");
7905       return;
7906     }
7907
7908   /* If a name was specified, get the string.  */
7909   if (asmspec_tree)
7910       asmspec = TREE_STRING_POINTER (asmspec_tree);
7911
7912   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7913     {
7914       cp_error ("cannot initialize `%D' to namespace `%D'",
7915                 decl, init);
7916       init = NULL_TREE;
7917     }
7918
7919   if (current_class_type
7920       && CP_DECL_CONTEXT (decl) == current_class_type
7921       && TYPE_BEING_DEFINED (current_class_type)
7922       && (DECL_INITIAL (decl) || init))
7923     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7924
7925   if (TREE_CODE (decl) == VAR_DECL
7926       && DECL_CONTEXT (decl)
7927       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7928       && DECL_CONTEXT (decl) != current_namespace
7929       && init)
7930     {
7931       /* Leave the namespace of the object. */
7932       pop_decl_namespace ();
7933     }
7934
7935   type = TREE_TYPE (decl);
7936
7937   if (type == error_mark_node)
7938     return;
7939   
7940   /* Add this declaration to the statement-tree.  */
7941   if (building_stmt_tree () && at_function_scope_p ())
7942     add_decl_stmt (decl);
7943
7944   if (TYPE_HAS_MUTABLE_P (type))
7945     TREE_READONLY (decl) = 0;
7946
7947   if (processing_template_decl)
7948     {
7949       if (init && DECL_INITIAL (decl))
7950         DECL_INITIAL (decl) = init;
7951       goto finish_end0;
7952     }
7953
7954   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7955   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7956
7957   /* Take care of TYPE_DECLs up front.  */
7958   if (TREE_CODE (decl) == TYPE_DECL)
7959     {
7960       if (init && DECL_INITIAL (decl))
7961         {
7962           /* typedef foo = bar; store the type of bar as the type of foo.  */
7963           TREE_TYPE (decl) = type = TREE_TYPE (init);
7964           DECL_INITIAL (decl) = init = NULL_TREE;
7965         }
7966       if (type != error_mark_node
7967           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7968         {
7969           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7970             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7971           set_identifier_type_value (DECL_NAME (decl), type);
7972           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7973         }
7974       GNU_xref_decl (current_function_decl, decl);
7975
7976       /* If we have installed this as the canonical typedef for this
7977          type, and that type has not been defined yet, delay emitting
7978          the debug information for it, as we will emit it later.  */
7979       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7980           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7981         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7982
7983       rest_of_decl_compilation (decl, NULL_PTR,
7984                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7985       goto finish_end;
7986     }
7987
7988   if (TREE_CODE (decl) != FUNCTION_DECL)
7989     ttype = target_type (type);
7990
7991   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7992       && TYPE_NEEDS_CONSTRUCTING (type))
7993     {
7994       /* Currently, GNU C++ puts constants in text space, making them
7995          impossible to initialize.  In the future, one would hope for
7996          an operating system which understood the difference between
7997          initialization and the running of a program.  */
7998       was_readonly = 1;
7999       TREE_READONLY (decl) = 0;
8000     }
8001
8002   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8003     {
8004       /* This must override the asm specifier which was placed by
8005          grokclassfn.  Lay this out fresh.  */
8006       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8007       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8008       make_decl_rtl (decl, asmspec, 0);
8009     }
8010
8011   /* Deduce size of array from initialization, if not already known.  */
8012   maybe_deduce_size_from_array_init (decl, init);
8013   init = check_initializer (decl, init);
8014
8015   GNU_xref_decl (current_function_decl, decl);
8016
8017   if (TREE_CODE (decl) == VAR_DECL)
8018     layout_var_decl (decl);
8019
8020   /* Output the assembler code and/or RTL code for variables and functions,
8021      unless the type is an undefined structure or union.
8022      If not, it will get done when the type is completed.  */
8023   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8024       || TREE_CODE (decl) == RESULT_DECL)
8025     {
8026       if (TREE_CODE (decl) == VAR_DECL)
8027         maybe_commonize_var (decl);
8028
8029       make_rtl_for_nonlocal_decl (decl, init, asmspec);
8030
8031       if (TREE_CODE (type) == FUNCTION_TYPE
8032           || TREE_CODE (type) == METHOD_TYPE)
8033         abstract_virtuals_error (decl,
8034                                  strip_array_types (TREE_TYPE (type)));
8035       else
8036         abstract_virtuals_error (decl, strip_array_types (type));
8037
8038       if (TREE_CODE (decl) == FUNCTION_DECL)
8039         ;
8040       else if (DECL_EXTERNAL (decl)
8041                && ! (DECL_LANG_SPECIFIC (decl)
8042                      && DECL_NOT_REALLY_EXTERN (decl)))
8043         {
8044           if (init)
8045             DECL_INITIAL (decl) = init;
8046         }
8047       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8048         {
8049           /* This is a local declaration.  */
8050           if (doing_semantic_analysis_p ())
8051             maybe_inject_for_scope_var (decl);
8052           /* Initialize the local variable.  But, if we're building a
8053              statement-tree, we'll do the initialization when we
8054              expand the tree.  */
8055           if (processing_template_decl)
8056             {
8057               if (init || DECL_INITIAL (decl) == error_mark_node)
8058                 DECL_INITIAL (decl) = init;
8059             }
8060           else
8061             {
8062               /* If we're not building RTL, then we need to do so
8063                  now.  */
8064               if (!building_stmt_tree ())
8065                 emit_local_var (decl);
8066               /* Initialize the variable.  */
8067               initialize_local_var (decl, init, flags);
8068               /* Clean up the variable.  */
8069               destroy_local_var (decl);
8070             }
8071         }
8072       else if (TREE_STATIC (decl) && type != error_mark_node)
8073         {
8074           /* Cleanups for static variables are handled by `finish_file'.  */
8075           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8076               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8077             expand_static_init (decl, init);
8078         }
8079     finish_end0:
8080
8081       /* Undo call to `pushclass' that was done in `start_decl'
8082          due to initialization of qualified member variable.
8083          I.e., Foo::x = 10;  */
8084       {
8085         tree context = CP_DECL_CONTEXT (decl);
8086         if (context
8087             && TYPE_P (context)
8088             && (TREE_CODE (decl) == VAR_DECL
8089                 /* We also have a pushclass done that we need to undo here
8090                    if we're at top level and declare a method.  */
8091                 || TREE_CODE (decl) == FUNCTION_DECL)
8092             /* If size hasn't been set, we're still defining it,
8093                and therefore inside the class body; don't pop
8094                the binding level..  */
8095             && COMPLETE_TYPE_P (context)
8096             && context == current_class_type)
8097           pop_nested_class ();
8098       }
8099     }
8100
8101  finish_end:
8102
8103   if (was_readonly)
8104     TREE_READONLY (decl) = 1;
8105 }
8106
8107 /* This is here for a midend callback from c-common.c */
8108
8109 void
8110 finish_decl (decl, init, asmspec_tree)
8111      tree decl, init;
8112      tree asmspec_tree;
8113 {
8114   cp_finish_decl (decl, init, asmspec_tree, 0);
8115 }
8116
8117 /* Returns a declaration for a VAR_DECL as if:
8118
8119      extern "C" TYPE NAME;
8120
8121    had been seen.  Used to create compiler-generated global
8122    variables.  */
8123
8124 tree
8125 declare_global_var (name, type)
8126      tree name;
8127      tree type;
8128 {
8129   tree decl;
8130
8131   push_to_top_level ();
8132   decl = build_decl (VAR_DECL, name, type);
8133   TREE_PUBLIC (decl) = 1;
8134   DECL_EXTERNAL (decl) = 1;
8135   DECL_ARTIFICIAL (decl) = 1;
8136   pushdecl (decl);
8137   cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8138   pop_from_top_level ();
8139
8140   return decl;
8141 }
8142
8143 /* Returns a pointer to the `atexit' function.  Note that if
8144    FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8145    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
8146
8147 static tree
8148 get_atexit_node ()
8149 {
8150   tree atexit_fndecl;
8151   tree arg_types;
8152   tree fn_type;
8153   tree fn_ptr_type;
8154   const char *name;
8155
8156   if (atexit_node)
8157     return atexit_node;
8158
8159   if (flag_use_cxa_atexit)
8160     {
8161       /* The declaration for `__cxa_atexit' is:
8162
8163            int __cxa_atexit (void (*)(void *), void *, void *)
8164
8165          We build up the argument types and then then function type
8166          itself.  */
8167
8168       /* First, build the pointer-to-function type for the first
8169          argument.  */
8170       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8171       fn_type = build_function_type (void_type_node, arg_types);
8172       fn_ptr_type = build_pointer_type (fn_type);
8173       /* Then, build the rest of the argument types.  */
8174       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8175       arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8176       arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8177       /* And the final __cxa_atexit type.  */
8178       fn_type = build_function_type (integer_type_node, arg_types);
8179       fn_ptr_type = build_pointer_type (fn_type);
8180       name = "__cxa_atexit";
8181     }
8182   else
8183     {
8184       /* The declaration for `atexit' is:
8185
8186            int atexit (void (*)());
8187
8188          We build up the argument types and then then function type
8189          itself.  */
8190       fn_type = build_function_type (void_type_node, void_list_node);
8191       fn_ptr_type = build_pointer_type (fn_type);
8192       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8193       /* Build the final atexit type.  */
8194       fn_type = build_function_type (integer_type_node, arg_types);
8195       name = "atexit";
8196     }
8197
8198   /* Now, build the function declaration.  */
8199   push_lang_context (lang_name_c);
8200   atexit_fndecl = build_library_fn_ptr (name, fn_type);
8201   mark_used (atexit_fndecl);
8202   pop_lang_context ();
8203   atexit_node = default_conversion (atexit_fndecl);
8204
8205   return atexit_node;
8206 }
8207
8208 /* Returns the __dso_handle VAR_DECL.  */
8209
8210 static tree
8211 get_dso_handle_node ()
8212 {
8213   if (dso_handle_node)
8214     return dso_handle_node;
8215
8216   /* Declare the variable.  */
8217   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8218                                         ptr_type_node);
8219
8220   return dso_handle_node;
8221 }
8222
8223 /* Begin a new function with internal linkage whose job will be simply
8224    to destroy some particular variable.  */
8225
8226 static tree
8227 start_cleanup_fn ()
8228 {
8229   static int counter = 0;
8230   int old_interface_unknown = interface_unknown;
8231   char name[32];
8232   tree parmtypes;
8233   tree fntype;
8234   tree fndecl;
8235
8236   push_to_top_level ();
8237
8238   /* No need to mangle this.  */
8239   push_lang_context (lang_name_c);
8240
8241   interface_unknown = 1;
8242
8243   /* Build the parameter-types.  */
8244   parmtypes = void_list_node;
8245   /* Functions passed to __cxa_atexit take an additional parameter.
8246      We'll just ignore it.  After we implement the new calling
8247      convention for destructors, we can eliminate the use of
8248      additional cleanup functions entirely in the -fnew-abi case.  */
8249   if (flag_use_cxa_atexit)
8250     parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8251   /* Build the function type itself.  */
8252   fntype = build_function_type (void_type_node, parmtypes);
8253   /* Build the name of the function.  */
8254   sprintf (name, "__tcf_%d", counter++);
8255   /* Build the function declaration.  */
8256   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8257   /* It's a function with internal linkage, generated by the
8258      compiler.  */
8259   TREE_PUBLIC (fndecl) = 0;
8260   DECL_ARTIFICIAL (fndecl) = 1;
8261   /* Build the parameter.  */
8262   if (flag_use_cxa_atexit)
8263     {
8264       tree parmdecl;
8265
8266       parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8267       DECL_CONTEXT (parmdecl) = fndecl;
8268       DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8269       TREE_USED (parmdecl) = 1;
8270       DECL_ARGUMENTS (fndecl) = parmdecl;
8271     }
8272
8273   pushdecl (fndecl);
8274   start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8275   do_pushlevel ();
8276
8277   interface_unknown = old_interface_unknown;
8278
8279   pop_lang_context ();
8280
8281   return current_function_decl;
8282 }
8283
8284 /* Finish the cleanup function begun by start_cleanup_fn.  */
8285
8286 static void
8287 end_cleanup_fn ()
8288 {
8289   do_poplevel ();
8290
8291   expand_body (finish_function (0));
8292
8293   pop_from_top_level ();
8294 }
8295
8296 /* Generate code to handle the destruction of DECL, an object with
8297    static storage duration.  */
8298
8299 void
8300 register_dtor_fn (decl)
8301      tree decl;
8302 {
8303   tree cleanup;
8304   tree compound_stmt;
8305   tree args;
8306   tree fcall;
8307
8308   int saved_flag_access_control;
8309
8310   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8311     return;
8312
8313   /* Call build_cleanup before we enter the anonymous function so that
8314      any access checks will be done relative to the current scope,
8315      rather than the scope of the anonymous function.  */
8316   build_cleanup (decl);
8317
8318   /* Now start the function.  */
8319   cleanup = start_cleanup_fn ();
8320
8321   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8322      to the original function, rather than the anonymous one.  That
8323      will make the back-end think that nested functions are in use,
8324      which causes confusion.  */
8325   saved_flag_access_control = flag_access_control;
8326   flag_access_control = 0;
8327   fcall = build_cleanup (decl);
8328   flag_access_control = saved_flag_access_control;
8329
8330   /* Create the body of the anonymous function.  */
8331   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8332   finish_expr_stmt (fcall);
8333   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8334   end_cleanup_fn ();
8335
8336   /* Call atexit with the cleanup function.  */
8337   mark_addressable (cleanup);
8338   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8339   if (flag_use_cxa_atexit)
8340     {
8341       args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8342       args = tree_cons (NULL_TREE, null_pointer_node, args);
8343       args = tree_cons (NULL_TREE, cleanup, args);
8344     }
8345   else
8346     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8347   finish_expr_stmt (build_function_call (get_atexit_node (), args));
8348 }
8349
8350 void
8351 expand_static_init (decl, init)
8352      tree decl;
8353      tree init;
8354 {
8355   tree oldstatic = value_member (decl, static_aggregates);
8356
8357   if (oldstatic)
8358     {
8359       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8360         cp_error ("multiple initializations given for `%D'", decl);
8361     }
8362   else if (! toplevel_bindings_p ())
8363     {
8364       /* Emit code to perform this initialization but once.  */
8365       tree temp;
8366       tree if_stmt;
8367       tree then_clause;
8368       tree assignment;
8369       tree temp_init;
8370
8371       /* Emit code to perform this initialization but once.  This code
8372          looks like:
8373
8374            static int temp = 0;
8375            if (!temp) {
8376              // Do initialization.
8377              temp = 1;
8378              // Register variable for destruction at end of program.
8379            }
8380
8381          Note that the `temp' variable is only set to 1 *after* the
8382          initialization is complete.  This ensures that an exception,
8383          thrown during the construction, will cause the variable to
8384          reinitialized when we pass through this code again, as per:
8385
8386            [stmt.dcl]
8387
8388            If the initialization exits by throwing an exception, the
8389            initialization is not complete, so it will be tried again
8390            the next time control enters the declaration.
8391
8392          In theory, this process should be thread-safe, too; multiple
8393          threads should not be able to initialize the variable more
8394          than once.  We don't yet attempt to ensure thread-safety.  */
8395       temp = get_temp_name (integer_type_node, 1);
8396       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8397
8398       /* Begin the conditional initialization.  */
8399       if_stmt = begin_if_stmt ();
8400       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8401                                             integer_zero_node),
8402                            if_stmt);
8403       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8404
8405       /* Do the initialization itself.  */
8406       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8407           || (init && TREE_CODE (init) == TREE_LIST))
8408         assignment = build_aggr_init (decl, init, 0);
8409       else if (init)
8410         /* The initialization we're doing here is just a bitwise
8411            copy.  */
8412         assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8413       else
8414         assignment = NULL_TREE;
8415
8416       /* Once the assignment is complete, set TEMP to 1.  Since the
8417          construction of the static object is complete at this point,
8418          we want to make sure TEMP is set to 1 even if a temporary
8419          constructed during the initialization throws an exception
8420          when it is destroyed.  So, we combine the initialization and
8421          the assignment to TEMP into a single expression, ensuring
8422          that when we call finish_expr_stmt the cleanups will not be
8423          run until after TEMP is set to 1.  */
8424       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8425       if (assignment)
8426         {
8427           assignment = tree_cons (NULL_TREE, assignment,
8428                                   build_tree_list (NULL_TREE,
8429                                                    temp_init));
8430           assignment = build_compound_expr (assignment);
8431         }
8432       else
8433         assignment = temp_init;
8434       finish_expr_stmt (assignment);
8435
8436       /* Use atexit to register a function for destroying this static
8437          variable.  */
8438       register_dtor_fn (decl);
8439
8440       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8441       finish_then_clause (if_stmt);
8442       finish_if_stmt ();
8443     }
8444   else
8445     static_aggregates = tree_cons (init, decl, static_aggregates);
8446 }
8447
8448 /* Finish the declaration of a catch-parameter.  */
8449
8450 tree
8451 start_handler_parms (declspecs, declarator)
8452      tree declspecs;
8453      tree declarator;
8454 {
8455   tree decl;
8456   if (declspecs)
8457     {
8458       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8459                              1, NULL_TREE);
8460       if (decl == NULL_TREE)
8461         error ("invalid catch parameter");
8462     }
8463   else
8464     decl = NULL_TREE;
8465
8466   return decl;
8467 }
8468
8469 \f
8470 /* Make TYPE a complete type based on INITIAL_VALUE.
8471    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8472    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8473
8474 int
8475 complete_array_type (type, initial_value, do_default)
8476      tree type, initial_value;
8477      int do_default;
8478 {
8479   register tree maxindex = NULL_TREE;
8480   int value = 0;
8481
8482   if (initial_value)
8483     {
8484       /* Note MAXINDEX  is really the maximum index,
8485          one less than the size.  */
8486       if (TREE_CODE (initial_value) == STRING_CST)
8487         {
8488           int eltsize
8489             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8490           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8491                                    / eltsize) - 1, 0);
8492         }
8493       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8494         {
8495           tree elts = CONSTRUCTOR_ELTS (initial_value);
8496
8497           maxindex = ssize_int (-1);
8498           for (; elts; elts = TREE_CHAIN (elts))
8499             {
8500               if (TREE_PURPOSE (elts))
8501                 maxindex = TREE_PURPOSE (elts);
8502               else
8503                 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8504             }
8505           maxindex = copy_node (maxindex);
8506         }
8507       else
8508         {
8509           /* Make an error message unless that happened already.  */
8510           if (initial_value != error_mark_node)
8511             value = 1;
8512           else
8513             initial_value = NULL_TREE;
8514
8515           /* Prevent further error messages.  */
8516           maxindex = build_int_2 (0, 0);
8517         }
8518     }
8519
8520   if (!maxindex)
8521     {
8522       if (do_default)
8523         maxindex = build_int_2 (0, 0);
8524       value = 2;
8525     }
8526
8527   if (maxindex)
8528     {
8529       tree itype;
8530       tree domain;
8531
8532       domain = build_index_type (maxindex);
8533       TYPE_DOMAIN (type) = domain;
8534
8535       if (! TREE_TYPE (maxindex))
8536         TREE_TYPE (maxindex) = domain;
8537       if (initial_value)
8538         itype = TREE_TYPE (initial_value);
8539       else
8540         itype = NULL;
8541       if (itype && !TYPE_DOMAIN (itype))
8542         TYPE_DOMAIN (itype) = domain;
8543       /* The type of the main variant should never be used for arrays
8544          of different sizes.  It should only ever be completed with the
8545          size of the array.  */
8546       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8547         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8548     }
8549
8550   /* Lay out the type now that we can get the real answer.  */
8551
8552   layout_type (type);
8553
8554   return value;
8555 }
8556 \f
8557 /* Return zero if something is declared to be a member of type
8558    CTYPE when in the context of CUR_TYPE.  STRING is the error
8559    message to print in that case.  Otherwise, quietly return 1.  */
8560
8561 static int
8562 member_function_or_else (ctype, cur_type, flags)
8563      tree ctype, cur_type;
8564      enum overload_flags flags;
8565 {
8566   if (ctype && ctype != cur_type)
8567     {
8568       if (flags == DTOR_FLAG)
8569         error ("destructor for alien class `%s' cannot be a member",
8570                TYPE_NAME_STRING (ctype));
8571       else
8572         error ("constructor for alien class `%s' cannot be a member",
8573                TYPE_NAME_STRING (ctype));
8574       return 0;
8575     }
8576   return 1;
8577 }
8578 \f
8579 /* Subroutine of `grokdeclarator'.  */
8580
8581 /* Generate errors possibly applicable for a given set of specifiers.
8582    This is for ARM $7.1.2.  */
8583
8584 static void
8585 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8586      tree object;
8587      const char *type;
8588      int virtualp, quals, friendp, raises, inlinep;
8589 {
8590   if (virtualp)
8591     cp_error ("`%D' declared as a `virtual' %s", object, type);
8592   if (inlinep)
8593     cp_error ("`%D' declared as an `inline' %s", object, type);
8594   if (quals)
8595     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8596               object, type);
8597   if (friendp)
8598     cp_error_at ("`%D' declared as a friend", object);
8599   if (raises)
8600     cp_error_at ("`%D' declared with an exception specification", object);
8601 }
8602
8603 /* CTYPE is class type, or null if non-class.
8604    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8605    or METHOD_TYPE.
8606    DECLARATOR is the function's name.
8607    VIRTUALP is truthvalue of whether the function is virtual or not.
8608    FLAGS are to be passed through to `grokclassfn'.
8609    QUALS are qualifiers indicating whether the function is `const'
8610    or `volatile'.
8611    RAISES is a list of exceptions that this function can raise.
8612    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8613    not look, and -1 if we should not call `grokclassfn' at all.
8614
8615    Returns `NULL_TREE' if something goes wrong, after issuing
8616    applicable error messages.  */
8617
8618 static tree
8619 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8620             raises, check, friendp, publicp, inlinep, funcdef_flag,
8621             template_count, in_namespace)
8622      tree ctype, type;
8623      tree declarator;
8624      tree orig_declarator;
8625      int virtualp;
8626      enum overload_flags flags;
8627      tree quals, raises;
8628      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8629      tree in_namespace;
8630 {
8631   tree cname, decl;
8632   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8633   int has_default_arg = 0;
8634   tree t;
8635
8636   if (ctype)
8637     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8638       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8639   else
8640     cname = NULL_TREE;
8641
8642   if (raises)
8643     {
8644       type = build_exception_variant (type, raises);
8645     }
8646
8647   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8648   /* Propagate volatile out from type to decl. */
8649   if (TYPE_VOLATILE (type))
8650     TREE_THIS_VOLATILE (decl) = 1;
8651
8652   /* If this decl has namespace scope, set that up.  */
8653   if (in_namespace)
8654     set_decl_namespace (decl, in_namespace, friendp);
8655   else if (publicp && ! ctype)
8656     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8657
8658   /* `main' and builtins have implicit 'C' linkage.  */
8659   if ((MAIN_NAME_P (declarator)
8660        || (IDENTIFIER_LENGTH (declarator) > 10
8661            && IDENTIFIER_POINTER (declarator)[0] == '_'
8662            && IDENTIFIER_POINTER (declarator)[1] == '_'
8663            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8664       && current_lang_name == lang_name_cplusplus
8665       && ctype == NULL_TREE
8666       /* NULL_TREE means global namespace.  */
8667       && DECL_CONTEXT (decl) == NULL_TREE)
8668     DECL_LANGUAGE (decl) = lang_c;
8669
8670   /* Should probably propagate const out from type to decl I bet (mrs).  */
8671   if (staticp)
8672     {
8673       DECL_STATIC_FUNCTION_P (decl) = 1;
8674       DECL_CONTEXT (decl) = ctype;
8675     }
8676
8677   if (ctype)
8678     DECL_CONTEXT (decl) = ctype;
8679
8680   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8681     {
8682       if (processing_template_decl)
8683         error ("cannot declare `::main' to be a template");
8684       if (inlinep)
8685         error ("cannot declare `::main' to be inline");
8686       else if (! publicp)
8687         error ("cannot declare `::main' to be static");
8688       inlinep = 0;
8689       publicp = 1;
8690     }
8691
8692   /* Members of anonymous types and local classes have no linkage; make
8693      them internal.  */
8694   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8695                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8696     publicp = 0;
8697
8698   if (publicp)
8699     {
8700       /* [basic.link]: A name with no linkage (notably, the name of a class
8701          or enumeration declared in a local scope) shall not be used to
8702          declare an entity with linkage.
8703
8704          Only check this for public decls for now.  */
8705       t = no_linkage_check (TREE_TYPE (decl));
8706       if (t)
8707         {
8708           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8709             {
8710               if (DECL_LANGUAGE (decl) == lang_c)
8711                 /* Allow this; it's pretty common in C.  */;
8712               else
8713                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8714                             decl);
8715             }
8716           else
8717             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8718                         decl, t);
8719         }
8720     }
8721
8722   TREE_PUBLIC (decl) = publicp;
8723   if (! publicp)
8724     {
8725       DECL_INTERFACE_KNOWN (decl) = 1;
8726       DECL_NOT_REALLY_EXTERN (decl) = 1;
8727     }
8728
8729   if (inlinep)
8730     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8731
8732   DECL_EXTERNAL (decl) = 1;
8733   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8734     {
8735       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8736                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8737       quals = NULL_TREE;
8738     }
8739
8740   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8741     grok_op_properties (decl, virtualp, check < 0);
8742
8743   if (ctype && decl_function_context (decl))
8744     DECL_NO_STATIC_CHAIN (decl) = 1;
8745
8746   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8747     if (TREE_PURPOSE (t)
8748         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8749       {
8750         has_default_arg = 1;
8751         break;
8752       }
8753
8754   if (friendp
8755       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8756     {
8757       if (funcdef_flag)
8758         cp_error
8759           ("defining explicit specialization `%D' in friend declaration",
8760            orig_declarator);
8761       else
8762         {
8763           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8764             {
8765               /* Something like `template <class T> friend void f<T>()'.  */
8766               cp_error ("invalid use of template-id `%D' in declaration of primary template",
8767                         orig_declarator);
8768               return NULL_TREE;
8769             }
8770
8771
8772           /* A friend declaration of the form friend void f<>().  Record
8773              the information in the TEMPLATE_ID_EXPR.  */
8774           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8775           DECL_TEMPLATE_INFO (decl)
8776             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8777                          TREE_OPERAND (orig_declarator, 1),
8778                          NULL_TREE);
8779
8780           if (has_default_arg)
8781             {
8782               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8783                         decl);
8784               return NULL_TREE;
8785             }
8786
8787           if (inlinep)
8788             {
8789               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8790                         decl);
8791               return NULL_TREE;
8792             }
8793         }
8794     }
8795
8796   if (has_default_arg)
8797     add_defarg_fn (decl);
8798
8799   /* Plain overloading: will not be grok'd by grokclassfn.  */
8800   if (! ctype && ! processing_template_decl
8801       && DECL_LANGUAGE (decl) != lang_c
8802       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8803     set_mangled_name_for_decl (decl);
8804
8805   if (funcdef_flag)
8806     /* Make the init_value nonzero so pushdecl knows this is not
8807        tentative.  error_mark_node is replaced later with the BLOCK.  */
8808     DECL_INITIAL (decl) = error_mark_node;
8809
8810   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8811     TREE_NOTHROW (decl) = 1;
8812
8813   /* Caller will do the rest of this.  */
8814   if (check < 0)
8815     return decl;
8816
8817   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8818     DECL_CONSTRUCTOR_P (decl) = 1;
8819
8820   /* Function gets the ugly name, field gets the nice one.  This call
8821      may change the type of the function (because of default
8822      parameters)!  */
8823   if (ctype != NULL_TREE)
8824     grokclassfn (ctype, decl, flags, quals);
8825
8826   decl = check_explicit_specialization (orig_declarator, decl,
8827                                         template_count,
8828                                         2 * (funcdef_flag != 0) +
8829                                         4 * (friendp != 0));
8830   if (decl == error_mark_node)
8831     return NULL_TREE;
8832
8833   if (ctype != NULL_TREE
8834       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8835       && check)
8836     {
8837       tree old_decl;
8838
8839       old_decl = check_classfn (ctype, decl);
8840
8841       if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8842         /* Because grokfndecl is always supposed to return a
8843            FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8844            here.  We depend on our callers to figure out that its
8845            really a template that's being returned.  */
8846         old_decl = DECL_TEMPLATE_RESULT (old_decl);
8847
8848       if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8849           && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8850         {
8851           /* Remove the `this' parm added by grokclassfn.
8852              XXX Isn't this done in start_function, too?  */
8853           revert_static_member_fn (decl);
8854           last_function_parms = TREE_CHAIN (last_function_parms);
8855         }
8856       if (old_decl && DECL_ARTIFICIAL (old_decl))
8857         cp_error ("definition of implicitly-declared `%D'", old_decl);
8858
8859       if (old_decl)
8860         {
8861           /* Since we've smashed OLD_DECL to its
8862              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8863           if (TREE_CODE (decl) == TEMPLATE_DECL)
8864             decl = DECL_TEMPLATE_RESULT (decl);
8865
8866           /* Attempt to merge the declarations.  This can fail, in
8867              the case of some illegal specialization declarations.  */
8868           if (!duplicate_decls (decl, old_decl))
8869             cp_error ("no `%#D' member function declared in class `%T'",
8870                       decl, ctype);
8871           return old_decl;
8872         }
8873     }
8874
8875   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8876     return NULL_TREE;
8877
8878   if (ctype == NULL_TREE || check)
8879     return decl;
8880
8881   if (virtualp)
8882     {
8883       DECL_VIRTUAL_P (decl) = 1;
8884       if (DECL_VINDEX (decl) == NULL_TREE)
8885         DECL_VINDEX (decl) = error_mark_node;
8886       IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8887     }
8888
8889   return decl;
8890 }
8891
8892 static tree
8893 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8894      tree type;
8895      tree declarator;
8896      RID_BIT_TYPE *specbits_in;
8897      int initialized;
8898      int constp;
8899      tree in_namespace;
8900 {
8901   tree decl;
8902   RID_BIT_TYPE specbits;
8903
8904   specbits = *specbits_in;
8905
8906   if (TREE_CODE (type) == OFFSET_TYPE)
8907     {
8908       /* If you declare a static member so that it
8909          can be initialized, the code will reach here.  */
8910       tree basetype = TYPE_OFFSET_BASETYPE (type);
8911       type = TREE_TYPE (type);
8912       decl = build_lang_decl (VAR_DECL, declarator, type);
8913       DECL_CONTEXT (decl) = basetype;
8914       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8915     }
8916   else
8917     {
8918       tree context;
8919
8920       if (in_namespace)
8921         context = in_namespace;
8922       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8923         context = current_namespace;
8924       else
8925         context = NULL_TREE;
8926
8927       if (processing_template_decl && context)
8928         /* For global variables, declared in a template, we need the
8929            full lang_decl.  */
8930         decl = build_lang_decl (VAR_DECL, declarator, type);
8931       else
8932         decl = build_decl (VAR_DECL, declarator, type);
8933
8934       if (context)
8935         set_decl_namespace (decl, context, 0);
8936
8937       context = DECL_CONTEXT (decl);
8938       if (declarator && context && current_lang_name != lang_name_c)
8939         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8940     }
8941
8942   if (in_namespace)
8943     set_decl_namespace (decl, in_namespace, 0);
8944
8945   if (RIDBIT_SETP (RID_EXTERN, specbits))
8946     {
8947       DECL_THIS_EXTERN (decl) = 1;
8948       DECL_EXTERNAL (decl) = !initialized;
8949     }
8950
8951   /* In class context, static means one per class,
8952      public access, and static storage.  */
8953   if (DECL_CLASS_SCOPE_P (decl))
8954     {
8955       TREE_PUBLIC (decl) = 1;
8956       TREE_STATIC (decl) = 1;
8957       DECL_EXTERNAL (decl) = 0;
8958     }
8959   /* At top level, either `static' or no s.c. makes a definition
8960      (perhaps tentative), and absence of `static' makes it public.  */
8961   else if (toplevel_bindings_p ())
8962     {
8963       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8964                             && (DECL_THIS_EXTERN (decl) || ! constp));
8965       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8966     }
8967   /* Not at top level, only `static' makes a static definition.  */
8968   else
8969     {
8970       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8971       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8972     }
8973
8974   if (TREE_PUBLIC (decl))
8975     {
8976       /* [basic.link]: A name with no linkage (notably, the name of a class
8977          or enumeration declared in a local scope) shall not be used to
8978          declare an entity with linkage.
8979
8980          Only check this for public decls for now.  */
8981       tree t = no_linkage_check (TREE_TYPE (decl));
8982       if (t)
8983         {
8984           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8985             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8986           else
8987             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8988                         decl, t);
8989         }
8990     }
8991
8992   return decl;
8993 }
8994
8995 /* Create and return a canonical pointer to member function type, for
8996    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8997
8998 tree
8999 build_ptrmemfunc_type (type)
9000      tree type;
9001 {
9002   tree fields[4];
9003   tree t;
9004   tree u;
9005   tree unqualified_variant = NULL_TREE;
9006
9007   /* If a canonical type already exists for this type, use it.  We use
9008      this method instead of type_hash_canon, because it only does a
9009      simple equality check on the list of field members.  */
9010
9011   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9012     return t;
9013
9014   /* Make sure that we always have the unqualified pointer-to-member
9015      type first.  */
9016   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9017     unqualified_variant
9018       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9019
9020   t = make_aggr_type (RECORD_TYPE);
9021   /* Let the front-end know this is a pointer to member function...  */
9022   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9023   /* ... and not really an aggregate.  */
9024   SET_IS_AGGR_TYPE (t, 0);
9025
9026   if (!flag_new_abi)
9027     {
9028       u = make_aggr_type (UNION_TYPE);
9029       SET_IS_AGGR_TYPE (u, 0);
9030       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9031       fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
9032                                    delta_type_node);
9033       finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9034       TYPE_NAME (u) = NULL_TREE;
9035
9036       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
9037                                    delta_type_node);
9038       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
9039                                    delta_type_node);
9040       fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9041       finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9042     }
9043   else
9044     {
9045       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9046       fields[1] = build_lang_decl (FIELD_DECL, delta_identifier,
9047                                    delta_type_node);
9048       finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9049     }
9050
9051   /* Zap out the name so that the back-end will give us the debugging
9052      information for this anonymous RECORD_TYPE.  */
9053   TYPE_NAME (t) = NULL_TREE;
9054
9055   /* If this is not the unqualified form of this pointer-to-member
9056      type, set the TYPE_MAIN_VARIANT for this type to be the
9057      unqualified type.  Since they are actually RECORD_TYPEs that are
9058      not variants of each other, we must do this manually.  */
9059   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9060     {
9061       t = build_qualified_type (t, CP_TYPE_QUALS (type));
9062       TYPE_MAIN_VARIANT (t) = unqualified_variant;
9063       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9064       TYPE_NEXT_VARIANT (unqualified_variant) = t;
9065     }
9066
9067   /* Cache this pointer-to-member type so that we can find it again
9068      later.  */
9069   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9070
9071   /* Seems to be wanted.  */
9072   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9073
9074   return t;
9075 }
9076
9077 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9078    Check to see that the definition is valid.  Issue appropriate error
9079    messages.  Return 1 if the definition is particularly bad, or 0
9080    otherwise.  */
9081
9082 int
9083 check_static_variable_definition (decl, type)
9084      tree decl;
9085      tree type;
9086 {
9087   /* Motion 10 at San Diego: If a static const integral data member is
9088      initialized with an integral constant expression, the initializer
9089      may appear either in the declaration (within the class), or in
9090      the definition, but not both.  If it appears in the class, the
9091      member is a member constant.  The file-scope definition is always
9092      required.  */
9093   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9094     {
9095       cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
9096                 type);
9097       /* If we just return the declaration, crashes will sometimes
9098          occur.  We therefore return void_type_node, as if this was a
9099          friend declaration, to cause callers to completely ignore
9100          this declaration.  */
9101       return 1;
9102     }
9103   else if (!CP_TYPE_CONST_P (type))
9104     cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9105               decl);
9106   else if (pedantic && !INTEGRAL_TYPE_P (type))
9107     cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9108
9109   return 0;
9110 }
9111
9112 /* Given the SIZE (i.e., number of elements) in an array, compute an
9113    appropriate index type for the array.  If non-NULL, NAME is the
9114    name of the thing being declared.  */
9115
9116 tree
9117 compute_array_index_type (name, size)
9118      tree name;
9119      tree size;
9120 {
9121   tree itype;
9122
9123   /* The size might be the result of a cast. */
9124   STRIP_TYPE_NOPS (size);
9125
9126   /* It might be a const variable or enumeration constant.  */
9127   if (TREE_READONLY_DECL_P (size))
9128     size = decl_constant_value (size);
9129
9130   /* If this involves a template parameter, it will be a constant at
9131      instantiation time, but we don't know what the value is yet.
9132      Even if no template parameters are involved, we may an expression
9133      that is not a constant; we don't even simplify `1 + 2' when
9134      processing a template.  */
9135   if (processing_template_decl)
9136     {
9137       /* Resolve a qualified reference to an enumerator or static
9138          const data member of ours.  */
9139       if (TREE_CODE (size) == SCOPE_REF
9140           && TREE_OPERAND (size, 0) == current_class_type)
9141         {
9142           tree t = lookup_field (current_class_type,
9143                                  TREE_OPERAND (size, 1), 0, 0);
9144           if (t)
9145             size = t;
9146         }
9147
9148       return build_index_type (build_min (MINUS_EXPR, sizetype,
9149                                           size, integer_one_node));
9150     }
9151
9152   /* The array bound must be an integer type.  */
9153   if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9154       && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9155       && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9156     {
9157       if (name)
9158         cp_error ("size of array `%D' has non-integer type", name);
9159       else
9160         cp_error ("size of array has non-integer type");
9161       size = integer_one_node;
9162     }
9163
9164   /* Normally, the array-bound will be a constant.  */
9165   if (TREE_CONSTANT (size))
9166     {
9167       /* Check to see if the array bound overflowed.  Make that an
9168          error, no matter how generous we're being.  */
9169       int old_flag_pedantic_errors = flag_pedantic_errors;
9170       int old_pedantic = pedantic;
9171       pedantic = flag_pedantic_errors = 1;
9172       constant_expression_warning (size);
9173       pedantic = old_pedantic;
9174       flag_pedantic_errors = old_flag_pedantic_errors;
9175
9176       /* An array must have a positive number of elements.  */
9177       if (INT_CST_LT (size, integer_zero_node))
9178         {
9179           if (name)
9180             cp_error ("size of array `%D' is negative", name);
9181           else
9182             cp_error ("size of array is negative");
9183           size = integer_one_node;
9184         }
9185       /* Except that an extension we allow zero-sized arrays.  We
9186          always allow them in system headers because glibc uses
9187          them.  */
9188       else if (integer_zerop (size) && pedantic && !in_system_header)
9189         {
9190           if (name)
9191             cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9192           else
9193             cp_pedwarn ("ISO C++ forbids zero-size array");
9194         }
9195     }
9196
9197   /* Compute the index of the largest element in the array.  It is
9198      one less than the number of elements in the array.  */
9199   itype
9200     = fold (build_binary_op (MINUS_EXPR,
9201                              cp_convert (ssizetype, size),
9202                              cp_convert (ssizetype,
9203                                          integer_one_node)));
9204
9205   /* Check for variable-sized arrays.  We allow such things as an
9206      extension, even though they are not allowed in ANSI/ISO C++.  */
9207   if (!TREE_CONSTANT (itype))
9208     {
9209       if (pedantic)
9210         {
9211           if (name)
9212             cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
9213                         name);
9214           else
9215             cp_pedwarn ("ISO C++ forbids variable-size array");
9216         }
9217
9218       /* Create a variable-sized array index type.  */
9219       itype = variable_size (itype);
9220     }
9221   /* Make sure that there was no overflow when creating to a signed
9222      index type.  (For example, on a 32-bit machine, an array with
9223      size 2^32 - 1 is too big.)  */
9224   else if (TREE_OVERFLOW (itype))
9225     {
9226       error ("overflow in array dimension");
9227       TREE_OVERFLOW (itype) = 0;
9228     }
9229
9230   /* Create and return the appropriate index type.  */
9231   return build_index_type (itype);
9232 }
9233
9234 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9235    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9236    with this type.  */
9237
9238 static tree
9239 create_array_type_for_decl (name, type, size)
9240      tree name;
9241      tree type;
9242      tree size;
9243 {
9244   tree itype = NULL_TREE;
9245   const char* error_msg;
9246
9247   /* If things have already gone awry, bail now.  */
9248   if (type == error_mark_node || size == error_mark_node)
9249     return error_mark_node;
9250
9251   /* Assume that everything will go OK.  */
9252   error_msg = NULL;
9253
9254   /* There are some types which cannot be array elements.  */
9255   switch (TREE_CODE (type))
9256     {
9257     case VOID_TYPE:
9258       error_msg = "array of void";
9259       break;
9260
9261     case FUNCTION_TYPE:
9262       error_msg = "array of functions";
9263       break;
9264
9265     case REFERENCE_TYPE:
9266       error_msg = "array of references";
9267       break;
9268
9269     case OFFSET_TYPE:
9270       error_msg = "array of data members";
9271       break;
9272
9273     case METHOD_TYPE:
9274       error_msg = "array of function members";
9275       break;
9276
9277     default:
9278       break;
9279     }
9280
9281   /* If something went wrong, issue an error-message and return.  */
9282   if (error_msg)
9283     {
9284       if (name)
9285         cp_error ("declaration of `%D' as %s", name, error_msg);
9286       else
9287         cp_error ("creating %s", error_msg);
9288
9289       return error_mark_node;
9290     }
9291
9292   /* [dcl.array]
9293
9294      The constant expressions that specify the bounds of the arrays
9295      can be omitted only for the first member of the sequence.  */
9296   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9297     {
9298       cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9299                 name);
9300
9301       return error_mark_node;
9302     }
9303
9304   /* Figure out the index type for the array.  */
9305   if (size)
9306     itype = compute_array_index_type (name, size);
9307
9308   return build_cplus_array_type (type, itype);
9309 }
9310
9311 /* Check that it's OK to declare a function with the indicated TYPE.
9312    SFK indicates the kind of special function (if any) that this
9313    function is.  CTYPE is the class of which this function is a
9314    member.  OPTYPE is the type given in a conversion operator
9315    declaration.  Returns the actual return type of the function; that
9316    may be different than TYPE if an error occurs, or for certain
9317    special functions.  */
9318
9319 static tree
9320 check_special_function_return_type (sfk, type, ctype, optype)
9321      special_function_kind sfk;
9322      tree type;
9323      tree ctype;
9324      tree optype;
9325 {
9326   switch (sfk)
9327     {
9328     case sfk_constructor:
9329       if (type)
9330         cp_error ("return type specification for constructor invalid");
9331         
9332       /* In the old ABI, we return `this'; in the new ABI we don't
9333          bother.  */
9334       type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9335       break;
9336
9337     case sfk_destructor:
9338       if (type)
9339         cp_error ("return type specification for destructor invalid");
9340       type = void_type_node;
9341       break;
9342
9343     case sfk_conversion:
9344       if (type && !same_type_p (type, optype))
9345         cp_error ("operator `%T' declared to return `%T'", optype, type);
9346       else if (type)
9347         cp_pedwarn ("return type specified for `operator %T'",  optype);
9348       type = optype;
9349       break;
9350
9351     default:
9352       my_friendly_abort (20000408);
9353       break;
9354     }
9355
9356   return type;
9357 }
9358
9359 /* Given declspecs and a declarator,
9360    determine the name and type of the object declared
9361    and construct a ..._DECL node for it.
9362    (In one case we can return a ..._TYPE node instead.
9363     For invalid input we sometimes return 0.)
9364
9365    DECLSPECS is a chain of tree_list nodes whose value fields
9366     are the storage classes and type specifiers.
9367
9368    DECL_CONTEXT says which syntactic context this declaration is in:
9369      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9370      FUNCDEF for a function definition.  Like NORMAL but a few different
9371       error messages in each case.  Return value may be zero meaning
9372       this definition is too screwy to try to parse.
9373      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9374       handle member functions (which have FIELD context).
9375       Return value may be zero meaning this definition is too screwy to
9376       try to parse.
9377      PARM for a parameter declaration (either within a function prototype
9378       or before a function body).  Make a PARM_DECL, or return void_type_node.
9379      CATCHPARM for a parameter declaration before a catch clause.
9380      TYPENAME if for a typename (in a cast or sizeof).
9381       Don't make a DECL node; just return the ..._TYPE node.
9382      FIELD for a struct or union field; make a FIELD_DECL.
9383      BITFIELD for a field with specified width.
9384    INITIALIZED is 1 if the decl has an initializer.
9385
9386    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9387    normal attributes in TREE_PURPOSE, or NULL_TREE.
9388
9389    In the TYPENAME case, DECLARATOR is really an abstract declarator.
9390    It may also be so in the PARM case, for a prototype where the
9391    argument type is specified but not the name.
9392
9393    This function is where the complicated C meanings of `static'
9394    and `extern' are interpreted.
9395
9396    For C++, if there is any monkey business to do, the function which
9397    calls this one must do it, i.e., prepending instance variables,
9398    renaming overloaded function names, etc.
9399
9400    Note that for this C++, it is an error to define a method within a class
9401    which does not belong to that class.
9402
9403    Except in the case where SCOPE_REFs are implicitly known (such as
9404    methods within a class being redundantly qualified),
9405    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9406    (class_name::decl_name).  The caller must also deal with this.
9407
9408    If a constructor or destructor is seen, and the context is FIELD,
9409    then the type gains the attribute TREE_HAS_x.  If such a declaration
9410    is erroneous, NULL_TREE is returned.
9411
9412    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9413    function, these are the qualifiers to give to the `this' pointer. We
9414    apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
9415
9416    May return void_type_node if the declarator turned out to be a friend.
9417    See grokfield for details.  */
9418
9419 tree
9420 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9421      tree declspecs;
9422      tree declarator;
9423      enum decl_context decl_context;
9424      int initialized;
9425      tree attrlist;
9426 {
9427   RID_BIT_TYPE specbits;
9428   int nclasses = 0;
9429   tree spec;
9430   tree type = NULL_TREE;
9431   int longlong = 0;
9432   int constp;
9433   int restrictp;
9434   int volatilep;
9435   int type_quals;
9436   int virtualp, explicitp, friendp, inlinep, staticp;
9437   int explicit_int = 0;
9438   int explicit_char = 0;
9439   int defaulted_int = 0;
9440   tree typedef_decl = NULL_TREE;
9441   const char *name;
9442   tree typedef_type = NULL_TREE;
9443   int funcdef_flag = 0;
9444   enum tree_code innermost_code = ERROR_MARK;
9445   int bitfield = 0;
9446 #if 0
9447   /* See the code below that used this.  */
9448   tree decl_machine_attr = NULL_TREE;
9449 #endif
9450   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9451      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9452   tree init = NULL_TREE;
9453
9454   /* Keep track of what sort of function is being processed
9455      so that we can warn about default return values, or explicit
9456      return values which do not match prescribed defaults.  */
9457   special_function_kind sfk = sfk_none;
9458
9459   tree dname = NULL_TREE;
9460   tree ctype = current_class_type;
9461   tree ctor_return_type = NULL_TREE;
9462   enum overload_flags flags = NO_SPECIAL;
9463   tree quals = NULL_TREE;
9464   tree raises = NULL_TREE;
9465   int template_count = 0;
9466   tree in_namespace = NULL_TREE;
9467   tree inner_attrs;
9468   int ignore_attrs;
9469
9470   RIDBIT_RESET_ALL (specbits);
9471   if (decl_context == FUNCDEF)
9472     funcdef_flag = 1, decl_context = NORMAL;
9473   else if (decl_context == MEMFUNCDEF)
9474     funcdef_flag = -1, decl_context = FIELD;
9475   else if (decl_context == BITFIELD)
9476     bitfield = 1, decl_context = FIELD;
9477
9478   /* Look inside a declarator for the name being declared
9479      and get it as a string, for an error message.  */
9480   {
9481     tree *next = &declarator;
9482     register tree decl;
9483     name = NULL;
9484
9485     while (next && *next)
9486       {
9487         decl = *next;
9488         switch (TREE_CODE (decl))
9489           {
9490           case TREE_LIST:
9491             /* For attributes.  */
9492             next = &TREE_VALUE (decl);
9493             break;
9494
9495           case COND_EXPR:
9496             ctype = NULL_TREE;
9497             next = &TREE_OPERAND (decl, 0);
9498             break;
9499
9500           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9501             {
9502               tree name = TREE_OPERAND (decl, 0);
9503               tree rename = NULL_TREE;
9504
9505               my_friendly_assert (flags == NO_SPECIAL, 152);
9506               flags = DTOR_FLAG;
9507               sfk = sfk_destructor;
9508               if (TREE_CODE (name) == TYPE_DECL)
9509                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9510               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9511               if (ctype == NULL_TREE)
9512                 {
9513                   if (current_class_type == NULL_TREE)
9514                     {
9515                       error ("destructors must be member functions");
9516                       flags = NO_SPECIAL;
9517                     }
9518                   else
9519                     {
9520                       tree t = constructor_name (current_class_name);
9521                       if (t != name)
9522                         rename = t;
9523                     }
9524                 }
9525               else
9526                 {
9527                   tree t = constructor_name (ctype);
9528                   if (t != name)
9529                     rename = t;
9530                 }
9531
9532               if (rename)
9533                 {
9534                   cp_error ("destructor `%T' must match class name `%T'",
9535                             name, rename);
9536                   TREE_OPERAND (decl, 0) = rename;
9537                 }
9538               next = &name;
9539             }
9540             break;
9541
9542           case ADDR_EXPR:       /* C++ reference declaration */
9543             /* Fall through. */
9544           case ARRAY_REF:
9545           case INDIRECT_REF:
9546             ctype = NULL_TREE;
9547             innermost_code = TREE_CODE (decl);
9548             next = &TREE_OPERAND (decl, 0);
9549             break;
9550
9551           case CALL_EXPR:
9552             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9553               {
9554                 /* This is actually a variable declaration using
9555                    constructor syntax.  We need to call start_decl and
9556                    cp_finish_decl so we can get the variable
9557                    initialized...  */
9558
9559                 tree attributes, prefix_attributes;
9560
9561                 *next = TREE_OPERAND (decl, 0);
9562                 init = CALL_DECLARATOR_PARMS (decl);
9563
9564                 if (attrlist)
9565                   {
9566                     attributes = TREE_PURPOSE (attrlist);
9567                     prefix_attributes = TREE_VALUE (attrlist);
9568                   }
9569                 else
9570                   {
9571                     attributes = NULL_TREE;
9572                     prefix_attributes = NULL_TREE;
9573                   }
9574
9575                 decl = start_decl (declarator, declspecs, 1,
9576                                    attributes, prefix_attributes);
9577                 decl_type_access_control (decl);
9578                 if (decl)
9579                   {
9580                     /* Look for __unused__ attribute */
9581                     if (TREE_USED (TREE_TYPE (decl)))
9582                       TREE_USED (decl) = 1;
9583                     finish_decl (decl, init, NULL_TREE);
9584                   }
9585                 else
9586                   cp_error ("invalid declarator");
9587                 return 0;
9588               }
9589             innermost_code = TREE_CODE (decl);
9590             if (decl_context == FIELD && ctype == NULL_TREE)
9591               ctype = current_class_type;
9592             if (ctype
9593                 && TREE_OPERAND (decl, 0)
9594                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9595                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9596                          == constructor_name_full (ctype))
9597                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9598                             == constructor_name (ctype)))))
9599               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9600             next = &TREE_OPERAND (decl, 0);
9601             decl = *next;
9602             if (ctype != NULL_TREE
9603                 && decl != NULL_TREE && flags != DTOR_FLAG
9604                 && decl == constructor_name (ctype))
9605               {
9606                 sfk = sfk_constructor;
9607                 ctor_return_type = ctype;
9608               }
9609             ctype = NULL_TREE;
9610             break;
9611
9612           case TEMPLATE_ID_EXPR:
9613               {
9614                 tree fns = TREE_OPERAND (decl, 0);
9615
9616                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9617                   fns = TREE_OPERAND (fns, 0);
9618
9619                 dname = fns;
9620                 if (TREE_CODE (dname) == COMPONENT_REF)
9621                   dname = TREE_OPERAND (dname, 1);
9622                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9623                   {
9624                     my_friendly_assert (is_overloaded_fn (dname),
9625                                         19990331);
9626                     dname = DECL_NAME (get_first_fn (dname));
9627                   }
9628               }
9629           /* Fall through. */
9630
9631           case IDENTIFIER_NODE:
9632             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9633               dname = decl;
9634
9635             next = 0;
9636
9637             if (is_rid (dname))
9638               {
9639                 cp_error ("declarator-id missing; using reserved word `%D'",
9640                           dname);
9641                 name = IDENTIFIER_POINTER (dname);
9642               }
9643             if (! IDENTIFIER_OPNAME_P (dname)
9644                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9645                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9646               name = IDENTIFIER_POINTER (dname);
9647             else
9648               {
9649                 if (IDENTIFIER_TYPENAME_P (dname))
9650                   {
9651                     my_friendly_assert (flags == NO_SPECIAL, 154);
9652                     flags = TYPENAME_FLAG;
9653                     ctor_return_type = TREE_TYPE (dname);
9654                     sfk = sfk_conversion;
9655                   }
9656                 name = operator_name_string (dname);
9657               }
9658             break;
9659
9660             /* C++ extension */
9661           case SCOPE_REF:
9662             {
9663               /* Perform error checking, and decide on a ctype.  */
9664               tree cname = TREE_OPERAND (decl, 0);
9665               if (cname == NULL_TREE)
9666                 ctype = NULL_TREE;
9667               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9668                 {
9669                   ctype = NULL_TREE;
9670                   in_namespace = TREE_OPERAND (decl, 0);
9671                   TREE_OPERAND (decl, 0) = NULL_TREE;
9672                 }
9673               else if (! is_aggr_type (cname, 1))
9674                 TREE_OPERAND (decl, 0) = NULL_TREE;
9675               /* Must test TREE_OPERAND (decl, 1), in case user gives
9676                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9677               else if (TREE_OPERAND (decl, 1)
9678                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9679                 ctype = cname;
9680               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9681                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9682                 {
9683                   cp_error ("`%T::%D' is not a valid declarator", cname,
9684                             TREE_OPERAND (decl, 1));
9685                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9686                             cname, TREE_OPERAND (decl, 1));
9687                   return void_type_node;
9688                 }
9689               else if (ctype == NULL_TREE)
9690                 ctype = cname;
9691               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9692                 TREE_OPERAND (decl, 0) = ctype;
9693               else
9694                 {
9695                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9696                     {
9697                       cp_error ("type `%T' is not derived from type `%T'",
9698                                 cname, ctype);
9699                       TREE_OPERAND (decl, 0) = NULL_TREE;
9700                     }
9701                   else
9702                     ctype = cname;
9703                 }
9704
9705               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9706                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9707                        == constructor_name_full (ctype))
9708                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9709                           == constructor_name (ctype))))
9710                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9711               next = &TREE_OPERAND (decl, 1);
9712               decl = *next;
9713               if (ctype)
9714                 {
9715                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9716                       && constructor_name (ctype) == decl)
9717                     {
9718                       sfk = sfk_constructor;
9719                       ctor_return_type = ctype;
9720                     }
9721                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9722                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9723                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9724                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9725                     {
9726                       sfk = sfk_destructor;
9727                       ctor_return_type = ctype;
9728                       flags = DTOR_FLAG;
9729                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9730                       next = &TREE_OPERAND (decl, 0);
9731                     }
9732                 }
9733             }
9734             break;
9735
9736           case ERROR_MARK:
9737             next = 0;
9738             break;
9739
9740           case TYPE_DECL:
9741             /* Parse error puts this typespec where
9742                a declarator should go.  */
9743             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9744             if (TREE_TYPE (decl) == current_class_type)
9745               cp_error ("  perhaps you want `%T' for a constructor",
9746                         current_class_name);
9747             dname = DECL_NAME (decl);
9748             name = IDENTIFIER_POINTER (dname);
9749
9750             /* Avoid giving two errors for this.  */
9751             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9752
9753             declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
9754             *next = dname;
9755             next = 0;
9756             break;
9757
9758           default:
9759             cp_compiler_error ("`%D' as declarator", decl);
9760             return 0; /* We used to do a 155 abort here.  */
9761           }
9762       }
9763   }
9764
9765   /* A function definition's declarator must have the form of
9766      a function declarator.  */
9767
9768   if (funcdef_flag && innermost_code != CALL_EXPR)
9769     return 0;
9770
9771   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9772       && innermost_code != CALL_EXPR
9773       && ! (ctype && declspecs == NULL_TREE))
9774     {
9775       cp_error ("declaration of `%D' as non-function", dname);
9776       return void_type_node;
9777     }
9778
9779   /* Anything declared one level down from the top level
9780      must be one of the parameters of a function
9781      (because the body is at least two levels down).  */
9782
9783   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9784      by not allowing C++ class definitions to specify their parameters
9785      with xdecls (must be spec.d in the parmlist).
9786
9787      Since we now wait to push a class scope until we are sure that
9788      we are in a legitimate method context, we must set oldcname
9789      explicitly (since current_class_name is not yet alive).
9790
9791      We also want to avoid calling this a PARM if it is in a namespace.  */
9792
9793   if (decl_context == NORMAL && !toplevel_bindings_p ())
9794     {
9795       struct binding_level *b = current_binding_level;
9796       current_binding_level = b->level_chain;
9797       if (current_binding_level != 0 && toplevel_bindings_p ())
9798         decl_context = PARM;
9799       current_binding_level = b;
9800     }
9801
9802   if (name == NULL)
9803     name = decl_context == PARM ? "parameter" : "type name";
9804
9805   /* Look through the decl specs and record which ones appear.
9806      Some typespecs are defined as built-in typenames.
9807      Others, the ones that are modifiers of other types,
9808      are represented by bits in SPECBITS: set the bits for
9809      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9810
9811      If there is a typedef name or a type, store the type in TYPE.
9812      This includes builtin typedefs such as `int'.
9813
9814      Set EXPLICIT_INT if the type is `int' or `char' and did not
9815      come from a user typedef.
9816
9817      Set LONGLONG if `long' is mentioned twice.
9818
9819      For C++, constructors and destructors have their own fast treatment.  */
9820
9821   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9822     {
9823       register int i;
9824       register tree id;
9825
9826       /* Certain parse errors slip through.  For example,
9827          `int class;' is not caught by the parser. Try
9828          weakly to recover here.  */
9829       if (TREE_CODE (spec) != TREE_LIST)
9830         return 0;
9831
9832       id = TREE_VALUE (spec);
9833
9834       if (TREE_CODE (id) == IDENTIFIER_NODE)
9835         {
9836           if (id == ridpointers[(int) RID_INT]
9837               || id == ridpointers[(int) RID_CHAR]
9838               || id == ridpointers[(int) RID_BOOL]
9839               || id == ridpointers[(int) RID_WCHAR])
9840             {
9841               if (type)
9842                 {
9843                   if (id == ridpointers[(int) RID_BOOL])
9844                     error ("`bool' is now a keyword");
9845                   else
9846                     cp_error ("extraneous `%T' ignored", id);
9847                 }
9848               else
9849                 {
9850                   if (id == ridpointers[(int) RID_INT])
9851                     explicit_int = 1;
9852                   else if (id == ridpointers[(int) RID_CHAR])
9853                     explicit_char = 1;
9854                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9855                 }
9856               goto found;
9857             }
9858           /* C++ aggregate types.  */
9859           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9860             {
9861               if (type)
9862                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9863               else
9864                 type = IDENTIFIER_TYPE_VALUE (id);
9865               goto found;
9866             }
9867
9868           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9869             {
9870               if (ridpointers[i] == id)
9871                 {
9872                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9873                     {
9874                       if (pedantic && ! in_system_header && warn_long_long)
9875                         pedwarn ("ISO C++ does not support `long long'");
9876                       if (longlong)
9877                         error ("`long long long' is too long for GCC");
9878                       else
9879                         longlong = 1;
9880                     }
9881                   else if (RIDBIT_SETP (i, specbits))
9882                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9883                   RIDBIT_SET (i, specbits);
9884                   goto found;
9885                 }
9886             }
9887         }
9888       /* C++ aggregate types.  */
9889       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9890         {
9891           if (type)
9892             cp_error ("multiple declarations `%T' and `%T'", type,
9893                       TREE_TYPE (id));
9894           else
9895             {
9896               type = TREE_TYPE (id);
9897               TREE_VALUE (spec) = type;
9898             }
9899           goto found;
9900         }
9901       if (type)
9902         error ("two or more data types in declaration of `%s'", name);
9903       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9904         {
9905           register tree t = lookup_name (id, 1);
9906           if (!t || TREE_CODE (t) != TYPE_DECL)
9907             error ("`%s' fails to be a typedef or built in type",
9908                    IDENTIFIER_POINTER (id));
9909           else
9910             {
9911               type = TREE_TYPE (t);
9912 #if 0
9913               /* See the code below that used this.  */
9914               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9915 #endif
9916               typedef_decl = t;
9917             }
9918         }
9919       else if (id != error_mark_node)
9920         /* Can't change CLASS nodes into RECORD nodes here!  */
9921         type = id;
9922
9923     found: ;
9924     }
9925
9926   typedef_type = type;
9927
9928   /* No type at all: default to `int', and set DEFAULTED_INT
9929      because it was not a user-defined typedef.  */
9930
9931   if (type == NULL_TREE
9932       && (RIDBIT_SETP (RID_SIGNED, specbits)
9933           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9934           || RIDBIT_SETP (RID_LONG, specbits)
9935           || RIDBIT_SETP (RID_SHORT, specbits)))
9936     {
9937       /* These imply 'int'.  */
9938       type = integer_type_node;
9939       defaulted_int = 1;
9940     }
9941
9942   if (sfk != sfk_none)
9943     type = check_special_function_return_type (sfk, type,
9944                                                ctor_return_type,
9945                                                ctor_return_type);
9946   else if (type == NULL_TREE)
9947     {
9948       int is_main;
9949
9950       explicit_int = -1;
9951
9952           /* We handle `main' specially here, because 'main () { }' is so
9953              common.  With no options, it is allowed.  With -Wreturn-type,
9954              it is a warning.  It is only an error with -pedantic-errors.  */
9955       is_main = (funcdef_flag
9956                  && MAIN_NAME_P (dname)
9957                  && ctype == NULL_TREE
9958                  && in_namespace == NULL_TREE
9959                  && current_namespace == global_namespace);
9960
9961       if (in_system_header || flag_ms_extensions)
9962         /* Allow it, sigh.  */;
9963       else if (pedantic || ! is_main)
9964         cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9965                     name);
9966       else if (warn_return_type)
9967         cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9968                     name);
9969
9970       type = integer_type_node;
9971     }
9972
9973   ctype = NULL_TREE;
9974
9975   /* Now process the modifiers that were specified
9976      and check for invalid combinations.  */
9977
9978   /* Long double is a special combination.  */
9979
9980   if (RIDBIT_SETP (RID_LONG, specbits)
9981       && TYPE_MAIN_VARIANT (type) == double_type_node)
9982     {
9983       RIDBIT_RESET (RID_LONG, specbits);
9984       type = build_qualified_type (long_double_type_node,
9985                                    CP_TYPE_QUALS (type));
9986     }
9987
9988   /* Check all other uses of type modifiers.  */
9989
9990   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9991       || RIDBIT_SETP (RID_SIGNED, specbits)
9992       || RIDBIT_SETP (RID_LONG, specbits)
9993       || RIDBIT_SETP (RID_SHORT, specbits))
9994     {
9995       int ok = 0;
9996
9997       if (TREE_CODE (type) == REAL_TYPE)
9998         error ("short, signed or unsigned invalid for `%s'", name);
9999       else if (TREE_CODE (type) != INTEGER_TYPE)
10000         error ("long, short, signed or unsigned invalid for `%s'", name);
10001       else if (RIDBIT_SETP (RID_LONG, specbits)
10002                && RIDBIT_SETP (RID_SHORT, specbits))
10003         error ("long and short specified together for `%s'", name);
10004       else if ((RIDBIT_SETP (RID_LONG, specbits)
10005                 || RIDBIT_SETP (RID_SHORT, specbits))
10006                && explicit_char)
10007         error ("long or short specified with char for `%s'", name);
10008       else if ((RIDBIT_SETP (RID_LONG, specbits)
10009                 || RIDBIT_SETP (RID_SHORT, specbits))
10010                && TREE_CODE (type) == REAL_TYPE)
10011         error ("long or short specified with floating type for `%s'", name);
10012       else if (RIDBIT_SETP (RID_SIGNED, specbits)
10013                && RIDBIT_SETP (RID_UNSIGNED, specbits))
10014         error ("signed and unsigned given together for `%s'", name);
10015       else
10016         {
10017           ok = 1;
10018           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10019             {
10020               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10021                        name);
10022               if (flag_pedantic_errors)
10023                 ok = 0;
10024             }
10025         }
10026
10027       /* Discard the type modifiers if they are invalid.  */
10028       if (! ok)
10029         {
10030           RIDBIT_RESET (RID_UNSIGNED, specbits);
10031           RIDBIT_RESET (RID_SIGNED, specbits);
10032           RIDBIT_RESET (RID_LONG, specbits);
10033           RIDBIT_RESET (RID_SHORT, specbits);
10034           longlong = 0;
10035         }
10036     }
10037
10038   if (RIDBIT_SETP (RID_COMPLEX, specbits)
10039       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10040     {
10041       error ("complex invalid for `%s'", name);
10042       RIDBIT_RESET (RID_COMPLEX, specbits);
10043     }
10044
10045   /* Decide whether an integer type is signed or not.
10046      Optionally treat bitfields as signed by default.  */
10047   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10048       /* [class.bit]
10049
10050          It is implementation-defined whether a plain (neither
10051          explicitly signed or unsigned) char, short, int, or long
10052          bit-field is signed or unsigned.
10053
10054          Naturally, we extend this to long long as well.  Note that
10055          this does not include wchar_t.  */
10056       || (bitfield && !flag_signed_bitfields
10057           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10058           /* A typedef for plain `int' without `signed' can be
10059              controlled just like plain `int', but a typedef for
10060              `signed int' cannot be so controlled.  */
10061           && !(typedef_decl
10062                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10063           && (TREE_CODE (type) == INTEGER_TYPE
10064               || TREE_CODE (type) == CHAR_TYPE)
10065           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10066     {
10067       if (longlong)
10068         type = long_long_unsigned_type_node;
10069       else if (RIDBIT_SETP (RID_LONG, specbits))
10070         type = long_unsigned_type_node;
10071       else if (RIDBIT_SETP (RID_SHORT, specbits))
10072         type = short_unsigned_type_node;
10073       else if (type == char_type_node)
10074         type = unsigned_char_type_node;
10075       else if (typedef_decl)
10076         type = unsigned_type (type);
10077       else
10078         type = unsigned_type_node;
10079     }
10080   else if (RIDBIT_SETP (RID_SIGNED, specbits)
10081            && type == char_type_node)
10082     type = signed_char_type_node;
10083   else if (longlong)
10084     type = long_long_integer_type_node;
10085   else if (RIDBIT_SETP (RID_LONG, specbits))
10086     type = long_integer_type_node;
10087   else if (RIDBIT_SETP (RID_SHORT, specbits))
10088     type = short_integer_type_node;
10089
10090   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10091     {
10092       /* If we just have "complex", it is equivalent to
10093          "complex double", but if any modifiers at all are specified it is
10094          the complex form of TYPE.  E.g, "complex short" is
10095          "complex short int".  */
10096
10097       if (defaulted_int && ! longlong
10098           && ! (RIDBIT_SETP (RID_LONG, specbits)
10099                 || RIDBIT_SETP (RID_SHORT, specbits)
10100                 || RIDBIT_SETP (RID_SIGNED, specbits)
10101                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10102         type = complex_double_type_node;
10103       else if (type == integer_type_node)
10104         type = complex_integer_type_node;
10105       else if (type == float_type_node)
10106         type = complex_float_type_node;
10107       else if (type == double_type_node)
10108         type = complex_double_type_node;
10109       else if (type == long_double_type_node)
10110         type = complex_long_double_type_node;
10111       else
10112         type = build_complex_type (type);
10113     }
10114
10115   if (sfk == sfk_conversion
10116       && (RIDBIT_SETP (RID_CONST, specbits)
10117           || RIDBIT_SETP (RID_VOLATILE, specbits)
10118           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10119     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10120               ctor_return_type);
10121
10122   /* Set CONSTP if this declaration is `const', whether by
10123      explicit specification or via a typedef.
10124      Likewise for VOLATILEP.  */
10125
10126   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10127   restrictp =
10128     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10129   volatilep =
10130     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10131   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10132                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10133                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10134   type = cp_build_qualified_type (type, type_quals);
10135   staticp = 0;
10136   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10137   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10138   RIDBIT_RESET (RID_VIRTUAL, specbits);
10139   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10140   RIDBIT_RESET (RID_EXPLICIT, specbits);
10141
10142   if (RIDBIT_SETP (RID_STATIC, specbits))
10143     staticp = 1 + (decl_context == FIELD);
10144
10145   if (virtualp && staticp == 2)
10146     {
10147       cp_error ("member `%D' cannot be declared both virtual and static",
10148                 dname);
10149       staticp = 0;
10150     }
10151   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10152   RIDBIT_RESET (RID_FRIEND, specbits);
10153
10154   /* Warn if two storage classes are given. Default to `auto'.  */
10155
10156   if (RIDBIT_ANY_SET (specbits))
10157     {
10158       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10159       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10160       if (decl_context == PARM && nclasses > 0)
10161         error ("storage class specifiers invalid in parameter declarations");
10162       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10163         {
10164           if (decl_context == PARM)
10165             error ("typedef declaration invalid in parameter declaration");
10166           nclasses++;
10167         }
10168       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10169       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10170     }
10171
10172   /* Give error if `virtual' is used outside of class declaration.  */
10173   if (virtualp
10174       && (current_class_name == NULL_TREE || decl_context != FIELD))
10175     {
10176       error ("virtual outside class declaration");
10177       virtualp = 0;
10178     }
10179
10180   /* Static anonymous unions are dealt with here.  */
10181   if (staticp && decl_context == TYPENAME
10182       && TREE_CODE (declspecs) == TREE_LIST
10183       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10184     decl_context = FIELD;
10185
10186   /* Warn about storage classes that are invalid for certain
10187      kinds of declarations (parameters, typenames, etc.).  */
10188
10189   if (nclasses > 1)
10190     error ("multiple storage classes in declaration of `%s'", name);
10191   else if (decl_context != NORMAL && nclasses > 0)
10192     {
10193       if ((decl_context == PARM || decl_context == CATCHPARM)
10194           && (RIDBIT_SETP (RID_REGISTER, specbits)
10195               || RIDBIT_SETP (RID_AUTO, specbits)))
10196         ;
10197       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10198         ;
10199       else if (decl_context == FIELD
10200                /* C++ allows static class elements  */
10201                && RIDBIT_SETP (RID_STATIC, specbits))
10202         /* C++ also allows inlines and signed and unsigned elements,
10203            but in those cases we don't come in here.  */
10204         ;
10205       else
10206         {
10207           if (decl_context == FIELD)
10208             {
10209               tree tmp = NULL_TREE;
10210               register int op = 0;
10211
10212               if (declarator)
10213                 {
10214                   /* Avoid trying to get an operand off an identifier node.  */
10215                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10216                     tmp = declarator;
10217                   else
10218                     tmp = TREE_OPERAND (declarator, 0);
10219                   op = IDENTIFIER_OPNAME_P (tmp);
10220                 }
10221               error ("storage class specified for %s `%s'",
10222                      op ? "member operator" : "field",
10223                      op ? operator_name_string (tmp) : name);
10224             }
10225           else
10226             {
10227               if (decl_context == PARM || decl_context == CATCHPARM)
10228                 error ("storage class specified for parameter `%s'", name);
10229               else
10230                 error ("storage class specified for typename");
10231             }
10232           RIDBIT_RESET (RID_REGISTER, specbits);
10233           RIDBIT_RESET (RID_AUTO, specbits);
10234           RIDBIT_RESET (RID_EXTERN, specbits);
10235         }
10236     }
10237   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10238     {
10239       if (toplevel_bindings_p ())
10240         {
10241           /* It's common practice (and completely valid) to have a const
10242              be initialized and declared extern.  */
10243           if (!(type_quals & TYPE_QUAL_CONST))
10244             warning ("`%s' initialized and declared `extern'", name);
10245         }
10246       else
10247         error ("`%s' has both `extern' and initializer", name);
10248     }
10249   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10250            && ! toplevel_bindings_p ())
10251     error ("nested function `%s' declared `extern'", name);
10252   else if (toplevel_bindings_p ())
10253     {
10254       if (RIDBIT_SETP (RID_AUTO, specbits))
10255         error ("top-level declaration of `%s' specifies `auto'", name);
10256     }
10257
10258   if (nclasses > 0 && friendp)
10259     error ("storage class specifiers invalid in friend function declarations");
10260
10261   /* Now figure out the structure of the declarator proper.
10262      Descend through it, creating more complex types, until we reach
10263      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10264
10265   inner_attrs = NULL_TREE;
10266   ignore_attrs = 0;
10267
10268   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10269          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10270     {
10271       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10272          an INDIRECT_REF (for *...),
10273          a CALL_EXPR (for ...(...)),
10274          an identifier (for the name being declared)
10275          or a null pointer (for the place in an absolute declarator
10276          where the name was omitted).
10277          For the last two cases, we have just exited the loop.
10278
10279          For C++ it could also be
10280          a SCOPE_REF (for class :: ...).  In this case, we have converted
10281          sensible names to types, and those are the values we use to
10282          qualify the member name.
10283          an ADDR_EXPR (for &...),
10284          a BIT_NOT_EXPR (for destructors)
10285
10286          At this point, TYPE is the type of elements of an array,
10287          or for a function to return, or for a pointer to point to.
10288          After this sequence of ifs, TYPE is the type of the
10289          array or function or pointer, and DECLARATOR has had its
10290          outermost layer removed.  */
10291
10292       if (type == error_mark_node)
10293         {
10294           if (TREE_CODE (declarator) == SCOPE_REF)
10295             declarator = TREE_OPERAND (declarator, 1);
10296           else
10297             declarator = TREE_OPERAND (declarator, 0);
10298           continue;
10299         }
10300       if (quals != NULL_TREE
10301           && (declarator == NULL_TREE
10302               || TREE_CODE (declarator) != SCOPE_REF))
10303         {
10304           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10305             ctype = TYPE_METHOD_BASETYPE (type);
10306           if (ctype != NULL_TREE)
10307             {
10308               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10309               grok_method_quals (ctype, dummy, quals);
10310               type = TREE_TYPE (dummy);
10311               ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
10312               quals = NULL_TREE;
10313             }
10314         }
10315
10316       /* See the comment for the TREE_LIST case, below.  */
10317       if (ignore_attrs)
10318         ignore_attrs = 0;
10319       else if (inner_attrs)
10320         {
10321           decl_attributes (type, inner_attrs, NULL_TREE);
10322           inner_attrs = NULL_TREE;
10323         }
10324
10325       switch (TREE_CODE (declarator))
10326         {
10327         case TREE_LIST:
10328           {
10329             /* We encode a declarator with embedded attributes using
10330                a TREE_LIST.  The attributes apply to the declarator
10331                directly inside them, so we have to skip an iteration
10332                before applying them to the type.  If the declarator just
10333                inside is the declarator-id, we apply the attrs to the
10334                decl itself.  */
10335             inner_attrs = TREE_PURPOSE (declarator);
10336             ignore_attrs = 1;
10337             declarator = TREE_VALUE (declarator);
10338           }
10339           break;
10340
10341         case ARRAY_REF:
10342           {
10343             register tree size;
10344
10345             size = TREE_OPERAND (declarator, 1);
10346
10347             /* VC++ spells a zero-sized array with [].  */
10348             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10349                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10350               size = integer_zero_node;
10351
10352             declarator = TREE_OPERAND (declarator, 0);
10353
10354             type = create_array_type_for_decl (dname, type, size);
10355
10356             /* VLAs never work as fields. */
10357             if (decl_context == FIELD && !processing_template_decl 
10358                 && TREE_CODE (type) == ARRAY_TYPE
10359                 && TYPE_DOMAIN (type) != NULL_TREE
10360                 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10361               {
10362                 cp_error ("size of member `%D' is not constant", dname);
10363                 /* Proceed with arbitrary constant size, so that offset
10364                    computations don't get confused. */
10365                 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10366                                                    integer_one_node);
10367               }
10368
10369             ctype = NULL_TREE;
10370           }
10371           break;
10372
10373         case CALL_EXPR:
10374           {
10375             tree arg_types;
10376             int funcdecl_p;
10377             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10378             tree inner_decl = TREE_OPERAND (declarator, 0);
10379
10380             /* Declaring a function type.
10381                Make sure we have a valid type for the function to return.  */
10382
10383             /* We now know that the TYPE_QUALS don't apply to the
10384                decl, but to its return type.  */
10385             type_quals = TYPE_UNQUALIFIED;
10386
10387             /* Warn about some types functions can't return.  */
10388
10389             if (TREE_CODE (type) == FUNCTION_TYPE)
10390               {
10391                 error ("`%s' declared as function returning a function", name);
10392                 type = integer_type_node;
10393               }
10394             if (TREE_CODE (type) == ARRAY_TYPE)
10395               {
10396                 error ("`%s' declared as function returning an array", name);
10397                 type = integer_type_node;
10398               }
10399
10400             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10401               inner_decl = TREE_OPERAND (inner_decl, 1);
10402
10403             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10404               inner_decl = dname;
10405
10406             /* Pick up type qualifiers which should be applied to `this'.  */
10407             quals = CALL_DECLARATOR_QUALS (declarator);
10408
10409             /* Pick up the exception specifications.  */
10410             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10411
10412             /* Say it's a definition only for the CALL_EXPR
10413                closest to the identifier.  */
10414             funcdecl_p
10415               = inner_decl
10416               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10417                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10418                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10419
10420             if (ctype == NULL_TREE
10421                 && decl_context == FIELD
10422                 && funcdecl_p
10423                 && (friendp == 0 || dname == current_class_name))
10424               ctype = current_class_type;
10425
10426             if (ctype && sfk == sfk_conversion)
10427               TYPE_HAS_CONVERSION (ctype) = 1;
10428             if (ctype && constructor_name (ctype) == dname)
10429               {
10430                 /* We are within a class's scope. If our declarator name
10431                    is the same as the class name, and we are defining
10432                    a function, then it is a constructor/destructor, and
10433                    therefore returns a void type.  */
10434
10435                 if (flags == DTOR_FLAG)
10436                   {
10437                     /* ISO C++ 12.4/2.  A destructor may not be
10438                        declared const or volatile.  A destructor may
10439                        not be static.  */
10440                     if (staticp == 2)
10441                       error ("destructor cannot be static member function");
10442                     if (quals)
10443                       {
10444                         cp_error ("destructors may not be `%s'",
10445                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10446                         quals = NULL_TREE;
10447                       }
10448                     if (decl_context == FIELD)
10449                       {
10450                         if (! member_function_or_else (ctype,
10451                                                        current_class_type,
10452                                                        flags))
10453                           return void_type_node;
10454                       }
10455                   }
10456                 else            /* It's a constructor.  */
10457                   {
10458                     if (explicitp == 1)
10459                       explicitp = 2;
10460                     /* ISO C++ 12.1.  A constructor may not be
10461                        declared const or volatile.  A constructor may
10462                        not be virtual.  A constructor may not be
10463                        static.  */
10464                     if (staticp == 2)
10465                       error ("constructor cannot be static member function");
10466                     if (virtualp)
10467                       {
10468                         pedwarn ("constructors cannot be declared virtual");
10469                         virtualp = 0;
10470                       }
10471                     if (quals)
10472                       {
10473                         cp_error ("constructors may not be `%s'",
10474                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10475                         quals = NULL_TREE;
10476                       }
10477                     {
10478                       RID_BIT_TYPE tmp_bits;
10479                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10480                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10481                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10482                       if (RIDBIT_ANY_SET (tmp_bits))
10483                         error ("return value type specifier for constructor ignored");
10484                     }
10485                     if (decl_context == FIELD)
10486                       {
10487                         if (! member_function_or_else (ctype,
10488                                                        current_class_type,
10489                                                        flags))
10490                           return void_type_node;
10491                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10492                         if (sfk != sfk_constructor)
10493                           return NULL_TREE;
10494                       }
10495                   }
10496                 if (decl_context == FIELD)
10497                   staticp = 0;
10498               }
10499             else if (friendp)
10500               {
10501                 if (initialized)
10502                   error ("can't initialize friend function `%s'", name);
10503                 if (virtualp)
10504                   {
10505                     /* Cannot be both friend and virtual.  */
10506                     error ("virtual functions cannot be friends");
10507                     RIDBIT_RESET (RID_FRIEND, specbits);
10508                     friendp = 0;
10509                   }
10510                 if (decl_context == NORMAL)
10511                   error ("friend declaration not in class definition");
10512                 if (current_function_decl && funcdef_flag)
10513                   cp_error ("can't define friend function `%s' in a local class definition",
10514                             name);
10515               }
10516
10517             /* Construct the function type and go to the next
10518                inner layer of declarator.  */
10519
10520             declarator = TREE_OPERAND (declarator, 0);
10521
10522             /* FIXME: This is where default args should be fully
10523                processed.  */
10524
10525             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10526
10527             if (declarator && flags == DTOR_FLAG)
10528               {
10529                 /* A destructor declared in the body of a class will
10530                    be represented as a BIT_NOT_EXPR.  But, we just
10531                    want the underlying IDENTIFIER.  */
10532                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10533                   declarator = TREE_OPERAND (declarator, 0);
10534
10535                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10536                   arg_types = void_list_node;
10537                 else if (arg_types == NULL_TREE
10538                          || arg_types != void_list_node)
10539                   {
10540                     cp_error ("destructors may not have parameters");
10541                     arg_types = void_list_node;
10542                     last_function_parms = NULL_TREE;
10543                   }
10544               }
10545
10546             /* ANSI says that `const int foo ();'
10547                does not make the function foo const.  */
10548             type = build_function_type (type, arg_types);
10549
10550             {
10551               tree t;
10552               for (t = arg_types; t; t = TREE_CHAIN (t))
10553                 if (TREE_PURPOSE (t)
10554                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10555                   {
10556                     add_defarg_fn (type);
10557                     break;
10558                   }
10559             }
10560           }
10561           break;
10562
10563         case ADDR_EXPR:
10564         case INDIRECT_REF:
10565           /* Filter out pointers-to-references and references-to-references.
10566              We can get these if a TYPE_DECL is used.  */
10567
10568           if (TREE_CODE (type) == REFERENCE_TYPE)
10569             {
10570               error ("cannot declare %s to references",
10571                      TREE_CODE (declarator) == ADDR_EXPR
10572                      ? "references" : "pointers");
10573               declarator = TREE_OPERAND (declarator, 0);
10574               continue;
10575             }
10576
10577           if (TREE_CODE (type) == OFFSET_TYPE
10578               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10579                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10580             {
10581               cp_error ("cannot declare pointer to `%#T' member",
10582                         TREE_TYPE (type));
10583               type = TREE_TYPE (type);
10584             }
10585
10586           /* Merge any constancy or volatility into the target type
10587              for the pointer.  */
10588
10589           /* We now know that the TYPE_QUALS don't apply to the decl,
10590              but to the target of the pointer.  */
10591           type_quals = TYPE_UNQUALIFIED;
10592
10593           if (TREE_CODE (declarator) == ADDR_EXPR)
10594             {
10595               if (TREE_CODE (type) == VOID_TYPE)
10596                 error ("invalid type: `void &'");
10597               else
10598                 type = build_reference_type (type);
10599             }
10600           else if (TREE_CODE (type) == METHOD_TYPE)
10601             type = build_ptrmemfunc_type (build_pointer_type (type));
10602           else
10603             type = build_pointer_type (type);
10604
10605           /* Process a list of type modifier keywords (such as
10606              const or volatile) that were given inside the `*' or `&'.  */
10607
10608           if (TREE_TYPE (declarator))
10609             {
10610               register tree typemodlist;
10611               int erred = 0;
10612
10613               constp = 0;
10614               volatilep = 0;
10615               restrictp = 0;
10616               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10617                    typemodlist = TREE_CHAIN (typemodlist))
10618                 {
10619                   tree qualifier = TREE_VALUE (typemodlist);
10620
10621                   if (qualifier == ridpointers[(int) RID_CONST])
10622                     constp++;
10623                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10624                     volatilep++;
10625                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10626                     restrictp++;
10627                   else if (!erred)
10628                     {
10629                       erred = 1;
10630                       error ("invalid type modifier within pointer declarator");
10631                     }
10632                 }
10633               if (constp > 1)
10634                 pedwarn ("duplicate `const'");
10635               if (volatilep > 1)
10636                 pedwarn ("duplicate `volatile'");
10637               if (restrictp > 1)
10638                 pedwarn ("duplicate `restrict'");
10639
10640               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10641                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10642                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10643               if (TREE_CODE (declarator) == ADDR_EXPR
10644                   && (constp || volatilep))
10645                 {
10646                   if (constp)
10647                     pedwarn ("discarding `const' applied to a reference");
10648                   if (volatilep)
10649                     pedwarn ("discarding `volatile' applied to a reference");
10650                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10651                 }
10652               type = cp_build_qualified_type (type, type_quals);
10653             }
10654           declarator = TREE_OPERAND (declarator, 0);
10655           ctype = NULL_TREE;
10656           break;
10657
10658         case SCOPE_REF:
10659           {
10660             /* We have converted type names to NULL_TREE if the
10661                name was bogus, or to a _TYPE node, if not.
10662
10663                The variable CTYPE holds the type we will ultimately
10664                resolve to.  The code here just needs to build
10665                up appropriate member types.  */
10666             tree sname = TREE_OPERAND (declarator, 1);
10667             tree t;
10668
10669             /* Destructors can have their visibilities changed as well.  */
10670             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10671               sname = TREE_OPERAND (sname, 0);
10672
10673             if (TREE_COMPLEXITY (declarator) == 0)
10674               /* This needs to be here, in case we are called
10675                  multiple times.  */ ;
10676             else if (TREE_COMPLEXITY (declarator) == -1)
10677               /* Namespace member. */
10678               pop_decl_namespace ();
10679             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10680               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10681             else if (! IS_AGGR_TYPE_CODE
10682                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10683               ;
10684             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10685               {
10686                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10687                    that refer to ctype.  They couldn't be resolved earlier
10688                    because we hadn't pushed into the class yet.
10689                    Example: resolve 'B<T>::type' in
10690                    'B<typename B<T>::type> B<T>::f () { }'.  */
10691                 if (current_template_parms
10692                     && uses_template_parms (type)
10693                     && uses_template_parms (current_class_type))
10694                   {
10695                     tree args = current_template_args ();
10696                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10697                   }
10698
10699                 /* This pop_nested_class corresponds to the
10700                    push_nested_class used to push into class scope for
10701                    parsing the argument list of a function decl, in
10702                    qualified_id.  */
10703                 pop_nested_class ();
10704                 TREE_COMPLEXITY (declarator) = current_class_depth;
10705               }
10706             else
10707               my_friendly_abort (16);
10708
10709             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10710               {
10711                 /* We had a reference to a global decl, or
10712                    perhaps we were given a non-aggregate typedef,
10713                    in which case we cleared this out, and should just
10714                    keep going as though it wasn't there.  */
10715                 declarator = sname;
10716                 continue;
10717               }
10718             ctype = TREE_OPERAND (declarator, 0);
10719
10720             t = ctype;
10721             while (t != NULL_TREE && CLASS_TYPE_P (t))
10722               {
10723                 /* You're supposed to have one `template <...>' 
10724                    for every template class, but you don't need one
10725                    for a full specialization.  For example:
10726
10727                      template <class T> struct S{};
10728                      template <> struct S<int> { void f(); };
10729                      void S<int>::f () {}
10730
10731                    is correct; there shouldn't be a `template <>' for
10732                    the definition of `S<int>::f'.  */
10733                 if (CLASSTYPE_TEMPLATE_INFO (t)
10734                     && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10735                         || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
10736                   template_count += 1;
10737
10738                 t = TYPE_MAIN_DECL (t);
10739                 if (DECL_LANG_SPECIFIC (t))
10740                   t = DECL_CONTEXT (t);
10741                 else
10742                   t = NULL_TREE;
10743               }
10744
10745             if (sname == NULL_TREE)
10746               goto done_scoping;
10747
10748             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10749               {
10750                 /* This is the `standard' use of the scoping operator:
10751                    basetype :: member .  */
10752
10753                 if (ctype == current_class_type)
10754                   {
10755                     /* class A {
10756                          void A::f ();
10757                        };
10758
10759                        Is this ill-formed?  */
10760
10761                     if (pedantic)
10762                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10763                                   ctype, name);
10764                   }
10765                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10766                   {
10767                     if (current_class_type == NULL_TREE
10768                         || friendp)
10769                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10770                                                       TYPE_ARG_TYPES (type));
10771                     else
10772                       {
10773                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10774                                   ctype, name, current_class_type);
10775                         return void_type_node;
10776                       }
10777                   }
10778                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10779                          || COMPLETE_TYPE_P (complete_type (ctype)))
10780                   {
10781                     /* Have to move this code elsewhere in this function.
10782                        this code is used for i.e., typedef int A::M; M *pm;
10783
10784                        It is?  How? jason 10/2/94 */
10785
10786                     if (current_class_type)
10787                       {
10788                         cp_error ("cannot declare member `%T::%s' within `%T'",
10789                                   ctype, name, current_class_type);
10790                         return void_type_node;
10791                       }
10792                     type = build_offset_type (ctype, type);
10793                   }
10794                 else if (uses_template_parms (ctype))
10795                   {
10796                     if (TREE_CODE (type) == FUNCTION_TYPE)
10797                       type
10798                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10799                                                    TYPE_ARG_TYPES (type));
10800                   }
10801                 else
10802                   {
10803                     cp_error ("structure `%T' not yet defined", ctype);
10804                     return error_mark_node;
10805                   }
10806
10807                 declarator = sname;
10808               }
10809             else if (TREE_CODE (sname) == SCOPE_REF)
10810               my_friendly_abort (17);
10811             else
10812               {
10813               done_scoping:
10814                 declarator = TREE_OPERAND (declarator, 1);
10815                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10816                   /* In this case, we will deal with it later.  */
10817                   ;
10818                 else
10819                   {
10820                     if (TREE_CODE (type) == FUNCTION_TYPE)
10821                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10822                                                       TYPE_ARG_TYPES (type));
10823                     else
10824                       type = build_offset_type (ctype, type);
10825                   }
10826               }
10827           }
10828           break;
10829
10830         case BIT_NOT_EXPR:
10831           declarator = TREE_OPERAND (declarator, 0);
10832           break;
10833
10834         case RECORD_TYPE:
10835         case UNION_TYPE:
10836         case ENUMERAL_TYPE:
10837           declarator = NULL_TREE;
10838           break;
10839
10840         case ERROR_MARK:
10841           declarator = NULL_TREE;
10842           break;
10843
10844         default:
10845           my_friendly_abort (158);
10846         }
10847     }
10848
10849   /* See the comment for the TREE_LIST case, above.  */
10850   if (inner_attrs)
10851     {
10852       if (! ignore_attrs)
10853         decl_attributes (type, inner_attrs, NULL_TREE);
10854       else if (attrlist)
10855         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10856       else
10857         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10858     }
10859
10860   /* Now TYPE has the actual type.  */
10861
10862   if (explicitp == 1 || (explicitp && friendp))
10863     {
10864       /* [dcl.fct.spec] The explicit specifier shall only be used in
10865          declarations of constructors within a class definition.  */
10866       error ("only declarations of constructors can be `explicit'");
10867       explicitp = 0;
10868     }
10869
10870   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10871     {
10872       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10873         {
10874           error ("non-member `%s' cannot be declared `mutable'", name);
10875           RIDBIT_RESET (RID_MUTABLE, specbits);
10876         }
10877       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10878         {
10879           error ("non-object member `%s' cannot be declared `mutable'", name);
10880           RIDBIT_RESET (RID_MUTABLE, specbits);
10881         }
10882       else if (TREE_CODE (type) == FUNCTION_TYPE
10883                || TREE_CODE (type) == METHOD_TYPE)
10884         {
10885           error ("function `%s' cannot be declared `mutable'", name);
10886           RIDBIT_RESET (RID_MUTABLE, specbits);
10887         }
10888       else if (staticp)
10889         {
10890           error ("static `%s' cannot be declared `mutable'", name);
10891           RIDBIT_RESET (RID_MUTABLE, specbits);
10892         }
10893       else if (type_quals & TYPE_QUAL_CONST)
10894         {
10895           error ("const `%s' cannot be declared `mutable'", name);
10896           RIDBIT_RESET (RID_MUTABLE, specbits);
10897         }
10898     }
10899
10900   if (declarator == NULL_TREE
10901       || TREE_CODE (declarator) == IDENTIFIER_NODE
10902       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10903           && (TREE_CODE (type) == FUNCTION_TYPE
10904               || TREE_CODE (type) == METHOD_TYPE)))
10905     /* OK */;
10906   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10907     {
10908       cp_error ("template-id `%D' used as a declarator", declarator);
10909       declarator = dname;
10910     }
10911   else
10912     /* Unexpected declarator format.  */
10913     my_friendly_abort (990210);
10914
10915   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10916
10917   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10918     {
10919       tree decl;
10920
10921       /* Note that the grammar rejects storage classes
10922          in typenames, fields or parameters.  */
10923       if (current_lang_name == lang_name_java)
10924         TYPE_FOR_JAVA (type) = 1;
10925
10926       if (decl_context == FIELD)
10927         {
10928           if (declarator == constructor_name (current_class_type))
10929             cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
10930                         declarator);
10931           decl = build_lang_decl (TYPE_DECL, declarator, type);
10932         }
10933       else
10934         decl = build_decl (TYPE_DECL, declarator, type);
10935
10936       /* If the user declares "typedef struct {...} foo" then the
10937          struct will have an anonymous name.  Fill that name in now.
10938          Nothing can refer to it, so nothing needs know about the name
10939          change.  */
10940       if (type != error_mark_node
10941           && declarator
10942           && TYPE_NAME (type)
10943           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10944           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10945           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10946         {
10947           tree oldname = TYPE_NAME (type);
10948           tree t;
10949
10950           /* Replace the anonymous name with the real name everywhere.  */
10951           lookup_tag_reverse (type, declarator);
10952           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10953             if (TYPE_NAME (t) == oldname)
10954               TYPE_NAME (t) = decl;
10955
10956           if (TYPE_LANG_SPECIFIC (type))
10957             TYPE_WAS_ANONYMOUS (type) = 1;
10958
10959           /* If this is a typedef within a template class, the nested
10960              type is a (non-primary) template.  The name for the
10961              template needs updating as well.  */
10962           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10963             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10964               = TYPE_IDENTIFIER (type);
10965
10966           /* XXX Temporarily set the scope.
10967              When returning, start_decl expects it as NULL_TREE,
10968              and will then then set it using pushdecl. */
10969           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10970           if (current_class_type)
10971             DECL_CONTEXT (decl) = current_class_type;
10972           else
10973             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10974
10975           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10976           DECL_ASSEMBLER_NAME (decl)
10977             = get_identifier (build_overload_name (type, 1, 1));
10978           DECL_CONTEXT (decl) = NULL_TREE;
10979
10980           /* FIXME remangle member functions; member functions of a
10981              type with external linkage have external linkage.  */
10982         }
10983
10984       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10985         {
10986           cp_error_at ("typedef name may not be class-qualified", decl);
10987           return NULL_TREE;
10988         }
10989       else if (quals)
10990         {
10991           if (ctype == NULL_TREE)
10992             {
10993               if (TREE_CODE (type) != METHOD_TYPE)
10994                 cp_error_at ("invalid type qualifier for non-member function type", decl);
10995               else
10996                 ctype = TYPE_METHOD_BASETYPE (type);
10997             }
10998           if (ctype != NULL_TREE)
10999             grok_method_quals (ctype, decl, quals);
11000         }
11001
11002       if (RIDBIT_SETP (RID_SIGNED, specbits)
11003           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11004         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11005
11006       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11007                       inlinep, friendp, raises != NULL_TREE);
11008
11009       if (initialized)
11010         error ("typedef declaration includes an initializer");
11011
11012       return decl;
11013     }
11014
11015   /* Detect the case of an array type of unspecified size
11016      which came, as such, direct from a typedef name.
11017      We must copy the type, so that each identifier gets
11018      a distinct type, so that each identifier's size can be
11019      controlled separately by its own initializer.  */
11020
11021   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11022       && TYPE_DOMAIN (type) == NULL_TREE)
11023     {
11024       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11025     }
11026
11027   /* If this is a type name (such as, in a cast or sizeof),
11028      compute the type and return it now.  */
11029
11030   if (decl_context == TYPENAME)
11031     {
11032       /* Note that the grammar rejects storage classes
11033          in typenames, fields or parameters.  */
11034       if (type_quals != TYPE_UNQUALIFIED)
11035         type_quals = TYPE_UNQUALIFIED;
11036
11037       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11038       if (friendp)
11039         {
11040           if (type_quals != TYPE_UNQUALIFIED)
11041             {
11042               cp_error ("type qualifiers specified for friend class declaration");
11043               type_quals = TYPE_UNQUALIFIED;
11044             }
11045           if (inlinep)
11046             {
11047               cp_error ("`inline' specified for friend class declaration");
11048               inlinep = 0;
11049             }
11050
11051           /* Only try to do this stuff if we didn't already give up.  */
11052           if (type != integer_type_node)
11053             {
11054               /* A friendly class?  */
11055               if (current_class_type)
11056                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11057               else
11058                 error ("trying to make class `%s' a friend of global scope",
11059                        TYPE_NAME_STRING (type));
11060               type = void_type_node;
11061             }
11062         }
11063       else if (quals)
11064         {
11065           if (ctype == NULL_TREE)
11066             {
11067               if (TREE_CODE (type) != METHOD_TYPE)
11068                 cp_error ("invalid qualifiers on non-member function type");
11069               else
11070                 ctype = TYPE_METHOD_BASETYPE (type);
11071             }
11072           if (ctype)
11073             {
11074               tree dummy = build_decl (TYPE_DECL, declarator, type);
11075               grok_method_quals (ctype, dummy, quals);
11076               type = TREE_TYPE (dummy);
11077             }
11078         }
11079
11080       return type;
11081     }
11082   else if (declarator == NULL_TREE && decl_context != PARM
11083            && decl_context != CATCHPARM
11084            && TREE_CODE (type) != UNION_TYPE
11085            && ! bitfield)
11086     {
11087       cp_error ("abstract declarator `%T' used as declaration", type);
11088       declarator = make_anon_name ();
11089     }
11090
11091   /* `void' at top level (not within pointer)
11092      is allowed only in typedefs or type names.
11093      We don't complain about parms either, but that is because
11094      a better error message can be made later.  */
11095
11096   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11097     {
11098       if (! declarator)
11099         error ("unnamed variable or field declared void");
11100       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11101         {
11102           if (IDENTIFIER_OPNAME_P (declarator))
11103             my_friendly_abort (356);
11104           else
11105             error ("variable or field `%s' declared void", name);
11106         }
11107       else
11108         error ("variable or field declared void");
11109       type = integer_type_node;
11110     }
11111
11112   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11113      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11114
11115   if (decl_context == PARM || decl_context == CATCHPARM)
11116     {
11117       if (ctype || in_namespace)
11118         error ("cannot use `::' in parameter declaration");
11119
11120       /* A parameter declared as an array of T is really a pointer to T.
11121          One declared as a function is really a pointer to a function.
11122          One declared as a member is really a pointer to member.  */
11123
11124       if (TREE_CODE (type) == ARRAY_TYPE)
11125         {
11126           /* Transfer const-ness of array into that of type pointed to.  */
11127           type = build_pointer_type (TREE_TYPE (type));
11128           type_quals = TYPE_UNQUALIFIED;
11129         }
11130       else if (TREE_CODE (type) == FUNCTION_TYPE)
11131         type = build_pointer_type (type);
11132       else if (TREE_CODE (type) == OFFSET_TYPE)
11133         type = build_pointer_type (type);
11134       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11135         {
11136           error ("declaration of `%s' as void", name);
11137           return NULL_TREE;
11138         }
11139     }
11140
11141   {
11142     register tree decl;
11143
11144     if (decl_context == PARM)
11145       {
11146         decl = build_decl (PARM_DECL, declarator, type);
11147
11148         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11149                         inlinep, friendp, raises != NULL_TREE);
11150
11151         /* Compute the type actually passed in the parmlist,
11152            for the case where there is no prototype.
11153            (For example, shorts and chars are passed as ints.)
11154            When there is a prototype, this is overridden later.  */
11155
11156         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11157       }
11158     else if (decl_context == FIELD)
11159       {
11160         if (type == error_mark_node)
11161           {
11162             /* Happens when declaring arrays of sizes which
11163                are error_mark_node, for example.  */
11164             decl = NULL_TREE;
11165           }
11166         else if (in_namespace && !friendp)
11167           {
11168             /* Something like struct S { int N::j; };  */
11169             cp_error ("invalid use of `::'");
11170             decl = NULL_TREE;
11171           }
11172         else if (TREE_CODE (type) == FUNCTION_TYPE)
11173           {
11174             int publicp = 0;
11175             tree function_context;
11176
11177             /* We catch the others as conflicts with the builtin
11178                typedefs.  */
11179             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11180               {
11181                 cp_error ("function `%D' cannot be declared friend",
11182                           declarator);
11183                 friendp = 0;
11184               }
11185
11186             if (friendp == 0)
11187               {
11188                 if (ctype == NULL_TREE)
11189                   ctype = current_class_type;
11190
11191                 if (ctype == NULL_TREE)
11192                   {
11193                     cp_error ("can't make `%D' into a method -- not in a class",
11194                               declarator);
11195                     return void_type_node;
11196                   }
11197
11198                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11199                    ARM 9.5 */
11200                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11201                   {
11202                     cp_error ("function `%D' declared virtual inside a union",
11203                               declarator);
11204                     return void_type_node;
11205                   }
11206
11207                 if (declarator == ansi_opname[(int) NEW_EXPR]
11208                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11209                     || declarator == ansi_opname[(int) DELETE_EXPR]
11210                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11211                   {
11212                     if (virtualp)
11213                       {
11214                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11215                                   declarator);
11216                         virtualp = 0;
11217                       }
11218                   }
11219                 else if (staticp < 2)
11220                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11221                                                   TYPE_ARG_TYPES (type));
11222               }
11223
11224             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11225             function_context = (ctype != NULL_TREE) ?
11226               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11227             publicp = (! friendp || ! staticp)
11228               && function_context == NULL_TREE;
11229             decl = grokfndecl (ctype, type,
11230                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11231                                ? declarator : dname,
11232                                declarator,
11233                                virtualp, flags, quals, raises,
11234                                friendp ? -1 : 0, friendp, publicp, inlinep,
11235                                funcdef_flag, template_count, in_namespace);
11236             if (decl == NULL_TREE)
11237               return decl;
11238 #if 0
11239             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11240             /* The decl and setting of decl_machine_attr is also turned off.  */
11241             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11242 #endif
11243
11244             /* [class.conv.ctor]
11245
11246                A constructor declared without the function-specifier
11247                explicit that can be called with a single parameter
11248                specifies a conversion from the type of its first
11249                parameter to the type of its class.  Such a constructor
11250                is called a converting constructor.  */
11251             if (explicitp == 2)
11252               DECL_NONCONVERTING_P (decl) = 1;
11253             else if (DECL_CONSTRUCTOR_P (decl))
11254               {
11255                 /* The constructor can be called with exactly one
11256                    parameter if there is at least one parameter, and
11257                    any subsequent parameters have default arguments.
11258                    We don't look at the first parameter, which is
11259                    really just the `this' parameter for the new
11260                    object.  */
11261                 tree arg_types =
11262                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11263
11264                 /* Skip the `in_chrg' argument too, if present.  */
11265                 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
11266                   arg_types = TREE_CHAIN (arg_types);
11267
11268                 if (arg_types == void_list_node
11269                     || (arg_types
11270                         && TREE_CHAIN (arg_types)
11271                         && TREE_CHAIN (arg_types) != void_list_node
11272                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11273                   DECL_NONCONVERTING_P (decl) = 1;
11274               }
11275           }
11276         else if (TREE_CODE (type) == METHOD_TYPE)
11277           {
11278             /* We only get here for friend declarations of
11279                members of other classes.  */
11280             /* All method decls are public, so tell grokfndecl to set
11281                TREE_PUBLIC, also.  */
11282             decl = grokfndecl (ctype, type, declarator, declarator,
11283                                virtualp, flags, quals, raises,
11284                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11285                                template_count, in_namespace);
11286             if (decl == NULL_TREE)
11287               return NULL_TREE;
11288           }
11289         else if (!staticp && ! processing_template_decl
11290                  && !COMPLETE_TYPE_P (complete_type (type))
11291                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11292           {
11293             if (declarator)
11294               cp_error ("field `%D' has incomplete type", declarator);
11295             else
11296               cp_error ("name `%T' has incomplete type", type);
11297
11298             /* If we're instantiating a template, tell them which
11299                instantiation made the field's type be incomplete.  */
11300             if (current_class_type
11301                 && TYPE_NAME (current_class_type)
11302                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11303                 && declspecs && TREE_VALUE (declspecs)
11304                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11305               cp_error ("  in instantiation of template `%T'",
11306                         current_class_type);
11307
11308             type = error_mark_node;
11309             decl = NULL_TREE;
11310           }
11311         else
11312           {
11313             if (friendp)
11314               {
11315                 error ("`%s' is neither function nor member function; cannot be declared friend",
11316                        IDENTIFIER_POINTER (declarator));
11317                 friendp = 0;
11318               }
11319             decl = NULL_TREE;
11320           }
11321
11322         if (friendp)
11323           {
11324             /* Friends are treated specially.  */
11325             if (ctype == current_class_type)
11326               warning ("member functions are implicitly friends of their class");
11327             else
11328               {
11329                 tree t = NULL_TREE;
11330                 if (decl && DECL_NAME (decl))
11331                   {
11332                     if (template_class_depth (current_class_type) == 0)
11333                       {
11334                         decl
11335                           = check_explicit_specialization
11336                           (declarator, decl,
11337                            template_count, 2 * (funcdef_flag != 0) + 4);
11338                         if (decl == error_mark_node)
11339                           return error_mark_node;
11340                       }
11341
11342                     t = do_friend (ctype, declarator, decl,
11343                                    last_function_parms, attrlist, flags, quals,
11344                                    funcdef_flag);
11345                   }
11346                 if (t && funcdef_flag)
11347                   return t;
11348
11349                 return void_type_node;
11350               }
11351           }
11352
11353         /* Structure field.  It may not be a function, except for C++ */
11354
11355         if (decl == NULL_TREE)
11356           {
11357             if (initialized)
11358               {
11359                 if (!staticp)
11360                   {
11361                     /* An attempt is being made to initialize a non-static
11362                        member.  But, from [class.mem]:
11363
11364                        4 A member-declarator can contain a
11365                        constant-initializer only if it declares a static
11366                        member (_class.static_) of integral or enumeration
11367                        type, see _class.static.data_.
11368
11369                        This used to be relatively common practice, but
11370                        the rest of the compiler does not correctly
11371                        handle the initialization unless the member is
11372                        static so we make it static below.  */
11373                     cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
11374                                 declarator);
11375                     cp_pedwarn ("making `%D' static", declarator);
11376                     staticp = 1;
11377                   }
11378
11379                 if (uses_template_parms (type))
11380                   /* We'll check at instantiation time.  */
11381                   ;
11382                 else if (check_static_variable_definition (declarator,
11383                                                            type))
11384                   /* If we just return the declaration, crashes
11385                      will sometimes occur.  We therefore return
11386                      void_type_node, as if this was a friend
11387                      declaration, to cause callers to completely
11388                      ignore this declaration.  */
11389                   return void_type_node;
11390               }
11391
11392             /* 9.2p13 [class.mem] */
11393             if (declarator == constructor_name (current_class_type)
11394                 /* Divergence from the standard:  In extern "C", we
11395                    allow non-static data members here, because C does
11396                    and /usr/include/netinet/in.h uses that.  */
11397                 && (staticp || ! in_system_header))
11398               cp_pedwarn ("ISO C++ forbids data member `%D' with same name as enclosing class",
11399                           declarator);
11400
11401             if (staticp)
11402               {
11403                 /* C++ allows static class members.  All other work
11404                    for this is done by grokfield.  */
11405                 decl = build_lang_decl (VAR_DECL, declarator, type);
11406                 TREE_STATIC (decl) = 1;
11407                 /* In class context, 'static' means public access.  */
11408                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11409               }
11410             else
11411               {
11412                 decl = build_lang_decl (FIELD_DECL, declarator, type);
11413                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11414                   {
11415                     DECL_MUTABLE_P (decl) = 1;
11416                     RIDBIT_RESET (RID_MUTABLE, specbits);
11417                   }
11418               }
11419
11420             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11421                             inlinep, friendp, raises != NULL_TREE);
11422           }
11423       }
11424     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11425       {
11426         tree original_name;
11427         int publicp = 0;
11428
11429         if (! declarator)
11430           return NULL_TREE;
11431
11432         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11433           original_name = dname;
11434         else
11435           original_name = declarator;
11436
11437         if (RIDBIT_SETP (RID_AUTO, specbits))
11438           error ("storage class `auto' invalid for function `%s'", name);
11439         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11440           error ("storage class `register' invalid for function `%s'", name);
11441
11442         /* Function declaration not at top level.
11443            Storage classes other than `extern' are not allowed
11444            and `extern' makes no difference.  */
11445         if (! toplevel_bindings_p ()
11446             && (RIDBIT_SETP (RID_STATIC, specbits)
11447                 || RIDBIT_SETP (RID_INLINE, specbits))
11448             && pedantic)
11449           {
11450             if (RIDBIT_SETP (RID_STATIC, specbits))
11451               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11452             else
11453               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11454           }
11455
11456         if (ctype == NULL_TREE)
11457           {
11458             if (virtualp)
11459               {
11460                 error ("virtual non-class function `%s'", name);
11461                 virtualp = 0;
11462               }
11463           }
11464         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11465           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11466                                           TYPE_ARG_TYPES (type));
11467
11468         /* Record presence of `static'.  */
11469         publicp = (ctype != NULL_TREE
11470                    || RIDBIT_SETP (RID_EXTERN, specbits)
11471                    || !RIDBIT_SETP (RID_STATIC, specbits));
11472
11473         decl = grokfndecl (ctype, type, original_name, declarator,
11474                            virtualp, flags, quals, raises,
11475                            1, friendp,
11476                            publicp, inlinep, funcdef_flag,
11477                            template_count, in_namespace);
11478         if (decl == NULL_TREE)
11479           return NULL_TREE;
11480
11481         if (staticp == 1)
11482           {
11483             int illegal_static = 0;
11484
11485             /* Don't allow a static member function in a class, and forbid
11486                declaring main to be static.  */
11487             if (TREE_CODE (type) == METHOD_TYPE)
11488               {
11489                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11490                 illegal_static = 1;
11491               }
11492             else if (current_function_decl)
11493               {
11494                 /* FIXME need arm citation */
11495                 error ("cannot declare static function inside another function");
11496                 illegal_static = 1;
11497               }
11498
11499             if (illegal_static)
11500               {
11501                 staticp = 0;
11502                 RIDBIT_RESET (RID_STATIC, specbits);
11503               }
11504           }
11505       }
11506     else
11507       {
11508         /* It's a variable.  */
11509
11510         /* An uninitialized decl with `extern' is a reference.  */
11511         decl = grokvardecl (type, declarator, &specbits,
11512                             initialized,
11513                             (type_quals & TYPE_QUAL_CONST) != 0,
11514                             in_namespace);
11515         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11516                         inlinep, friendp, raises != NULL_TREE);
11517
11518         if (ctype)
11519           {
11520             DECL_CONTEXT (decl) = ctype;
11521             if (staticp == 1)
11522               {
11523                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11524                 staticp = 0;
11525                 RIDBIT_RESET (RID_STATIC, specbits);
11526               }
11527             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11528               {
11529                 cp_error ("static member `%D' declared `register'", decl);
11530                 RIDBIT_RESET (RID_REGISTER, specbits);
11531               }
11532             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11533               {
11534                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11535                             decl);
11536                 RIDBIT_RESET (RID_EXTERN, specbits);
11537               }
11538           }
11539       }
11540
11541     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11542
11543     /* Record `register' declaration for warnings on &
11544        and in case doing stupid register allocation.  */
11545
11546     if (RIDBIT_SETP (RID_REGISTER, specbits))
11547       DECL_REGISTER (decl) = 1;
11548
11549     if (RIDBIT_SETP (RID_EXTERN, specbits))
11550       DECL_THIS_EXTERN (decl) = 1;
11551
11552     if (RIDBIT_SETP (RID_STATIC, specbits))
11553       DECL_THIS_STATIC (decl) = 1;
11554
11555     /* Record constancy and volatility.  There's no need to do this
11556        when processing a template; we'll do this for the instantiated
11557        declaration based on the type of DECL.  */
11558     if (!processing_template_decl)
11559       c_apply_type_quals_to_decl (type_quals, decl);
11560
11561     return decl;
11562   }
11563 }
11564 \f
11565 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11566    An empty exprlist is a parmlist.  An exprlist which
11567    contains only identifiers at the global level
11568    is a parmlist.  Otherwise, it is an exprlist.  */
11569
11570 int
11571 parmlist_is_exprlist (exprs)
11572      tree exprs;
11573 {
11574   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11575     return 0;
11576
11577   if (toplevel_bindings_p ())
11578     {
11579       /* At the global level, if these are all identifiers,
11580          then it is a parmlist.  */
11581       while (exprs)
11582         {
11583           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11584             return 1;
11585           exprs = TREE_CHAIN (exprs);
11586         }
11587       return 0;
11588     }
11589   return 1;
11590 }
11591
11592 /* Subroutine of start_function.  Ensure that each of the parameter
11593    types (as listed in PARMS) is complete, as is required for a
11594    function definition.  */
11595
11596 static void
11597 require_complete_types_for_parms (parms)
11598      tree parms;
11599 {
11600   for (; parms; parms = TREE_CHAIN (parms))
11601     {
11602       tree type = TREE_TYPE (parms);
11603
11604       /* Try to complete the TYPE.  */
11605       type = complete_type (type);
11606
11607       if (type == error_mark_node)
11608         continue;
11609
11610       if (!COMPLETE_TYPE_P (type))
11611         {
11612           if (DECL_NAME (parms))
11613             error ("parameter `%s' has incomplete type",
11614                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11615           else
11616             error ("parameter has incomplete type");
11617           TREE_TYPE (parms) = error_mark_node;
11618         }
11619       else
11620         layout_decl (parms, 0);
11621     }
11622 }
11623
11624 /* Returns non-zero if T is a local variable.  */
11625
11626 int
11627 local_variable_p (t)
11628      tree t;
11629 {
11630   if ((TREE_CODE (t) == VAR_DECL
11631        /* A VAR_DECL with a context that is a _TYPE is a static data
11632           member.  */
11633        && !TYPE_P (CP_DECL_CONTEXT (t))
11634        /* Any other non-local variable must be at namespace scope.  */
11635        && !DECL_NAMESPACE_SCOPE_P (t))
11636       || (TREE_CODE (t) == PARM_DECL))
11637     return 1;
11638
11639   return 0;
11640 }
11641
11642 /* Returns non-zero if T is an automatic local variable or a label.
11643    (These are the declarations that need to be remapped when the code
11644    containing them is duplicated.)  */
11645
11646 int
11647 nonstatic_local_decl_p (t)
11648      tree t;
11649 {
11650   return ((local_variable_p (t) && !TREE_STATIC (t))
11651           || TREE_CODE (t) == LABEL_DECL
11652           || TREE_CODE (t) == RESULT_DECL);
11653 }
11654
11655 /* Like local_variable_p, but suitable for use as a tree-walking
11656    function.  */
11657
11658 static tree
11659 local_variable_p_walkfn (tp, walk_subtrees, data)
11660      tree *tp;
11661      int *walk_subtrees ATTRIBUTE_UNUSED;
11662      void *data ATTRIBUTE_UNUSED;
11663 {
11664   return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
11665           ? *tp : NULL_TREE);
11666 }
11667
11668 /* Check that ARG, which is a default-argument expression for a
11669    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11670    something goes wrong.  DECL may also be a _TYPE node, rather than a
11671    DECL, if there is no DECL available.  */
11672
11673 tree
11674 check_default_argument (decl, arg)
11675      tree decl;
11676      tree arg;
11677 {
11678   tree var;
11679   tree decl_type;
11680
11681   if (TREE_CODE (arg) == DEFAULT_ARG)
11682     /* We get a DEFAULT_ARG when looking at an in-class declaration
11683        with a default argument.  Ignore the argument for now; we'll
11684        deal with it after the class is complete.  */
11685     return arg;
11686
11687   if (processing_template_decl || uses_template_parms (arg))
11688     /* We don't do anything checking until instantiation-time.  Note
11689        that there may be uninstantiated arguments even for an
11690        instantiated function, since default arguments are not
11691        instantiated until they are needed.  */
11692     return arg;
11693
11694   if (TYPE_P (decl))
11695     {
11696       decl_type = decl;
11697       decl = NULL_TREE;
11698     }
11699   else
11700     decl_type = TREE_TYPE (decl);
11701
11702   if (arg == error_mark_node
11703       || decl == error_mark_node
11704       || TREE_TYPE (arg) == error_mark_node
11705       || decl_type == error_mark_node)
11706     /* Something already went wrong.  There's no need to check
11707        further.  */
11708     return error_mark_node;
11709
11710   /* [dcl.fct.default]
11711
11712      A default argument expression is implicitly converted to the
11713      parameter type.  */
11714   if (!TREE_TYPE (arg)
11715       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11716     {
11717       if (decl)
11718         cp_error ("default argument for `%#D' has type `%T'",
11719                   decl, TREE_TYPE (arg));
11720       else
11721         cp_error ("default argument for parameter of type `%T' has type `%T'",
11722                   decl_type, TREE_TYPE (arg));
11723
11724       return error_mark_node;
11725     }
11726
11727   /* [dcl.fct.default]
11728
11729      Local variables shall not be used in default argument
11730      expressions.
11731
11732      The keyword `this' shall not be used in a default argument of a
11733      member function.  */
11734   var = walk_tree (&arg, local_variable_p_walkfn, NULL);
11735   if (var)
11736     {
11737       cp_error ("default argument `%E' uses local variable `%D'",
11738                 arg, var);
11739       return error_mark_node;
11740     }
11741
11742   /* All is well.  */
11743   return arg;
11744 }
11745
11746 /* Decode the list of parameter types for a function type.
11747    Given the list of things declared inside the parens,
11748    return a list of types.
11749
11750    The list we receive can have three kinds of elements:
11751    an IDENTIFIER_NODE for names given without types,
11752    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11753    or void_type_node, to mark the end of an argument list
11754    when additional arguments are not permitted (... was not used).
11755
11756    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11757    a mere declaration.  A nonempty identifier-list gets an error message
11758    when FUNCDEF_FLAG is zero.
11759    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11760    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11761
11762    If all elements of the input list contain types,
11763    we return a list of the types.
11764    If all elements contain no type (except perhaps a void_type_node
11765    at the end), we return a null list.
11766    If some have types and some do not, it is an error, and we
11767    return a null list.
11768
11769    Also set last_function_parms to either
11770    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11771    A list of names is converted to a chain of PARM_DECLs
11772    by store_parm_decls so that ultimately it is always a chain of decls.
11773
11774    Note that in C++, parameters can take default values.  These default
11775    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11776    an error to specify default values which are followed by parameters
11777    that have no default values, or an ELLIPSES.  For simplicities sake,
11778    only parameters which are specified with their types can take on
11779    default values.  */
11780
11781 static tree
11782 grokparms (first_parm, funcdef_flag)
11783      tree first_parm;
11784      int funcdef_flag;
11785 {
11786   tree result = NULL_TREE;
11787   tree decls = NULL_TREE;
11788
11789   if (first_parm != NULL_TREE
11790       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11791     {
11792       if (! funcdef_flag)
11793         pedwarn ("parameter names (without types) in function declaration");
11794       last_function_parms = first_parm;
11795       return NULL_TREE;
11796     }
11797   else if (first_parm != NULL_TREE
11798            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11799            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11800     my_friendly_abort (145);
11801   else
11802     {
11803       /* Types were specified.  This is a list of declarators
11804          each represented as a TREE_LIST node.  */
11805       register tree parm, chain;
11806       int any_init = 0, any_error = 0;
11807
11808       if (first_parm != NULL_TREE)
11809         {
11810           tree last_result = NULL_TREE;
11811           tree last_decl = NULL_TREE;
11812
11813           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11814             {
11815               tree type = NULL_TREE, list_node = parm;
11816               register tree decl = TREE_VALUE (parm);
11817               tree init = TREE_PURPOSE (parm);
11818
11819               chain = TREE_CHAIN (parm);
11820               /* @@ weak defense against parse errors.  */
11821               if (TREE_CODE (decl) != VOID_TYPE
11822                   && TREE_CODE (decl) != TREE_LIST)
11823                 {
11824                   /* Give various messages as the need arises.  */
11825                   if (TREE_CODE (decl) == STRING_CST)
11826                     cp_error ("invalid string constant `%E'", decl);
11827                   else if (TREE_CODE (decl) == INTEGER_CST)
11828                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11829                   continue;
11830                 }
11831
11832               if (TREE_CODE (decl) != VOID_TYPE)
11833                 {
11834                   decl = grokdeclarator (TREE_VALUE (decl),
11835                                          TREE_PURPOSE (decl),
11836                                          PARM, init != NULL_TREE,
11837                                          NULL_TREE);
11838                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11839                     continue;
11840
11841                   /* Top-level qualifiers on the parameters are
11842                      ignored for function types.  */
11843                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11844
11845                   if (TREE_CODE (type) == VOID_TYPE)
11846                     decl = void_type_node;
11847                   else if (TREE_CODE (type) == METHOD_TYPE)
11848                     {
11849                       if (DECL_NAME (decl))
11850                         /* Cannot use the decl here because
11851                            we don't have DECL_CONTEXT set up yet.  */
11852                         cp_error ("parameter `%D' invalidly declared method type",
11853                                   DECL_NAME (decl));
11854                       else
11855                         error ("parameter invalidly declared method type");
11856                       type = build_pointer_type (type);
11857                       TREE_TYPE (decl) = type;
11858                     }
11859                   else if (TREE_CODE (type) == OFFSET_TYPE)
11860                     {
11861                       if (DECL_NAME (decl))
11862                         cp_error ("parameter `%D' invalidly declared offset type",
11863                                   DECL_NAME (decl));
11864                       else
11865                         error ("parameter invalidly declared offset type");
11866                       type = build_pointer_type (type);
11867                       TREE_TYPE (decl) = type;
11868                     }
11869                   else if (abstract_virtuals_error (decl, type))
11870                     any_error = 1;  /* Seems like a good idea. */
11871                   else if (POINTER_TYPE_P (type))
11872                     {
11873                       tree t = type;
11874                       while (POINTER_TYPE_P (t)
11875                              || (TREE_CODE (t) == ARRAY_TYPE
11876                                  && TYPE_DOMAIN (t) != NULL_TREE))
11877                         t = TREE_TYPE (t);
11878                       if (TREE_CODE (t) == ARRAY_TYPE)
11879                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11880                                   type,
11881                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11882                     }
11883                 }
11884
11885               if (TREE_CODE (decl) == VOID_TYPE)
11886                 {
11887                   if (result == NULL_TREE)
11888                     {
11889                       result = void_list_node;
11890                       last_result = result;
11891                     }
11892                   else
11893                     {
11894                       TREE_CHAIN (last_result) = void_list_node;
11895                       last_result = void_list_node;
11896                     }
11897                   if (chain
11898                       && (chain != void_list_node || TREE_CHAIN (chain)))
11899                     error ("`void' in parameter list must be entire list");
11900                   break;
11901                 }
11902
11903               /* Since there is a prototype, args are passed in their own types.  */
11904               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11905               if (PROMOTE_PROTOTYPES
11906                   && (TREE_CODE (type) == INTEGER_TYPE
11907                       || TREE_CODE (type) == ENUMERAL_TYPE)
11908                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11909                 DECL_ARG_TYPE (decl) = integer_type_node;
11910               if (!any_error && init)
11911                 {
11912                   any_init++;
11913                   init = check_default_argument (decl, init);
11914                 }
11915               else
11916                 init = NULL_TREE;
11917
11918               if (decls == NULL_TREE)
11919                 {
11920                   decls = decl;
11921                   last_decl = decls;
11922                 }
11923               else
11924                 {
11925                   TREE_CHAIN (last_decl) = decl;
11926                   last_decl = decl;
11927                 }
11928               list_node = tree_cons (init, type, NULL_TREE);
11929               if (result == NULL_TREE)
11930                 {
11931                   result = list_node;
11932                   last_result = result;
11933                 }
11934               else
11935                 {
11936                   TREE_CHAIN (last_result) = list_node;
11937                   last_result = list_node;
11938                 }
11939             }
11940           if (last_result)
11941             TREE_CHAIN (last_result) = NULL_TREE;
11942           /* If there are no parameters, and the function does not end
11943              with `...', then last_decl will be NULL_TREE.  */
11944           if (last_decl != NULL_TREE)
11945             TREE_CHAIN (last_decl) = NULL_TREE;
11946         }
11947     }
11948
11949   last_function_parms = decls;
11950
11951   return result;
11952 }
11953
11954 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11955    FUNCTION_TYPE with the newly parsed version of its default argument, which
11956    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11957
11958 void
11959 replace_defarg (arg, init)
11960      tree arg, init;
11961 {
11962   if (! processing_template_decl
11963       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11964     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11965                 TREE_TYPE (init), TREE_VALUE (arg));
11966   TREE_PURPOSE (arg) = init;
11967 }
11968 \f
11969 /* D is a constructor or overloaded `operator='.  Returns non-zero if
11970    D's arguments allow it to be a copy constructor, or copy assignment
11971    operator.  */
11972
11973 int
11974 copy_args_p (d)
11975      tree d;
11976 {
11977   tree t;
11978
11979   if (!DECL_FUNCTION_MEMBER_P (d))
11980     return 0;
11981
11982   t = FUNCTION_ARG_CHAIN (d);
11983   if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
11984     t = TREE_CHAIN (t);
11985   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11986       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11987           == DECL_CONTEXT (d))
11988       && (TREE_CHAIN (t) == NULL_TREE
11989           || TREE_CHAIN (t) == void_list_node
11990           || TREE_PURPOSE (TREE_CHAIN (t))))
11991     return 1;
11992   return 0;
11993 }
11994
11995 /* These memoizing functions keep track of special properties which
11996    a class may have.  `grok_ctor_properties' notices whether a class
11997    has a constructor of the form X(X&), and also complains
11998    if the class has a constructor of the form X(X).
11999    `grok_op_properties' takes notice of the various forms of
12000    operator= which are defined, as well as what sorts of type conversion
12001    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
12002
12003 int
12004 grok_ctor_properties (ctype, decl)
12005      tree ctype, decl;
12006 {
12007   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12008   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12009
12010   /* When a type has virtual baseclasses, a magical first int argument is
12011      added to any ctor so we can tell if the class has been initialized
12012      yet.  This could screw things up in this function, so we deliberately
12013      ignore the leading int if we're in that situation.  */
12014   if (DECL_HAS_IN_CHARGE_PARM_P (decl))
12015     {
12016       my_friendly_assert (parmtypes
12017                           && TREE_VALUE (parmtypes) == integer_type_node,
12018                           980529);
12019       parmtypes = TREE_CHAIN (parmtypes);
12020       parmtype = TREE_VALUE (parmtypes);
12021     }
12022
12023   /* [class.copy]
12024
12025      A non-template constructor for class X is a copy constructor if
12026      its first parameter is of type X&, const X&, volatile X& or const
12027      volatile X&, and either there are no other parameters or else all
12028      other parameters have default arguments.  */
12029   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12030       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12031       && (TREE_CHAIN (parmtypes) == NULL_TREE
12032           || TREE_CHAIN (parmtypes) == void_list_node
12033           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12034       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12035            && is_member_template (DECL_TI_TEMPLATE (decl))))
12036     {
12037       TYPE_HAS_INIT_REF (ctype) = 1;
12038       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12039         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12040     }
12041   /* [class.copy]
12042
12043      A declaration of a constructor for a class X is ill-formed if its
12044      first parameter is of type (optionally cv-qualified) X and either
12045      there are no other parameters or else all other parameters have
12046      default arguments.
12047
12048      We *don't* complain about member template instantiations that
12049      have this form, though; they can occur as we try to decide what
12050      constructor to use during overload resolution.  Since overload
12051      resolution will never prefer such a constructor to the
12052      non-template copy constructor (which is either explicitly or
12053      implicitly defined), there's no need to worry about their
12054      existence.  Theoretically, they should never even be
12055      instantiated, but that's hard to forestall.  */
12056   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12057            && (TREE_CHAIN (parmtypes) == NULL_TREE
12058                || TREE_CHAIN (parmtypes) == void_list_node
12059                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12060            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12061                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12062     {
12063       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12064                 ctype, ctype);
12065       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12066       return 0;
12067     }
12068   else if (TREE_CODE (parmtype) == VOID_TYPE
12069            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12070     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12071
12072   return 1;
12073 }
12074
12075 /* An operator with this name can be either unary or binary.  */
12076
12077 static int
12078 ambi_op_p (name)
12079      tree name;
12080 {
12081   return (name == ansi_opname [(int) INDIRECT_REF]
12082           || name == ansi_opname [(int) ADDR_EXPR]
12083           || name == ansi_opname [(int) NEGATE_EXPR]
12084           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12085           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12086           || name == ansi_opname [(int) CONVERT_EXPR]);
12087 }
12088
12089 /* An operator with this name can only be unary.  */
12090
12091 static int
12092 unary_op_p (name)
12093      tree name;
12094 {
12095   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12096           || name == ansi_opname [(int) BIT_NOT_EXPR]
12097           || name == ansi_opname [(int) COMPONENT_REF]
12098           || IDENTIFIER_TYPENAME_P (name));
12099 }
12100
12101 /* Do a little sanity-checking on how they declared their operator.  */
12102
12103 void
12104 grok_op_properties (decl, virtualp, friendp)
12105      tree decl;
12106      int virtualp, friendp;
12107 {
12108   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12109   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12110   tree name = DECL_NAME (decl);
12111
12112   if (current_class_type == NULL_TREE)
12113     friendp = 1;
12114
12115   if (! friendp)
12116     {
12117       /* [class.copy]
12118
12119          A user-declared copy assignment operator X::operator= is a
12120          non-static non-template member function of class X with
12121          exactly one parameter of type X, X&, const X&, volatile X& or
12122          const volatile X&.  */
12123       if (name == ansi_opname[(int) MODIFY_EXPR]
12124           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12125                && is_member_template (DECL_TI_TEMPLATE (decl))))
12126         ;
12127       else if (name == ansi_opname[(int) CALL_EXPR])
12128         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12129       else if (name == ansi_opname[(int) ARRAY_REF])
12130         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12131       else if (name == ansi_opname[(int) COMPONENT_REF]
12132                || name == ansi_opname[(int) MEMBER_REF])
12133         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12134       else if (name == ansi_opname[(int) NEW_EXPR])
12135         TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12136       else if (name == ansi_opname[(int) DELETE_EXPR])
12137         TYPE_GETS_DELETE (current_class_type) |= 1;
12138       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12139         TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12140       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12141         TYPE_GETS_DELETE (current_class_type) |= 2;
12142     }
12143
12144   if (name == ansi_opname[(int) NEW_EXPR]
12145       || name == ansi_opname[(int) VEC_NEW_EXPR])
12146     {
12147       /* When the compiler encounters the definition of A::operator new, it
12148          doesn't look at the class declaration to find out if it's static.  */
12149       if (methodp)
12150         revert_static_member_fn (decl);
12151
12152       /* Take care of function decl if we had syntax errors.  */
12153       if (argtypes == NULL_TREE)
12154         TREE_TYPE (decl)
12155           = build_function_type (ptr_type_node,
12156                                  hash_tree_chain (integer_type_node,
12157                                                   void_list_node));
12158       else
12159         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12160     }
12161   else if (name == ansi_opname[(int) DELETE_EXPR]
12162            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12163     {
12164       if (methodp)
12165         revert_static_member_fn (decl);
12166
12167       if (argtypes == NULL_TREE)
12168         TREE_TYPE (decl)
12169           = build_function_type (void_type_node,
12170                                  hash_tree_chain (ptr_type_node,
12171                                                   void_list_node));
12172       else
12173         TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12174     }
12175   else
12176     {
12177       /* An operator function must either be a non-static member function
12178          or have at least one parameter of a class, a reference to a class,
12179          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12180       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12181         {
12182           if (IDENTIFIER_TYPENAME_P (name)
12183               || name == ansi_opname[(int) CALL_EXPR]
12184               || name == ansi_opname[(int) MODIFY_EXPR]
12185               || name == ansi_opname[(int) COMPONENT_REF]
12186               || name == ansi_opname[(int) ARRAY_REF])
12187             cp_error ("`%D' must be a nonstatic member function", decl);
12188           else
12189             {
12190               tree p = argtypes;
12191
12192               if (DECL_STATIC_FUNCTION_P (decl))
12193                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12194
12195               if (p)
12196                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12197                   {
12198                     tree arg = TREE_VALUE (p);
12199                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12200                       arg = TREE_TYPE (arg);
12201
12202                     /* This lets bad template code slip through.  */
12203                     if (IS_AGGR_TYPE (arg)
12204                         || TREE_CODE (arg) == ENUMERAL_TYPE
12205                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12206                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12207                       goto foundaggr;
12208                   }
12209               cp_error
12210                 ("`%D' must have an argument of class or enumerated type",
12211                  decl);
12212             foundaggr:
12213               ;
12214             }
12215         }
12216
12217       if (name == ansi_opname[(int) CALL_EXPR])
12218         return;                 /* No restrictions on args. */
12219
12220       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12221         {
12222           tree t = TREE_TYPE (name);
12223           if (! friendp)
12224             {
12225               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12226               const char *what = 0;
12227               
12228               if (ref)
12229                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12230
12231               if (TREE_CODE (t) == VOID_TYPE)
12232                 what = "void";
12233               else if (t == current_class_type)
12234                 what = "the same type";
12235               /* Don't force t to be complete here.  */
12236               else if (IS_AGGR_TYPE (t)
12237                        && COMPLETE_TYPE_P (t)
12238                        && DERIVED_FROM_P (t, current_class_type))
12239                 what = "a base class";
12240
12241               if (what)
12242                 warning ("conversion to %s%s will never use a type conversion operator",
12243                          ref ? "a reference to " : "", what);
12244             }
12245         }
12246
12247       if (name == ansi_opname[(int) MODIFY_EXPR])
12248         {
12249           tree parmtype;
12250
12251           if (list_length (argtypes) != 3 && methodp)
12252             {
12253               cp_error ("`%D' must take exactly one argument", decl);
12254               return;
12255             }
12256           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12257
12258           if (copy_assignment_arg_p (parmtype, virtualp)
12259               && ! friendp)
12260             {
12261               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12262               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12263                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12264                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12265             }
12266         }
12267       else if (name == ansi_opname[(int) COND_EXPR])
12268         {
12269           /* 13.4.0.3 */
12270           cp_error ("ISO C++ prohibits overloading operator ?:");
12271         }
12272       else if (ambi_op_p (name))
12273         {
12274           if (list_length (argtypes) == 2)
12275             /* prefix */;
12276           else if (list_length (argtypes) == 3)
12277             {
12278               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12279                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12280                   && ! processing_template_decl
12281                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12282                 {
12283                   if (methodp)
12284                     cp_error ("postfix `%D' must take `int' as its argument",
12285                               decl);
12286                   else
12287                     cp_error
12288                       ("postfix `%D' must take `int' as its second argument",
12289                        decl);
12290                 }
12291             }
12292           else
12293             {
12294               if (methodp)
12295                 cp_error ("`%D' must take either zero or one argument", decl);
12296               else
12297                 cp_error ("`%D' must take either one or two arguments", decl);
12298             }
12299
12300           /* More Effective C++ rule 6.  */
12301           if (warn_ecpp
12302               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12303                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12304             {
12305               tree arg = TREE_VALUE (argtypes);
12306               tree ret = TREE_TYPE (TREE_TYPE (decl));
12307               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12308                 arg = TREE_TYPE (arg);
12309               arg = TYPE_MAIN_VARIANT (arg);
12310               if (list_length (argtypes) == 2)
12311                 {
12312                   if (TREE_CODE (ret) != REFERENCE_TYPE
12313                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12314                                        arg))
12315                     cp_warning ("prefix `%D' should return `%T'", decl,
12316                                 build_reference_type (arg));
12317                 }
12318               else
12319                 {
12320                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12321                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12322                 }
12323             }
12324         }
12325       else if (unary_op_p (name))
12326         {
12327           if (list_length (argtypes) != 2)
12328             {
12329               if (methodp)
12330                 cp_error ("`%D' must take `void'", decl);
12331               else
12332                 cp_error ("`%D' must take exactly one argument", decl);
12333             }
12334         }
12335       else /* if (binary_op_p (name)) */
12336         {
12337           if (list_length (argtypes) != 3)
12338             {
12339               if (methodp)
12340                 cp_error ("`%D' must take exactly one argument", decl);
12341               else
12342                 cp_error ("`%D' must take exactly two arguments", decl);
12343             }
12344
12345           /* More Effective C++ rule 7.  */
12346           if (warn_ecpp
12347               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12348                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12349                   || name == ansi_opname [COMPOUND_EXPR]))
12350             cp_warning ("user-defined `%D' always evaluates both arguments",
12351                         decl);
12352         }
12353
12354       /* Effective C++ rule 23.  */
12355       if (warn_ecpp
12356           && list_length (argtypes) == 3
12357           && (name == ansi_opname [PLUS_EXPR]
12358               || name == ansi_opname [MINUS_EXPR]
12359               || name == ansi_opname [TRUNC_DIV_EXPR]
12360               || name == ansi_opname [MULT_EXPR])
12361           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12362         cp_warning ("`%D' should return by value", decl);
12363
12364       /* 13.4.0.8 */
12365       if (argtypes)
12366         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12367           if (TREE_PURPOSE (argtypes))
12368             {
12369               TREE_PURPOSE (argtypes) = NULL_TREE;
12370               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12371                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12372                 {
12373                   if (pedantic)
12374                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12375                 }
12376               else
12377                 cp_error ("`%D' cannot have default arguments", decl);
12378             }
12379     }
12380 }
12381 \f
12382 static const char *
12383 tag_name (code)
12384      enum tag_types code;
12385 {
12386   switch (code)
12387     {
12388     case record_type:
12389       return "struct";
12390     case class_type:
12391       return "class";
12392     case union_type:
12393       return "union ";
12394     case enum_type:
12395       return "enum";
12396     default:
12397       my_friendly_abort (981122);
12398     }
12399 }
12400
12401 /* Get the struct, enum or union (CODE says which) with tag NAME.
12402    Define the tag as a forward-reference if it is not defined.
12403
12404    C++: If a class derivation is given, process it here, and report
12405    an error if multiple derivation declarations are not identical.
12406
12407    If this is a definition, come in through xref_tag and only look in
12408    the current frame for the name (since C++ allows new names in any
12409    scope.)  */
12410
12411 tree
12412 xref_tag (code_type_node, name, globalize)
12413      tree code_type_node;
12414      tree name;
12415      int globalize;
12416 {
12417   enum tag_types tag_code;
12418   enum tree_code code;
12419   register tree ref, t;
12420   struct binding_level *b = current_binding_level;
12421   int got_type = 0;
12422   tree attributes = NULL_TREE;
12423   tree context = NULL_TREE;
12424
12425   /* If we are called from the parser, code_type_node will sometimes be a
12426      TREE_LIST.  This indicates that the user wrote
12427      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12428      use them later.  */
12429   if (TREE_CODE (code_type_node) == TREE_LIST)
12430     {
12431       attributes = TREE_PURPOSE (code_type_node);
12432       code_type_node = TREE_VALUE (code_type_node);
12433     }
12434
12435   tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12436   switch (tag_code)
12437     {
12438     case record_type:
12439     case class_type:
12440       code = RECORD_TYPE;
12441       break;
12442     case union_type:
12443       code = UNION_TYPE;
12444       break;
12445     case enum_type:
12446       code = ENUMERAL_TYPE;
12447       break;
12448     default:
12449       my_friendly_abort (18);
12450     }
12451
12452   /* If a cross reference is requested, look up the type
12453      already defined for this tag and return it.  */
12454   if (TYPE_P (name))
12455     {
12456       t = name;
12457       name = TYPE_IDENTIFIER (t);
12458       got_type = 1;
12459     }
12460   else
12461     t = IDENTIFIER_TYPE_VALUE (name);
12462
12463   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12464       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12465     t = NULL_TREE;
12466
12467   if (! globalize)
12468     {
12469       /* If we know we are defining this tag, only look it up in
12470          this scope and don't try to find it as a type.  */
12471       ref = lookup_tag (code, name, b, 1);
12472     }
12473   else
12474     {
12475       if (t)
12476         {
12477           /* [dcl.type.elab] If the identifier resolves to a
12478              typedef-name or a template type-parameter, the
12479              elaborated-type-specifier is ill-formed.  */
12480           if (t != TYPE_MAIN_VARIANT (t)
12481               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12482             cp_pedwarn ("using typedef-name `%D' after `%s'",
12483                         TYPE_NAME (t), tag_name (tag_code));
12484           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12485             cp_error ("using template type parameter `%T' after `%s'",
12486                       t, tag_name (tag_code));
12487
12488           ref = t;
12489         }
12490       else
12491         ref = lookup_tag (code, name, b, 0);
12492
12493       if (! ref)
12494         {
12495           /* Try finding it as a type declaration.  If that wins,
12496              use it.  */
12497           ref = lookup_name (name, 1);
12498
12499           if (ref != NULL_TREE
12500               && processing_template_decl
12501               && DECL_CLASS_TEMPLATE_P (ref)
12502               && template_class_depth (current_class_type) == 0)
12503             /* Since GLOBALIZE is true, we're declaring a global
12504                template, so we want this type.  */
12505             ref = DECL_TEMPLATE_RESULT (ref);
12506
12507           if (ref && TREE_CODE (ref) == TYPE_DECL
12508               && TREE_CODE (TREE_TYPE (ref)) == code)
12509             ref = TREE_TYPE (ref);
12510           else
12511             ref = NULL_TREE;
12512         }
12513
12514       if (ref && current_class_type
12515           && template_class_depth (current_class_type)
12516           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12517         {
12518           /* Since GLOBALIZE is non-zero, we are not looking at a
12519              definition of this tag.  Since, in addition, we are currently
12520              processing a (member) template declaration of a template
12521              class, we must be very careful; consider:
12522
12523                template <class X>
12524                struct S1
12525
12526                template <class U>
12527                struct S2
12528                { template <class V>
12529                friend struct S1; };
12530
12531              Here, the S2::S1 declaration should not be confused with the
12532              outer declaration.  In particular, the inner version should
12533              have a template parameter of level 2, not level 1.  This
12534              would be particularly important if the member declaration
12535              were instead:
12536
12537                template <class V = U> friend struct S1;
12538
12539              say, when we should tsubst into `U' when instantiating
12540              S2.  On the other hand, when presented with:
12541
12542                  template <class T>
12543                  struct S1 {
12544                    template <class U>
12545                    struct S2 {};
12546                    template <class U>
12547                    friend struct S2;
12548                  };
12549
12550               we must find the inner binding eventually.  We
12551               accomplish this by making sure that the new type we
12552               create to represent this declaration has the right
12553               TYPE_CONTEXT.  */
12554           context = TYPE_CONTEXT (ref);
12555           ref = NULL_TREE;
12556         }
12557     }
12558
12559   if (! ref)
12560     {
12561       /* If no such tag is yet defined, create a forward-reference node
12562          and record it as the "definition".
12563          When a real declaration of this type is found,
12564          the forward-reference will be altered into a real type.  */
12565       if (code == ENUMERAL_TYPE)
12566         {
12567           cp_error ("use of enum `%#D' without previous declaration", name);
12568
12569           ref = make_node (ENUMERAL_TYPE);
12570
12571           /* Give the type a default layout like unsigned int
12572              to avoid crashing if it does not get defined.  */
12573           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12574           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12575           TREE_UNSIGNED (ref) = 1;
12576           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12577           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12578           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12579
12580           /* Enable us to recognize when a type is created in class context.
12581              To do nested classes correctly, this should probably be cleared
12582              out when we leave this classes scope.  Currently this in only
12583              done in `start_enum'.  */
12584
12585           pushtag (name, ref, globalize);
12586         }
12587       else
12588         {
12589           struct binding_level *old_b = class_binding_level;
12590
12591           ref = make_aggr_type (code);
12592           TYPE_CONTEXT (ref) = context;
12593
12594 #ifdef NONNESTED_CLASSES
12595           /* Class types don't nest the way enums do.  */
12596           class_binding_level = (struct binding_level *)0;
12597 #endif
12598           pushtag (name, ref, globalize);
12599           class_binding_level = old_b;
12600         }
12601     }
12602   else
12603     {
12604       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12605         redeclare_class_template (ref, current_template_parms);
12606     }
12607
12608   /* Until the type is defined, tentatively accept whatever
12609      structure tag the user hands us.  */
12610   if (!COMPLETE_TYPE_P (ref)
12611       && ref != current_class_type
12612       /* Have to check this, in case we have contradictory tag info.  */
12613       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12614     {
12615       if (tag_code == class_type)
12616         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12617       else if (tag_code == record_type)
12618         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12619     }
12620
12621   TREE_TYPE (ref) = attributes;
12622
12623   return ref;
12624 }
12625
12626 tree
12627 xref_tag_from_type (old, id, globalize)
12628      tree old, id;
12629      int globalize;
12630 {
12631   tree code_type_node;
12632
12633   if (TREE_CODE (old) == RECORD_TYPE)
12634     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12635                       ? class_type_node : record_type_node);
12636   else
12637     code_type_node = union_type_node;
12638
12639   if (id == NULL_TREE)
12640     id = TYPE_IDENTIFIER (old);
12641
12642   return xref_tag (code_type_node, id, globalize);
12643 }
12644
12645 /* REF is a type (named NAME), for which we have just seen some
12646    baseclasses.  BINFO is a list of those baseclasses; the
12647    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12648    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12649    struct, or union.  */
12650
12651 void
12652 xref_basetypes (code_type_node, name, ref, binfo)
12653      tree code_type_node;
12654      tree name, ref;
12655      tree binfo;
12656 {
12657   /* In the declaration `A : X, Y, ... Z' we mark all the types
12658      (A, X, Y, ..., Z) so we can check for duplicates.  */
12659   tree binfos;
12660   tree base;
12661
12662   int i, len;
12663   enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12664
12665   if (tag_code == union_type)
12666     {
12667       cp_error ("derived union `%T' invalid", ref);
12668       return;
12669     }
12670
12671   len = list_length (binfo);
12672
12673   /* First, make sure that any templates in base-classes are
12674      instantiated.  This ensures that if we call ourselves recursively
12675      we do not get confused about which classes are marked and which
12676      are not.  */
12677   for (base = binfo; base; base = TREE_CHAIN (base))
12678     complete_type (TREE_VALUE (base));
12679
12680   SET_CLASSTYPE_MARKED (ref);
12681   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12682
12683   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12684     {
12685       /* The base of a derived struct is public by default.  */
12686       int via_public
12687         = (TREE_PURPOSE (binfo) == access_public_node
12688            || TREE_PURPOSE (binfo) == access_public_virtual_node
12689            || (tag_code != class_type
12690                && (TREE_PURPOSE (binfo) == access_default_node
12691                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12692       int via_protected
12693         = (TREE_PURPOSE (binfo) == access_protected_node
12694            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12695       int via_virtual
12696         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12697            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12698            || TREE_PURPOSE (binfo) == access_public_virtual_node
12699            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12700       tree basetype = TREE_VALUE (binfo);
12701       tree base_binfo;
12702
12703       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12704         basetype = TREE_TYPE (basetype);
12705       if (!basetype
12706           || (TREE_CODE (basetype) != RECORD_TYPE
12707               && TREE_CODE (basetype) != TYPENAME_TYPE
12708               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12709               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12710         {
12711           cp_error ("base type `%T' fails to be a struct or class type",
12712                     TREE_VALUE (binfo));
12713           continue;
12714         }
12715
12716       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12717
12718       /* This code replaces similar code in layout_basetypes.
12719          We put the complete_type first for implicit `typename'.  */
12720       if (!COMPLETE_TYPE_P (basetype)
12721           && ! (current_template_parms && uses_template_parms (basetype)))
12722         {
12723           cp_error ("base class `%T' has incomplete type", basetype);
12724           continue;
12725         }
12726       else
12727         {
12728           if (CLASSTYPE_MARKED (basetype))
12729             {
12730               if (basetype == ref)
12731                 cp_error ("recursive type `%T' undefined", basetype);
12732               else
12733                 cp_error ("duplicate base type `%T' invalid", basetype);
12734               continue;
12735             }
12736
12737           if (TYPE_FOR_JAVA (basetype)
12738               && (current_lang_stack
12739                   == &VARRAY_TREE (current_lang_base, 0)))
12740             TYPE_FOR_JAVA (ref) = 1;
12741
12742           /* Note that the BINFO records which describe individual
12743              inheritances are *not* shared in the lattice!  They
12744              cannot be shared because a given baseclass may be
12745              inherited with different `accessibility' by different
12746              derived classes.  (Each BINFO record describing an
12747              individual inheritance contains flags which say what
12748              the `accessibility' of that particular inheritance is.)  */
12749
12750           base_binfo
12751             = make_binfo (size_zero_node, basetype,
12752                           CLASS_TYPE_P (basetype)
12753                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12754                           CLASS_TYPE_P (basetype)
12755                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12756
12757           TREE_VEC_ELT (binfos, i) = base_binfo;
12758           TREE_VIA_PUBLIC (base_binfo) = via_public;
12759           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12760           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12761           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12762
12763           /* We need to unshare the binfos now so that lookups during class
12764              definition work.  */
12765           unshare_base_binfos (base_binfo);
12766
12767           SET_CLASSTYPE_MARKED (basetype);
12768
12769           /* We are free to modify these bits because they are meaningless
12770              at top level, and BASETYPE is a top-level type.  */
12771           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12772             {
12773               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12774               /* Converting to a virtual base class requires looking
12775                  up the offset of the virtual base.  */
12776               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12777             }
12778
12779           if (CLASS_TYPE_P (basetype))
12780             {
12781               TYPE_HAS_NEW_OPERATOR (ref) 
12782                 |= TYPE_HAS_NEW_OPERATOR (basetype);
12783               TYPE_HAS_ARRAY_NEW_OPERATOR (ref) 
12784                 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12785               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12786               /* If the base-class uses multiple inheritance, so do we.  */
12787               TYPE_USES_MULTIPLE_INHERITANCE (ref)
12788                 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12789               /* Likewise, if converting to a base of the base may require
12790                  code, then we may need to generate code to convert to a
12791                  base as well.  */
12792               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
12793                 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
12794             }
12795
12796           i += 1;
12797         }
12798     }
12799   if (i)
12800     TREE_VEC_LENGTH (binfos) = i;
12801   else
12802     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12803
12804   if (i > 1)
12805     {
12806       TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12807       /* If there is more than one non-empty they cannot be at the same
12808          address.  */
12809       TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12810     }
12811
12812   /* Unmark all the types.  */
12813   while (--i >= 0)
12814     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12815   CLEAR_CLASSTYPE_MARKED (ref);
12816
12817   /* Now that we know all the base-classes, set up the list of virtual
12818      bases.  */
12819   get_vbase_types (ref);
12820 }
12821
12822 \f
12823 /* Begin compiling the definition of an enumeration type.
12824    NAME is its name (or null if anonymous).
12825    Returns the type object, as yet incomplete.
12826    Also records info about it so that build_enumerator
12827    may be used to declare the individual values as they are read.  */
12828
12829 tree
12830 start_enum (name)
12831      tree name;
12832 {
12833   register tree enumtype = NULL_TREE;
12834   struct binding_level *b = current_binding_level;
12835
12836   /* If this is the real definition for a previous forward reference,
12837      fill in the contents in the same object that used to be the
12838      forward reference.  */
12839
12840   if (name != NULL_TREE)
12841     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12842
12843   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12844     {
12845       cp_error ("multiple definition of `%#T'", enumtype);
12846       cp_error_at ("previous definition here", enumtype);
12847       /* Clear out TYPE_VALUES, and start again.  */
12848       TYPE_VALUES (enumtype) = NULL_TREE;
12849     }
12850   else
12851     {
12852       enumtype = make_node (ENUMERAL_TYPE);
12853       pushtag (name, enumtype, 0);
12854     }
12855
12856   if (current_class_type)
12857     TREE_ADDRESSABLE (b->tags) = 1;
12858
12859   GNU_xref_decl (current_function_decl, enumtype);
12860   return enumtype;
12861 }
12862
12863 /* After processing and defining all the values of an enumeration type,
12864    install their decls in the enumeration type and finish it off.
12865    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12866    Returns ENUMTYPE.  */
12867
12868 tree
12869 finish_enum (enumtype)
12870      tree enumtype;
12871 {
12872   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12873   /* Calculate the maximum value of any enumerator in this type.  */
12874
12875   tree values = TYPE_VALUES (enumtype);
12876   if (values)
12877     {
12878       tree pair;
12879
12880       for (pair = values; pair; pair = TREE_CHAIN (pair))
12881         {
12882           tree decl;
12883           tree value;
12884
12885           /* The TREE_VALUE is a CONST_DECL for this enumeration
12886              constant.  */
12887           decl = TREE_VALUE (pair);
12888
12889           /* [dcl.enum]
12890
12891              Following the closing brace of an enum-specifier, each
12892              enumerator has the type of its enumeration.  Prior to the
12893              closing brace, the type of each enumerator is the type of
12894              its initializing value.  */
12895           TREE_TYPE (decl) = enumtype;
12896
12897           /* The DECL_INITIAL will be NULL if we are processing a
12898              template declaration and this enumeration constant had no
12899              explicit initializer.  */
12900           value = DECL_INITIAL (decl);
12901           if (value && !processing_template_decl)
12902             {
12903               /* Set the TREE_TYPE for the VALUE as well.  That's so
12904                  that when we call decl_constant_value we get an
12905                  entity of the right type (but with the constant
12906                  value).  Since we shouldn't ever call
12907                  decl_constant_value on a template type, there's no
12908                  reason to do that when processing_template_decl.
12909                  And, if the expression is something like a
12910                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12911                  wreak havoc on the intended type of the expression.
12912
12913                  Of course, there's also no point in trying to compute
12914                  minimum or maximum values if we're in a template.  */
12915               TREE_TYPE (value) = enumtype;
12916
12917               if (!minnode)
12918                 minnode = maxnode = value;
12919               else if (tree_int_cst_lt (maxnode, value))
12920                 maxnode = value;
12921               else if (tree_int_cst_lt (value, minnode))
12922                 minnode = value;
12923             }
12924
12925           if (processing_template_decl)
12926             /* If this is just a template, leave the CONST_DECL
12927                alone.  That way tsubst_copy will find CONST_DECLs for
12928                CONST_DECLs, and not INTEGER_CSTs.  */
12929             ;
12930           else
12931             /* In the list we're building up, we want the enumeration
12932                values, not the CONST_DECLs.  */
12933             TREE_VALUE (pair) = value;
12934         }
12935     }
12936   else
12937     maxnode = minnode = integer_zero_node;
12938
12939   TYPE_VALUES (enumtype) = nreverse (values);
12940
12941   if (processing_template_decl)
12942     {
12943       tree scope = current_scope ();
12944       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12945         add_tree (build_min (TAG_DEFN, enumtype));
12946     }
12947   else
12948     {
12949       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12950       int lowprec = min_precision (minnode, unsignedp);
12951       int highprec = min_precision (maxnode, unsignedp);
12952       int precision = MAX (lowprec, highprec);
12953       tree tem;
12954
12955       TYPE_SIZE (enumtype) = NULL_TREE;
12956
12957       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12958
12959       TYPE_PRECISION (enumtype) = precision;
12960       if (unsignedp)
12961         fixup_unsigned_type (enumtype);
12962       else
12963         fixup_signed_type (enumtype);
12964
12965       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12966         /* Use the width of the narrowest normal C type which is wide
12967            enough.  */
12968         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12969                                                     (precision, 1));
12970       else
12971         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12972
12973       TYPE_SIZE (enumtype) = 0;
12974       layout_type (enumtype);
12975
12976       /* Fix up all variant types of this enum type.  */
12977       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12978            tem = TYPE_NEXT_VARIANT (tem))
12979         {
12980           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12981           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12982           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12983           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12984           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12985           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12986           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12987           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12988           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12989         }
12990
12991       /* Finish debugging output for this type.  */
12992       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12993     }
12994
12995   return enumtype;
12996 }
12997
12998 /* Build and install a CONST_DECL for an enumeration constant of the
12999    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13000    Assignment of sequential values by default is handled here.  */
13001
13002 void
13003 build_enumerator (name, value, enumtype)
13004      tree name;
13005      tree value;
13006      tree enumtype;
13007 {
13008   tree decl;
13009   tree context;
13010   tree type;
13011   tree values;
13012
13013   /* Remove no-op casts from the value.  */
13014   if (value)
13015     STRIP_TYPE_NOPS (value);
13016
13017   if (! processing_template_decl)
13018     {
13019       /* Validate and default VALUE.  */
13020       if (value != NULL_TREE)
13021         {
13022           if (TREE_READONLY_DECL_P (value))
13023             value = decl_constant_value (value);
13024
13025           if (TREE_CODE (value) == INTEGER_CST)
13026             {
13027               value = default_conversion (value);
13028               constant_expression_warning (value);
13029             }
13030           else
13031             {
13032               cp_error ("enumerator value for `%D' not integer constant", name);
13033               value = NULL_TREE;
13034             }
13035         }
13036
13037       /* Default based on previous value.  */
13038       if (value == NULL_TREE && ! processing_template_decl)
13039         {
13040           tree prev_value;
13041
13042           if (TYPE_VALUES (enumtype))
13043             {
13044               /* The next value is the previous value ... */
13045               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13046               /* ... plus one.  */
13047               value = build_binary_op (PLUS_EXPR,
13048                                        prev_value,
13049                                        integer_one_node);
13050
13051               if (tree_int_cst_lt (value, prev_value))
13052                 cp_error ("overflow in enumeration values at `%D'", name);
13053             }
13054           else
13055             value = integer_zero_node;
13056         }
13057
13058       /* Remove no-op casts from the value.  */
13059       if (value)
13060         STRIP_TYPE_NOPS (value);
13061 #if 0
13062       /* To fix MAX_VAL enum consts. (bkoz)  */
13063       TREE_TYPE (value) = integer_type_node;
13064 #endif
13065     }
13066
13067   /* We always have to copy here; not all INTEGER_CSTs are unshared.
13068      Even in other cases, we will later (in finish_enum) be setting
13069      the type of VALUE.  But, we don't need to make a copy if this
13070      VALUE is one of the enumeration constants for this same
13071      enumeration type.  */
13072   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13073     if (TREE_VALUE (values) == value)
13074       break;
13075   /* If we didn't break out of the loop, then we do need a copy.  */
13076   if (!values && value)
13077     value = copy_node (value);
13078
13079   /* C++ associates enums with global, function, or class declarations.  */
13080   context = current_scope ();
13081
13082   /* Build the actual enumeration constant.  Note that the enumeration
13083     constants have the type of their initializers until the
13084     enumeration is complete:
13085
13086       [ dcl.enum ]
13087
13088       Following the closing brace of an enum-specifier, each enumer-
13089       ator has the type of its enumeration.  Prior to the closing
13090       brace, the type of each enumerator is the type of its
13091       initializing value.
13092
13093     In finish_enum we will reset the type.  Of course, if we're
13094     processing a template, there may be no value.   */
13095   type = value ? TREE_TYPE (value) : NULL_TREE;
13096
13097   if (context && context == current_class_type)
13098     /* This enum declaration is local to the class.  We need the full
13099       lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
13100     decl = build_lang_decl (CONST_DECL, name, type);
13101   else
13102     /* It's a global enum, or it's local to a function.  (Note local to
13103       a function could mean local to a class method.  */
13104     decl = build_decl (CONST_DECL, name, type);
13105
13106   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13107   DECL_INITIAL (decl) = value;
13108   TREE_READONLY (decl) = 1;
13109
13110   if (context && context == current_class_type)
13111     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13112       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13113       things like `S::i' later.)  */
13114     finish_member_declaration (decl);
13115   else
13116     {
13117       pushdecl (decl);
13118       GNU_xref_decl (current_function_decl, decl);
13119     }
13120
13121   /* Add this enumeration constant to the list for this type.  */
13122   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13123 }
13124
13125 \f
13126 static int function_depth;
13127
13128 /* We're defining DECL.  Make sure that it's type is OK.  */
13129
13130 static void
13131 check_function_type (decl)
13132      tree decl;
13133 {
13134   tree fntype = TREE_TYPE (decl);
13135   tree return_type = complete_type (TREE_TYPE (fntype));
13136
13137   /* In a function definition, arg types must be complete.  */
13138   require_complete_types_for_parms (current_function_parms);
13139
13140   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13141     {
13142       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13143
13144       /* Make it return void instead, but don't change the
13145          type of the DECL_RESULT, in case we have a named return value.  */
13146       if (TREE_CODE (fntype) == METHOD_TYPE)
13147         {
13148           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13149           TREE_TYPE (decl)
13150             = build_cplus_method_type (ctype,
13151                                        void_type_node,
13152                                        FUNCTION_ARG_CHAIN (decl));
13153         }
13154       else
13155         TREE_TYPE (decl)
13156           = build_function_type (void_type_node,
13157                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
13158       TREE_TYPE (decl)
13159         = build_exception_variant (fntype,
13160                                    TYPE_RAISES_EXCEPTIONS (fntype));
13161     }
13162   else
13163     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13164 }
13165
13166 /* Create the FUNCTION_DECL for a function definition.
13167    DECLSPECS and DECLARATOR are the parts of the declaration;
13168    they describe the function's name and the type it returns,
13169    but twisted together in a fashion that parallels the syntax of C.
13170
13171    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13172    DECLARATOR is really the DECL for the function we are about to
13173    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13174    indicating that the function is an inline defined in-class, and
13175    SF_EXPAND indicating that we should generate RTL for this
13176    function.
13177
13178    This function creates a binding context for the function body
13179    as well as setting up the FUNCTION_DECL in current_function_decl.
13180
13181    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13182    (it defines a datum instead), we return 0, which tells
13183    yyparse to report a parse error.
13184
13185    For C++, we must first check whether that datum makes any sense.
13186    For example, "class A local_a(1,2);" means that variable local_a
13187    is an aggregate of type A, which should have a constructor
13188    applied to it with the argument list [1, 2].  */
13189
13190 int
13191 start_function (declspecs, declarator, attrs, flags)
13192      tree declspecs, declarator, attrs;
13193      int flags;
13194 {
13195   tree decl1;
13196   tree ctype = NULL_TREE;
13197   tree fntype;
13198   tree restype;
13199   extern int have_extern_spec;
13200   extern int used_extern_spec;
13201   int doing_friend = 0;
13202   struct binding_level *bl;
13203
13204   /* Sanity check.  */
13205   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13206   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13207
13208   /* This should only be done once on the top most decl.  */
13209   if (have_extern_spec && !used_extern_spec)
13210     {
13211       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13212       used_extern_spec = 1;
13213     }
13214
13215   if (flags & SF_PRE_PARSED)
13216     {
13217       decl1 = declarator;
13218
13219       fntype = TREE_TYPE (decl1);
13220       if (TREE_CODE (fntype) == METHOD_TYPE)
13221         ctype = TYPE_METHOD_BASETYPE (fntype);
13222
13223       /* ISO C++ 11.4/5.  A friend function defined in a class is in
13224          the (lexical) scope of the class in which it is defined.  */
13225       if (!ctype && DECL_FRIEND_P (decl1))
13226         {
13227           ctype = DECL_FRIEND_CONTEXT (decl1);
13228
13229           /* CTYPE could be null here if we're dealing with a template;
13230              for example, `inline friend float foo()' inside a template
13231              will have no CTYPE set.  */
13232           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13233             ctype = NULL_TREE;
13234           else
13235             doing_friend = 1;
13236         }
13237
13238       last_function_parms = DECL_ARGUMENTS (decl1);
13239       last_function_parm_tags = NULL_TREE;
13240     }
13241   else
13242     {
13243       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13244       /* If the declarator is not suitable for a function definition,
13245          cause a syntax error.  */
13246       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13247
13248       fntype = TREE_TYPE (decl1);
13249
13250       restype = TREE_TYPE (fntype);
13251       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13252         {
13253           cp_error ("semicolon missing after declaration of `%#T'", restype);
13254           shadow_tag (build_tree_list (NULL_TREE, restype));
13255           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13256           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13257             fntype = build_function_type (integer_type_node,
13258                                           TYPE_ARG_TYPES (fntype));
13259           else
13260             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13261                                               integer_type_node,
13262                                               TYPE_ARG_TYPES (fntype));
13263           TREE_TYPE (decl1) = fntype;
13264         }
13265
13266       if (TREE_CODE (fntype) == METHOD_TYPE)
13267         ctype = TYPE_METHOD_BASETYPE (fntype);
13268       else if (DECL_MAIN_P (decl1))
13269         {
13270           /* If this doesn't return integer_type, complain.  */
13271           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13272             {
13273               if (pedantic || warn_return_type)
13274                 pedwarn ("return type for `main' changed to `int'");
13275               TREE_TYPE (decl1) = fntype = default_function_type;
13276             }
13277         }
13278     }
13279
13280   /* Sometimes we don't notice that a function is a static member, and
13281      build a METHOD_TYPE for it.  Fix that up now.  */
13282   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13283       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13284     {
13285       revert_static_member_fn (decl1);
13286       last_function_parms = TREE_CHAIN (last_function_parms);
13287       ctype = NULL_TREE;
13288     }
13289
13290   /* Warn if function was previously implicitly declared
13291      (but not if we warned then).  */
13292   if (! warn_implicit
13293       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13294     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13295
13296   /* Set up current_class_type, and enter the scope of the class, if
13297      appropriate.  */
13298   if (ctype)
13299     push_nested_class (ctype, 1);
13300   else if (DECL_STATIC_FUNCTION_P (decl1))
13301     push_nested_class (DECL_CONTEXT (decl1), 2);
13302
13303   /* Now that we have entered the scope of the class, we must restore
13304      the bindings for any template parameters surrounding DECL1, if it
13305      is an inline member template.  (Order is important; consider the
13306      case where a template parameter has the same name as a field of
13307      the class.)  It is not until after this point that
13308      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13309   if (flags & SF_INCLASS_INLINE)
13310     maybe_begin_member_template_processing (decl1);
13311
13312   /* Effective C++ rule 15.  See also c_expand_return.  */
13313   if (warn_ecpp
13314       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13315       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13316     cp_warning ("`operator=' should return a reference to `*this'");
13317
13318   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13319      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13320   if (!DECL_INITIAL (decl1))
13321     DECL_INITIAL (decl1) = error_mark_node;
13322
13323 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13324   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13325 #endif
13326
13327   /* This function exists in static storage.
13328      (This does not mean `static' in the C sense!)  */
13329   TREE_STATIC (decl1) = 1;
13330
13331   /* We must call push_template_decl after current_class_type is set
13332      up.  (If we are processing inline definitions after exiting a
13333      class scope, current_class_type will be NULL_TREE until set above
13334      by push_nested_class.)  */
13335   if (processing_template_decl)
13336     decl1 = push_template_decl (decl1);
13337
13338   /* We are now in the scope of the function being defined.  */
13339   current_function_decl = decl1;
13340
13341   /* Save the parm names or decls from this function's declarator
13342      where store_parm_decls will find them.  */
13343   current_function_parms = last_function_parms;
13344   current_function_parm_tags = last_function_parm_tags;
13345
13346   /* Make sure the parameter and return types are reasonable.  When
13347      you declare a function, these types can be incomplete, but they
13348      must be complete when you define the function.  */
13349   if (! processing_template_decl)
13350     check_function_type (decl1);
13351
13352   /* Build the return declaration for the function.  */
13353   restype = TREE_TYPE (fntype);
13354   if (!processing_template_decl)
13355     {
13356       if (!DECL_RESULT (decl1))
13357         {
13358           DECL_RESULT (decl1)
13359             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13360           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13361                                       DECL_RESULT (decl1));
13362         }
13363     }
13364   else
13365     /* Just use `void'.  Nobody will ever look at this anyhow.  */
13366     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13367
13368   /* Initialize RTL machinery.  We cannot do this until
13369      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13370      even when processing a template; this is how we get
13371      CFUN set up, and our per-function variables initialized.  */
13372   bl = current_binding_level;
13373   init_function_start (decl1, input_filename, lineno);
13374   current_binding_level = bl;
13375   expanding_p = (flags & SF_EXPAND) != 0;
13376
13377   /* Even though we're inside a function body, we still don't want to
13378      call expand_expr to calculate the size of a variable-sized array.
13379      We haven't necessarily assigned RTL to all variables yet, so it's
13380      not safe to try to expand expressions involving them.  */
13381   immediate_size_expand = 0;
13382   cfun->x_dont_save_pending_sizes_p = 1;
13383
13384   /* If we're building a statement-tree, start the tree now.  */
13385   if (processing_template_decl || !expanding_p)
13386     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13387
13388   /* Let the user know we're compiling this function.  */
13389   if (processing_template_decl || !building_stmt_tree ())
13390     announce_function (decl1);
13391
13392   /* Record the decl so that the function name is defined.
13393      If we already have a decl for this name, and it is a FUNCTION_DECL,
13394      use the old decl.  */
13395   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13396     {
13397       /* A specialization is not used to guide overload resolution.  */
13398       if ((flag_guiding_decls
13399            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13400           && ! DECL_FUNCTION_MEMBER_P (decl1))
13401         decl1 = pushdecl (decl1);
13402       else
13403         {
13404           /* We need to set the DECL_CONTEXT. */
13405           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13406             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13407           /* And make sure we have enough default args.  */
13408           check_default_args (decl1);
13409         }
13410       fntype = TREE_TYPE (decl1);
13411     }
13412
13413   /* Reset these in case the call to pushdecl changed them.  */
13414   current_function_decl = decl1;
13415   cfun->decl = decl1;
13416
13417   /* Initialize the per-function data.  */
13418   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13419     {
13420       /* If we already parsed this function, and we're just expanding it
13421          now, restore saved state.  */
13422       struct binding_level *bl = current_binding_level;
13423       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13424       current_binding_level = bl;
13425
13426       /* This function is being processed in whole-function mode; we
13427          already did semantic analysis.  */
13428       cfun->x_whole_function_mode_p = 1;
13429
13430       /* If we decided that we didn't want to inline this function,
13431          make sure the back-end knows that.  */
13432       if (!current_function_cannot_inline)
13433         current_function_cannot_inline = cp_function_chain->cannot_inline;
13434
13435       /* We don't need the saved data anymore.  */
13436       free (DECL_SAVED_FUNCTION_DATA (decl1));
13437       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13438     }
13439   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13440     {
13441       /* We know that this was set up by `grokclassfn'.  We do not
13442          wait until `store_parm_decls', since evil parse errors may
13443          never get us to that point.  Here we keep the consistency
13444          between `current_class_type' and `current_class_ptr'.  */
13445       tree t = DECL_ARGUMENTS (decl1);
13446
13447       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13448                           162);
13449       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13450                           19990811);
13451
13452       cp_function_chain->x_current_class_ref
13453         = build_indirect_ref (t, NULL_PTR);
13454       cp_function_chain->x_current_class_ptr = t;
13455
13456       /* Constructors and destructors need to know whether they're "in
13457          charge" of initializing virtual base classes.  */
13458       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13459         current_in_charge_parm = TREE_CHAIN (t);
13460     }
13461
13462   if (DECL_INTERFACE_KNOWN (decl1))
13463     {
13464       tree ctx = decl_function_context (decl1);
13465
13466       if (DECL_NOT_REALLY_EXTERN (decl1))
13467         DECL_EXTERNAL (decl1) = 0;
13468
13469       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13470           && TREE_PUBLIC (ctx))
13471         /* This is a function in a local class in an extern inline
13472            function.  */
13473         comdat_linkage (decl1);
13474     }
13475   /* If this function belongs to an interface, it is public.
13476      If it belongs to someone else's interface, it is also external.
13477      This only affects inlines and template instantiations.  */
13478   else if (interface_unknown == 0
13479            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13480                || flag_alt_external_templates))
13481     {
13482       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13483           || processing_template_decl)
13484         {
13485           DECL_EXTERNAL (decl1)
13486             = (interface_only
13487                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13488                    && !DECL_VINDEX (decl1)));
13489
13490           /* For WIN32 we also want to put these in linkonce sections.  */
13491           maybe_make_one_only (decl1);
13492         }
13493       else
13494         DECL_EXTERNAL (decl1) = 0;
13495       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13496       DECL_INTERFACE_KNOWN (decl1) = 1;
13497     }
13498   else if (interface_unknown && interface_only
13499            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13500                || flag_alt_external_templates))
13501     {
13502       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13503          interface, we will have interface_only set but not
13504          interface_known.  In that case, we don't want to use the normal
13505          heuristics because someone will supply a #pragma implementation
13506          elsewhere, and deducing it here would produce a conflict.  */
13507       comdat_linkage (decl1);
13508       DECL_EXTERNAL (decl1) = 0;
13509       DECL_INTERFACE_KNOWN (decl1) = 1;
13510       DECL_DEFER_OUTPUT (decl1) = 1;
13511     }
13512   else
13513     {
13514       /* This is a definition, not a reference.
13515          So clear DECL_EXTERNAL.  */
13516       DECL_EXTERNAL (decl1) = 0;
13517
13518       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13519           && ! DECL_INTERFACE_KNOWN (decl1)
13520           /* Don't try to defer nested functions for now.  */
13521           && ! decl_function_context (decl1))
13522         DECL_DEFER_OUTPUT (decl1) = 1;
13523       else
13524         DECL_INTERFACE_KNOWN (decl1) = 1;
13525     }
13526
13527   if (doing_semantic_analysis_p ())
13528     {
13529       pushlevel (0);
13530       current_binding_level->parm_flag = 1;
13531     }
13532
13533   if (attrs)
13534     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13535
13536   if (!building_stmt_tree ())
13537     {
13538       GNU_xref_function (decl1, current_function_parms);
13539       make_function_rtl (decl1);
13540     }
13541
13542   /* Promote the value to int before returning it.  */
13543   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13544     restype = type_promotes_to (restype);
13545
13546   /* If this fcn was already referenced via a block-scope `extern' decl
13547      (or an implicit decl), propagate certain information about the usage.  */
13548   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13549     TREE_ADDRESSABLE (decl1) = 1;
13550
13551   if (DECL_RESULT (decl1) == NULL_TREE)
13552     {
13553       DECL_RESULT (decl1)
13554         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13555       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13556       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13557     }
13558
13559   ++function_depth;
13560
13561   if (DECL_DESTRUCTOR_P (decl1))
13562     {
13563       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13564       DECL_CONTEXT (dtor_label) = current_function_decl;
13565     }
13566   /* Under the old ABI we return `this' from constructors, so we make
13567      ordinary `return' statements in constructors jump to CTOR_LABEL;
13568      from there we return `this'.  Under the new ABI, we don't bother
13569      with any of this.  By not setting CTOR_LABEL the remainder of the
13570      machinery is automatically disabled.  */
13571   else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
13572     {
13573       ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13574       DECL_CONTEXT (ctor_label) = current_function_decl;
13575     }
13576
13577   return 1;
13578 }
13579 \f
13580 /* Called after store_parm_decls for a function-try-block.  */
13581
13582 void
13583 expand_start_early_try_stmts ()
13584 {
13585   expand_start_try_stmts ();
13586 }
13587
13588 /* Store the parameter declarations into the current function declaration.
13589    This is called after parsing the parameter declarations, before
13590    digesting the body of the function.
13591
13592    Also install to binding contour return value identifier, if any.  */
13593
13594 void
13595 store_parm_decls ()
13596 {
13597   register tree fndecl = current_function_decl;
13598   register tree parm;
13599   int parms_have_cleanups = 0;
13600   tree cleanups = NULL_TREE;
13601
13602   /* This is a list of types declared among parms in a prototype.  */
13603   tree parmtags = current_function_parm_tags;
13604
13605   /* This is a chain of any other decls that came in among the parm
13606      declarations.  If a parm is declared with  enum {foo, bar} x;
13607      then CONST_DECLs for foo and bar are put here.  */
13608   tree nonparms = NULL_TREE;
13609
13610   /* Create a binding level for the parms.  */
13611   if (!building_stmt_tree ())
13612     expand_start_bindings (2);
13613
13614   if (current_function_parms)
13615     {
13616       /* This case is when the function was defined with an ANSI prototype.
13617          The parms already have decls, so we need not do anything here
13618          except record them as in effect
13619          and complain if any redundant old-style parm decls were written.  */
13620
13621       tree specparms = current_function_parms;
13622       tree next;
13623
13624       if (doing_semantic_analysis_p ())
13625         {
13626           /* Must clear this because it might contain TYPE_DECLs declared
13627              at class level.  */
13628           storedecls (NULL_TREE);
13629
13630           /* If we're doing semantic analysis, then we'll call pushdecl
13631              for each of these.  We must do them in reverse order so that
13632              they end in the correct forward order.  */
13633           specparms = nreverse (specparms);
13634         }
13635
13636       for (parm = specparms; parm; parm = next)
13637         {
13638           next = TREE_CHAIN (parm);
13639           if (TREE_CODE (parm) == PARM_DECL)
13640             {
13641               tree type = TREE_TYPE (parm);
13642
13643               if (doing_semantic_analysis_p ())
13644                 {
13645                   tree cleanup;
13646
13647                   if (DECL_NAME (parm) == NULL_TREE
13648                       || TREE_CODE (parm) != VOID_TYPE)
13649                     pushdecl (parm);
13650                   else
13651                     cp_error ("parameter `%D' declared void", parm);
13652
13653                   cleanup = (processing_template_decl 
13654                              ? NULL_TREE
13655                              : maybe_build_cleanup (parm));
13656
13657                   if (cleanup)
13658                     cleanups = tree_cons (parm, cleanup, cleanups);
13659                 }
13660               else if (type != error_mark_node
13661                        && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13662                 parms_have_cleanups = 1;
13663             }
13664           else
13665             {
13666               /* If we find an enum constant or a type tag,
13667                  put it aside for the moment.  */
13668               TREE_CHAIN (parm) = NULL_TREE;
13669               nonparms = chainon (nonparms, parm);
13670             }
13671         }
13672
13673       if (doing_semantic_analysis_p ())
13674         {
13675           /* Get the decls in their original chain order
13676              and record in the function.  This is all and only the
13677              PARM_DECLs that were pushed into scope by the loop above.  */
13678           DECL_ARGUMENTS (fndecl) = getdecls ();
13679           storetags (chainon (parmtags, gettags ()));
13680         }
13681     }
13682   else
13683     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13684
13685   /* Now store the final chain of decls for the arguments
13686      as the decl-chain of the current lexical scope.
13687      Put the enumerators in as well, at the front so that
13688      DECL_ARGUMENTS is not modified.  */
13689   if (doing_semantic_analysis_p ())
13690     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13691
13692   /* Initialize the RTL code for the function.  */
13693   DECL_SAVED_INSNS (fndecl) = 0;
13694   if (! building_stmt_tree ())
13695     expand_function_start (fndecl, parms_have_cleanups);
13696
13697   current_function_parms_stored = 1;
13698
13699   /* If this function is `main', emit a call to `__main'
13700      to run global initializers, etc.  */
13701   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13702     expand_main_function ();
13703
13704   /* Now that we have initialized the parms, we can start their
13705      cleanups.  We cannot do this before, since expand_decl_cleanup
13706      should not be called before the parm can be used.  */
13707   while (cleanups)
13708     {
13709       finish_decl_cleanup (TREE_PURPOSE (cleanups),
13710                            TREE_VALUE (cleanups));
13711       cleanups = TREE_CHAIN (cleanups);
13712     }
13713
13714   /* Create a binding contour which can be used to catch
13715      cleanup-generated temporaries.  Also, if the return value needs or
13716      has initialization, deal with that now.  */
13717   if (parms_have_cleanups)
13718     {
13719       pushlevel (0);
13720       if (!building_stmt_tree ())
13721         expand_start_bindings (2);
13722     }
13723
13724   /* Do the starting of the exception specifications, if we have any.  */
13725   if (flag_exceptions && !processing_template_decl
13726       && flag_enforce_eh_specs
13727       && building_stmt_tree ()
13728       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13729     current_eh_spec_try_block = expand_start_eh_spec ();
13730 }
13731
13732 /* Bind a name and initialization to the return value of
13733    the current function.  */
13734
13735 void
13736 store_return_init (decl)
13737      tree decl;
13738 {
13739   /* If this named return value comes in a register, put it in a
13740      pseudo-register.  */
13741   if (DECL_REGISTER (decl))
13742     {
13743       original_result_rtx = DECL_RTL (decl);
13744       /* Note that the mode of the old DECL_RTL may be wider than the
13745          mode of DECL_RESULT, depending on the calling conventions for
13746          the processor.  For example, on the Alpha, a 32-bit integer
13747          is returned in a DImode register -- the DECL_RESULT has
13748          SImode but the DECL_RTL for the DECL_RESULT has DImode.  So,
13749          here, we use the mode the back-end has already assigned for
13750          the return value.  */
13751       DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
13752     }
13753 }
13754
13755 \f
13756 /* We have finished doing semantic analysis on DECL, but have not yet
13757    generated RTL for its body.  Save away our current state, so that
13758    when we want to generate RTL later we know what to do.  */
13759
13760 static void
13761 save_function_data (decl)
13762      tree decl;
13763 {
13764   struct language_function *f;
13765
13766   /* Save the language-specific per-function data so that we can
13767      get it back when we really expand this function.  */
13768   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13769                       19990908);
13770
13771   /* Make a copy.  */
13772   f = ((struct language_function *)
13773        xmalloc (sizeof (struct language_function)));
13774   bcopy ((char *) cp_function_chain, (char *) f,
13775          sizeof (struct language_function));
13776   DECL_SAVED_FUNCTION_DATA (decl) = f;
13777
13778   /* Clear out the bits we don't need.  */
13779   f->x_base_init_list = NULL_TREE;
13780   f->x_member_init_list = NULL_TREE;
13781   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13782   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13783   f->x_result_rtx = NULL_RTX;
13784   f->x_named_label_uses = NULL;
13785   f->bindings = NULL;
13786
13787   /* When we get back here again, we will be expanding.  */
13788   f->x_expanding_p = 1;
13789
13790   /* If we've already decided that we cannot inline this function, we
13791      must remember that fact when we actually go to expand the
13792      function.  */
13793   f->cannot_inline = current_function_cannot_inline;
13794 }
13795
13796 /* At the end of every constructor we generate to code to return
13797    `this'.  Do that now.  */
13798
13799 static void
13800 finish_constructor_body ()
13801 {
13802   /* Any return from a constructor will end up here.  */
13803   if (ctor_label)
13804     add_tree (build_min_nt (LABEL_STMT, ctor_label));
13805
13806   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13807      generate the return, rather than a goto to CTOR_LABEL.  */
13808   ctor_label = NULL_TREE;
13809   /* In check_return_expr we translate an empty return from a
13810      constructor to a return of `this'.  */
13811   finish_return_stmt (NULL_TREE);
13812   /* Mark the end of the constructor.  */
13813   add_tree (build_min_nt (CTOR_STMT));
13814 }
13815
13816 /* At the end of every destructor we generate code to restore virtual
13817    function tables to the values desired by base classes and to call
13818    to base class destructors.  Do that now.  */
13819
13820 static void
13821 finish_destructor_body ()
13822 {
13823   tree compound_stmt;
13824   tree virtual_size;
13825   tree exprstmt;
13826   tree if_stmt;
13827
13828   /* Create a block to contain all the extra code.  */
13829   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13830
13831   /* Any return from a destructor will end up here.  */
13832   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13833
13834   /* Generate the code to call destructor on base class.  If this
13835      destructor belongs to a class with virtual functions, then set
13836      the virtual function table pointer to represent the type of our
13837      base class.  */
13838
13839   /* This side-effect makes call to `build_delete' generate the code
13840      we have to have at the end of this destructor.  `build_delete'
13841      will set the flag again.  */
13842   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13843
13844   exprstmt = build_delete (current_class_type,
13845                            current_class_ref,
13846                            integer_zero_node,
13847                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13848                            0);
13849
13850   if (exprstmt != error_mark_node
13851       && (TREE_CODE (exprstmt) != NOP_EXPR
13852           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13853           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13854     {
13855       if (exprstmt != void_zero_node)
13856         /* Don't call `expand_expr_stmt' if we're not going to do
13857            anything, since -Wall will give a diagnostic.  */
13858         finish_expr_stmt (exprstmt);
13859
13860       /* Run destructors for all virtual baseclasses.  */
13861       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13862         {
13863           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13864           tree if_stmt = begin_if_stmt ();
13865           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13866                                       current_in_charge_parm,
13867                                       integer_two_node),
13868                                if_stmt);
13869
13870           while (vbases)
13871             {
13872               if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbases)))
13873                 {
13874                   tree vb = get_vbase
13875                     (BINFO_TYPE (vbases),
13876                      TYPE_BINFO (current_class_type));
13877                   finish_expr_stmt
13878                     (build_scoped_method_call
13879                      (current_class_ref, vb, complete_dtor_identifier,
13880                       NULL_TREE));
13881                 }
13882               vbases = TREE_CHAIN (vbases);
13883             }
13884
13885           finish_then_clause (if_stmt);
13886           finish_if_stmt ();
13887         }
13888     }
13889
13890   virtual_size = c_sizeof (current_class_type);
13891
13892   /* At the end, call delete if that's what's requested.  */
13893
13894   /* FDIS sez: At the point of definition of a virtual destructor
13895      (including an implicit definition), non-placement operator delete
13896      shall be looked up in the scope of the destructor's class and if
13897      found shall be accessible and unambiguous.
13898
13899      This is somewhat unclear, but I take it to mean that if the class
13900      only defines placement deletes we don't do anything here.  So we
13901      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13902      they ever try to delete one of these.  */
13903   exprstmt = build_op_delete_call
13904     (DELETE_EXPR, current_class_ptr, virtual_size,
13905      LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13906
13907   if_stmt = begin_if_stmt ();
13908   finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13909                               current_in_charge_parm,
13910                               integer_one_node),
13911                        if_stmt);
13912   finish_expr_stmt (exprstmt);
13913   finish_then_clause (if_stmt);
13914   finish_if_stmt ();
13915
13916   /* Close the block we started above.  */
13917   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13918 }
13919
13920 /* Finish up a function declaration and compile that function
13921    all the way to assembler language output.  The free the storage
13922    for the function definition.
13923
13924    FLAGS is a bitwise or of the following values:
13925      1 - CALL_POPLEVEL
13926        An extra call to poplevel (and expand_end_bindings) must be
13927        made to take care of the binding contour for the base
13928        initializers.  This is only relevant for constructors.
13929      2 - INCLASS_INLINE
13930        We just finished processing the body of an in-class inline
13931        function definition.  (This processing will have taken place
13932        after the class definition is complete.)  */
13933
13934 tree
13935 finish_function (flags)
13936      int flags;
13937 {
13938   register tree fndecl = current_function_decl;
13939   tree fntype, ctype = NULL_TREE;
13940   /* Label to use if this function is supposed to return a value.  */
13941   tree no_return_label = NULL_TREE;
13942   int call_poplevel = (flags & 1) != 0;
13943   int inclass_inline = (flags & 2) != 0;
13944   int expand_p;
13945   int nested;
13946   int current_line = lineno;
13947
13948   /* When we get some parse errors, we can end up without a
13949      current_function_decl, so cope.  */
13950   if (fndecl == NULL_TREE)
13951     return error_mark_node;
13952
13953   nested = function_depth > 1;
13954   fntype = TREE_TYPE (fndecl);
13955
13956   /*  TREE_READONLY (fndecl) = 1;
13957       This caused &foo to be of type ptr-to-const-function
13958       which then got a warning when stored in a ptr-to-function variable.  */
13959
13960   /* This happens on strange parse errors.  */
13961   if (! current_function_parms_stored)
13962     {
13963       call_poplevel = 0;
13964       store_parm_decls ();
13965     }
13966
13967   /* For a cloned function, we've already got all the code we need;
13968      there's no need to add any extra bits.  */
13969   if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13970     ;
13971   else if (building_stmt_tree ())
13972     {
13973       if (DECL_CONSTRUCTOR_P (fndecl))
13974         {
13975           finish_constructor_body ();
13976           if (call_poplevel)
13977             do_poplevel ();
13978         }
13979       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13980         finish_destructor_body ();
13981       else if (DECL_MAIN_P (fndecl))
13982         {
13983           /* Make it so that `main' always returns 0 by default.  */
13984 #ifdef VMS
13985           finish_return_stmt (integer_one_node);
13986 #else
13987           finish_return_stmt (integer_zero_node);
13988 #endif
13989         }
13990
13991       /* Finish dealing with exception specifiers.  */
13992       if (flag_exceptions && !processing_template_decl
13993           && flag_enforce_eh_specs
13994           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13995         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
13996                             (TREE_TYPE (current_function_decl)),
13997                             current_eh_spec_try_block);
13998     }
13999   else
14000     {
14001 #if 0
14002       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14003         {
14004           /* Keep this code around in case we later want to control debug info
14005              based on whether a type is "used".  (jason 1999-11-11) */
14006
14007           tree ttype = target_type (fntype);
14008           tree parmdecl;
14009
14010           if (IS_AGGR_TYPE (ttype))
14011             /* Let debugger know it should output info for this type.  */
14012             note_debug_info_needed (ttype);
14013
14014           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14015             {
14016               ttype = target_type (TREE_TYPE (parmdecl));
14017               if (IS_AGGR_TYPE (ttype))
14018                 /* Let debugger know it should output info for this type.  */
14019                 note_debug_info_needed (ttype);
14020             }
14021         }
14022 #endif
14023
14024       /* Clean house because we will need to reorder insns here.  */
14025       do_pending_stack_adjust ();
14026
14027       if (dtor_label)
14028         ;
14029       else if (DECL_CONSTRUCTOR_P (fndecl))
14030         {
14031           if (call_poplevel)
14032             do_poplevel ();
14033         }
14034       else if (return_label != NULL_RTX
14035                && flag_this_is_variable <= 0
14036                && current_function_return_value == NULL_TREE
14037                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14038         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14039
14040       if (flag_exceptions)
14041         expand_exception_blocks ();
14042
14043       /* If this function is supposed to return a value, ensure that
14044          we do not fall into the cleanups by mistake.  The end of our
14045          function will look like this:
14046
14047          user code (may have return stmt somewhere)
14048          goto no_return_label
14049          cleanup_label:
14050          cleanups
14051          goto return_label
14052          no_return_label:
14053          NOTE_INSN_FUNCTION_END
14054          return_label:
14055          things for return
14056
14057          If the user omits a return stmt in the USER CODE section, we
14058          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14059          Otherwise, we won't.  */
14060       if (no_return_label)
14061         {
14062           DECL_CONTEXT (no_return_label) = fndecl;
14063           DECL_INITIAL (no_return_label) = error_mark_node;
14064           DECL_SOURCE_FILE (no_return_label) = input_filename;
14065           DECL_SOURCE_LINE (no_return_label) = current_line;
14066           expand_goto (no_return_label);
14067         }
14068
14069       if (cleanup_label)
14070         {
14071           /* Remove the binding contour which is used
14072              to catch cleanup-generated temporaries.  */
14073           expand_end_bindings (0, 0, 0);
14074           poplevel (0, 0, 0);
14075
14076           /* Emit label at beginning of cleanup code for parameters.  */
14077           emit_label (cleanup_label);
14078         }
14079
14080       /* Get return value into register if that's where it's supposed
14081          to be.  */
14082       if (original_result_rtx)
14083         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14084
14085       /* Finish building code that will trigger warnings if users forget
14086          to make their functions return values.  */
14087       if (no_return_label || cleanup_label)
14088         emit_jump (return_label);
14089       if (no_return_label)
14090         {
14091           /* We don't need to call `expand_*_return' here because we
14092              don't need any cleanups here--this path of code is only
14093              for error checking purposes.  */
14094           expand_label (no_return_label);
14095         }
14096
14097       /* We hard-wired immediate_size_expand to zero in
14098          start_function.  Expand_function_end will decrement this
14099          variable.  So, we set the variable to one here, so that after
14100          the decrement it will remain zero.  */
14101       immediate_size_expand = 1;
14102
14103       /* Generate rtl for function exit.  */
14104       expand_function_end (input_filename, current_line, 1);
14105     }
14106
14107   /* We have to save this value here in case
14108      maybe_end_member_template_processing decides to pop all the
14109      template parameters.  */
14110   expand_p = !building_stmt_tree ();
14111
14112   /* If we're saving up tree structure, tie off the function now.  */
14113   if (!expand_p)
14114     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14115
14116   /* This must come after expand_function_end because cleanups might
14117      have declarations (from inline functions) that need to go into
14118      this function's blocks.  */
14119   if (doing_semantic_analysis_p ())
14120     {
14121       if (current_binding_level->parm_flag != 1)
14122         my_friendly_abort (122);
14123       poplevel (1, 0, 1);
14124     }
14125
14126   /* Remember that we were in class scope.  */
14127   if (current_class_name)
14128     ctype = current_class_type;
14129
14130   /* Must mark the RESULT_DECL as being in this function.  */
14131   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14132
14133   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14134      to the FUNCTION_DECL node itself.  */
14135   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14136
14137   /* Save away current state, if appropriate.  */
14138   if (!expanding_p && !processing_template_decl)
14139     save_function_data (fndecl);
14140
14141   /* If this function calls `setjmp' it cannot be inlined.  When
14142      `longjmp' is called it is not guaranteed to restore the value of
14143      local variables that have been modified since the call to
14144      `setjmp'.  So, if were to inline this function into some caller
14145      `c', then when we `longjmp', we might not restore all variables
14146      in `c'.  (It might seem, at first blush, that there's no way for
14147      this function to modify local variables in `c', but their
14148      addresses may have been stored somewhere accessible to this
14149      function.)  */
14150   if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14151     DECL_UNINLINABLE (fndecl) = 1;
14152
14153   if (expand_p)
14154     {
14155       int returns_null;
14156       int returns_value;
14157
14158       /* So we can tell if jump_optimize sets it to 1.  */
14159       can_reach_end = 0;
14160
14161       /* Before we call rest_of_compilation (which will pop the
14162          CURRENT_FUNCTION), we must save these values.  */
14163       returns_null = current_function_returns_null;
14164       returns_value = current_function_returns_value;
14165
14166       /* If this is a nested function (like a template instantiation
14167          that we're compiling in the midst of compiling something
14168          else), push a new GC context.  That will keep local variables
14169          on the stack from being collected while we're doing the
14170          compilation of this function.  */
14171       if (function_depth > 1)
14172         ggc_push_context ();
14173
14174       /* Run the optimizers and output the assembler code for this
14175          function.  */
14176       rest_of_compilation (fndecl);
14177
14178       /* Undo the call to ggc_push_context above.  */
14179       if (function_depth > 1)
14180         ggc_pop_context ();
14181
14182       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14183         {
14184           /* Set DECL_EXTERNAL so that assemble_external will be called as
14185              necessary.  We'll clear it again in finish_file.  */
14186           if (! DECL_EXTERNAL (fndecl))
14187             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14188           DECL_EXTERNAL (fndecl) = 1;
14189           defer_fn (fndecl);
14190         }
14191
14192 #if 0
14193       /* Keep this code around in case we later want to control debug info
14194          based on whether a type is "used".  (jason 1999-11-11) */
14195
14196       if (ctype && TREE_ASM_WRITTEN (fndecl))
14197         note_debug_info_needed (ctype);
14198 #endif
14199
14200       returns_null |= can_reach_end;
14201
14202       /* Since we don't normally go through c_expand_return for constructors,
14203          this normally gets the wrong value.
14204          Also, named return values have their return codes emitted after
14205          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14206       if (DECL_CONSTRUCTOR_P (fndecl)
14207           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14208         returns_null = 0;
14209
14210       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
14211         cp_warning ("`noreturn' function `%D' does return", fndecl);
14212       else if ((warn_return_type || pedantic)
14213                && returns_null
14214                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14215         {
14216           /* If this function returns non-void and control can drop through,
14217              complain.  */
14218           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14219         }
14220       /* With just -W, complain only if function returns both with
14221          and without a value.  */
14222       else if (extra_warnings && returns_value && returns_null)
14223         warning ("this function may return with or without a value");
14224     }
14225   else
14226     {
14227       /* Clear out memory we no longer need.  */
14228       free_after_parsing (cfun);
14229       /* Since we never call rest_of_compilation, we never clear
14230          CFUN.  Do so explicitly.  */
14231       free_after_compilation (cfun);
14232       cfun = NULL;
14233     }
14234
14235   /* If this is a in-class inline definition, we may have to pop the
14236      bindings for the template parameters that we added in
14237      maybe_begin_member_template_processing when start_function was
14238      called.  */
14239   if (inclass_inline)
14240     maybe_end_member_template_processing ();
14241
14242   /* Leave the scope of the class.  */
14243   if (ctype)
14244     pop_nested_class ();
14245
14246   --function_depth;
14247
14248   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14249       && !(flag_inline_trees && DECL_INLINE (fndecl)))
14250     {
14251       tree t;
14252
14253       /* Stop pointing to the local nodes about to be freed.  */
14254       /* But DECL_INITIAL must remain nonzero so we know this
14255          was an actual function definition.  */
14256       DECL_INITIAL (fndecl) = error_mark_node;
14257       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14258         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14259     }
14260
14261   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14262     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14263   if (DECL_STATIC_DESTRUCTOR (fndecl))
14264     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14265
14266   /* Clean up.  */
14267   if (! nested)
14268     {
14269       /* Let the error reporting routines know that we're outside a
14270          function.  For a nested function, this value is used in
14271          pop_cp_function_context and then reset via pop_function_context.  */
14272       current_function_decl = NULL_TREE;
14273       /* We don't really care about obstacks, but the middle-end
14274          sometimes cares on what obstck things are located.  */
14275       permanent_allocation (1);
14276     }
14277
14278   return fndecl;
14279 }
14280 \f
14281 /* Create the FUNCTION_DECL for a function definition.
14282    DECLSPECS and DECLARATOR are the parts of the declaration;
14283    they describe the return type and the name of the function,
14284    but twisted together in a fashion that parallels the syntax of C.
14285
14286    This function creates a binding context for the function body
14287    as well as setting up the FUNCTION_DECL in current_function_decl.
14288
14289    Returns a FUNCTION_DECL on success.
14290
14291    If the DECLARATOR is not suitable for a function (it defines a datum
14292    instead), we return 0, which tells yyparse to report a parse error.
14293
14294    May return void_type_node indicating that this method is actually
14295    a friend.  See grokfield for more details.
14296
14297    Came here with a `.pushlevel' .
14298
14299    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14300    CHANGES TO CODE IN `grokfield'.  */
14301
14302 tree
14303 start_method (declspecs, declarator, attrlist)
14304      tree declarator, declspecs, attrlist;
14305 {
14306   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14307                                 attrlist);
14308
14309   /* Something too ugly to handle.  */
14310   if (fndecl == NULL_TREE)
14311     return NULL_TREE;
14312
14313   /* Pass friends other than inline friend functions back.  */
14314   if (fndecl == void_type_node)
14315     return fndecl;
14316
14317   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14318     /* Not a function, tell parser to report parse error.  */
14319     return NULL_TREE;
14320
14321   if (DECL_IN_AGGR_P (fndecl))
14322     {
14323       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14324         {
14325           if (DECL_CONTEXT (fndecl)
14326               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14327             cp_error ("`%D' is already defined in class %s", fndecl,
14328                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14329         }
14330       return void_type_node;
14331     }
14332
14333   check_template_shadow (fndecl);
14334
14335   DECL_THIS_INLINE (fndecl) = 1;
14336
14337   if (flag_default_inline)
14338     DECL_INLINE (fndecl) = 1;
14339
14340   /* We process method specializations in finish_struct_1.  */
14341   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14342     fndecl = push_template_decl (fndecl);
14343
14344   if (! DECL_FRIEND_P (fndecl))
14345     {
14346       if (TREE_CHAIN (fndecl))
14347         {
14348           fndecl = copy_node (fndecl);
14349           TREE_CHAIN (fndecl) = NULL_TREE;
14350         }
14351
14352       if (DECL_CONSTRUCTOR_P (fndecl))
14353         {
14354           if (! grok_ctor_properties (current_class_type, fndecl))
14355             return void_type_node;
14356         }
14357       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14358         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14359     }
14360
14361   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14362
14363   /* Make a place for the parms */
14364   pushlevel (0);
14365   current_binding_level->parm_flag = 1;
14366
14367   DECL_IN_AGGR_P (fndecl) = 1;
14368   return fndecl;
14369 }
14370
14371 /* Go through the motions of finishing a function definition.
14372    We don't compile this method until after the whole class has
14373    been processed.
14374
14375    FINISH_METHOD must return something that looks as though it
14376    came from GROKFIELD (since we are defining a method, after all).
14377
14378    This is called after parsing the body of the function definition.
14379    STMTS is the chain of statements that makes up the function body.
14380
14381    DECL is the ..._DECL that `start_method' provided.  */
14382
14383 tree
14384 finish_method (decl)
14385      tree decl;
14386 {
14387   register tree fndecl = decl;
14388   tree old_initial;
14389
14390   register tree link;
14391
14392   if (decl == void_type_node)
14393     return decl;
14394
14395   old_initial = DECL_INITIAL (fndecl);
14396
14397   /* Undo the level for the parms (from start_method).
14398      This is like poplevel, but it causes nothing to be
14399      saved.  Saving information here confuses symbol-table
14400      output routines.  Besides, this information will
14401      be correctly output when this method is actually
14402      compiled.  */
14403
14404   /* Clear out the meanings of the local variables of this level;
14405      also record in each decl which block it belongs to.  */
14406
14407   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14408     {
14409       if (DECL_NAME (link) != NULL_TREE)
14410         pop_binding (DECL_NAME (link), link);
14411       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14412       DECL_CONTEXT (link) = NULL_TREE;
14413     }
14414
14415   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14416                       (HOST_WIDE_INT) current_binding_level->level_chain,
14417                       current_binding_level->parm_flag,
14418                       current_binding_level->keep);
14419
14420   poplevel (0, 0, 0);
14421
14422   DECL_INITIAL (fndecl) = old_initial;
14423
14424   /* We used to check if the context of FNDECL was different from
14425      current_class_type as another way to get inside here.  This didn't work
14426      for String.cc in libg++.  */
14427   if (DECL_FRIEND_P (fndecl))
14428     {
14429       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14430         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14431       decl = void_type_node;
14432     }
14433
14434   return decl;
14435 }
14436 \f
14437 /* Called when a new struct TYPE is defined.
14438    If this structure or union completes the type of any previous
14439    variable declaration, lay it out and output its rtl.  */
14440
14441 void
14442 hack_incomplete_structures (type)
14443      tree type;
14444 {
14445   tree *list;
14446   struct binding_level *level;
14447
14448   if (!type) /* Don't do this for class templates.  */
14449     return;
14450
14451   if (namespace_bindings_p ())
14452     {
14453       level = 0;
14454       list = &namespace_scope_incomplete;
14455     }
14456   else
14457     {
14458       level = innermost_nonclass_level ();
14459       list = &level->incomplete;
14460     }
14461
14462   while (1)
14463     {
14464       while (*list)
14465         {
14466           tree decl = TREE_VALUE (*list);
14467           if ((decl && TREE_TYPE (decl) == type)
14468               || (TREE_TYPE (decl)
14469                   && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14470                   && TREE_TYPE (TREE_TYPE (decl)) == type))
14471             {
14472               int toplevel = toplevel_bindings_p ();
14473               if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14474                   && TREE_TYPE (TREE_TYPE (decl)) == type)
14475                 layout_type (TREE_TYPE (decl));
14476               layout_decl (decl, 0);
14477               rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14478               if (! toplevel)
14479                 {
14480                   tree cleanup;
14481                   expand_decl (decl);
14482                   cleanup = maybe_build_cleanup (decl);
14483                   expand_decl_init (decl);
14484                   if (! expand_decl_cleanup (decl, cleanup))
14485                     cp_error ("parser lost in parsing declaration of `%D'",
14486                               decl);
14487                 }
14488               *list = TREE_CHAIN (*list);
14489             }
14490           else
14491             list = &TREE_CHAIN (*list);
14492         }
14493
14494       /* Keep looking through artificial binding levels generated
14495          for local variables.  */
14496       if (level && level->keep == 2)
14497         {
14498           level = level->level_chain;
14499           list = &level->incomplete;
14500         }
14501       else
14502         break;
14503     }
14504 }
14505
14506 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14507    See build_delete for information about AUTO_DELETE.  */
14508
14509 static tree
14510 maybe_build_cleanup_1 (decl, auto_delete)
14511      tree decl, auto_delete;
14512 {
14513   tree type = TREE_TYPE (decl);
14514   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14515     {
14516       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14517       tree rval;
14518
14519       if (TREE_CODE (type) == ARRAY_TYPE)
14520         rval = decl;
14521       else
14522         {
14523           mark_addressable (decl);
14524           rval = build_unary_op (ADDR_EXPR, decl, 0);
14525         }
14526
14527       /* Optimize for space over speed here.  */
14528       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14529           || flag_expensive_optimizations)
14530         flags |= LOOKUP_NONVIRTUAL;
14531
14532       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14533
14534       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14535           && ! TYPE_HAS_DESTRUCTOR (type))
14536         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14537                                                build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14538
14539       return rval;
14540     }
14541   return 0;
14542 }
14543
14544 /* If DECL is of a type which needs a cleanup, build that cleanup
14545    here.  The cleanup does not free the storage with a call a delete.  */
14546
14547 tree
14548 maybe_build_cleanup (decl)
14549      tree decl;
14550 {
14551   return maybe_build_cleanup_1 (decl, integer_two_node);
14552 }
14553 \f
14554 /* Expand a C++ expression at the statement level.
14555    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14556    The C++ type checker should get all of these out when
14557    expressions are combined with other, type-providing, expressions,
14558    leaving only orphan expressions, such as:
14559
14560    &class::bar;         / / takes its address, but does nothing with it.  */
14561
14562 void
14563 cplus_expand_expr_stmt (exp)
14564      tree exp;
14565 {
14566 #if 0
14567   /* We should do this eventually, but right now this causes regex.o from
14568      libg++ to miscompile, and tString to core dump.  */
14569   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14570 #endif
14571
14572   /* If we don't do this, we end up down inside expand_expr
14573      trying to do TYPE_MODE on the ERROR_MARK, and really
14574      go outside the bounds of the type.  */
14575   if (exp != error_mark_node)
14576     expand_expr_stmt (exp);
14577 }
14578
14579 /* When a stmt has been parsed, this function is called.  */
14580
14581 void
14582 finish_stmt ()
14583 {
14584   /* Always assume this statement was not an expression statement.  If
14585      it actually was an expression statement, its our callers
14586      responsibility to fix this up.  */
14587   last_expr_type = NULL_TREE;
14588 }
14589
14590 /* DECL was originally constructed as a non-static member function,
14591    but turned out to be static.  Update it accordingly.  */
14592
14593 void
14594 revert_static_member_fn (decl)
14595      tree decl;
14596 {
14597   tree tmp;
14598   tree function = TREE_TYPE (decl);
14599   tree args = TYPE_ARG_TYPES (function);
14600
14601   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14602       != TYPE_UNQUALIFIED)
14603     cp_error ("static member function `%#D' declared with type qualifiers",
14604               *decl);
14605
14606   args = TREE_CHAIN (args);
14607   tmp = build_function_type (TREE_TYPE (function), args);
14608   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14609   tmp = build_exception_variant (tmp,
14610                                  TYPE_RAISES_EXCEPTIONS (function));
14611   TREE_TYPE (decl) = tmp;
14612   if (DECL_ARGUMENTS (decl))
14613     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14614   DECL_STATIC_FUNCTION_P (decl) = 1;
14615 }
14616
14617 /* Initialize the variables used during compilation of a C++
14618    function.  */
14619
14620 static void
14621 push_cp_function_context (f)
14622      struct function *f;
14623 {
14624   struct language_function *p
14625     = ((struct language_function *)
14626        xcalloc (1, sizeof (struct language_function)));
14627   f->language = p;
14628
14629   /* It takes an explicit call to expand_body to generate RTL for a
14630      function.  */
14631   expanding_p = 0;
14632
14633   /* Whenever we start a new function, we destroy temporaries in the
14634      usual way.  */
14635   stmts_are_full_exprs_p = 1;
14636 }
14637
14638 /* Free the language-specific parts of F, now that we've finished
14639    compiling the function.  */
14640
14641 static void
14642 pop_cp_function_context (f)
14643      struct function *f;
14644 {
14645   if (f->language)
14646     free (f->language);
14647   f->language = 0;
14648 }
14649
14650 /* Mark P for GC.  */
14651
14652 static void
14653 mark_lang_function (p)
14654      struct language_function *p;
14655 {
14656   if (!p)
14657     return;
14658
14659   ggc_mark_tree (p->x_named_labels);
14660   ggc_mark_tree (p->x_ctor_label);
14661   ggc_mark_tree (p->x_dtor_label);
14662   ggc_mark_tree (p->x_base_init_list);
14663   ggc_mark_tree (p->x_member_init_list);
14664   ggc_mark_tree (p->x_current_class_ptr);
14665   ggc_mark_tree (p->x_current_class_ref);
14666   ggc_mark_tree (p->x_eh_spec_try_block);
14667   ggc_mark_tree (p->x_scope_stmt_stack);
14668
14669   ggc_mark_rtx (p->x_result_rtx);
14670
14671   mark_stmt_tree (&p->x_stmt_tree);
14672   mark_binding_level (&p->bindings);
14673 }
14674
14675 /* Mark the language-specific data in F for GC.  */
14676
14677 static void
14678 mark_cp_function_context (f)
14679      struct function *f;
14680 {
14681   mark_lang_function (f->language);
14682 }
14683
14684 void
14685 lang_mark_false_label_stack (l)
14686      struct label_node *l;
14687 {
14688   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14689   my_friendly_assert (l == NULL, 19990904);
14690 }
14691
14692 void
14693 lang_mark_tree (t)
14694      tree t;
14695 {
14696   enum tree_code code = TREE_CODE (t);
14697   if (code == IDENTIFIER_NODE)
14698     {
14699       struct lang_identifier *li = (struct lang_identifier *) t;
14700       struct lang_id2 *li2 = li->x;
14701       ggc_mark_tree (li->namespace_bindings);
14702       ggc_mark_tree (li->bindings);
14703       ggc_mark_tree (li->class_value);
14704       ggc_mark_tree (li->class_template_info);
14705
14706       if (li2)
14707         {
14708           ggc_mark_tree (li2->label_value);
14709           ggc_mark_tree (li2->implicit_decl);
14710           ggc_mark_tree (li2->error_locus);
14711         }
14712     }
14713   else if (code == CPLUS_BINDING)
14714     {
14715       if (BINDING_HAS_LEVEL_P (t))
14716         mark_binding_level (&BINDING_LEVEL (t));
14717       else
14718         ggc_mark_tree (BINDING_SCOPE (t));
14719       ggc_mark_tree (BINDING_VALUE (t));
14720     }
14721   else if (code == OVERLOAD)
14722     ggc_mark_tree (OVL_FUNCTION (t));
14723   else if (code == TEMPLATE_PARM_INDEX)
14724     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14725   else if (TREE_CODE_CLASS (code) == 'd')
14726     {
14727       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14728
14729       if (ld)
14730         {
14731           ggc_mark (ld);
14732           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14733             ggc_mark_tree (ld->decl_flags.u2.access);
14734           ggc_mark_tree (ld->decl_flags.context);
14735           if (TREE_CODE (t) != NAMESPACE_DECL)
14736             ggc_mark_tree (ld->decl_flags.u.template_info);
14737           else
14738             mark_binding_level (&NAMESPACE_LEVEL (t));
14739           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14740             {
14741               ggc_mark_tree (ld->befriending_classes);
14742               ggc_mark_tree (ld->saved_tree);
14743               ggc_mark_tree (ld->cloned_function);
14744               if (TREE_CODE (t) == TYPE_DECL)
14745                 ggc_mark_tree (ld->u.sorted_fields);
14746               else if (TREE_CODE (t) == FUNCTION_DECL
14747                        && !DECL_PENDING_INLINE_P (t))
14748                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14749             }
14750         }
14751     }
14752   else if (TREE_CODE_CLASS (code) == 't')
14753     {
14754       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14755
14756       if (lt && !(TREE_CODE (t) == POINTER_TYPE
14757                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14758         {
14759           ggc_mark (lt);
14760           ggc_mark_tree (lt->vfields);
14761           ggc_mark_tree (lt->vbases);
14762           ggc_mark_tree (lt->tags);
14763           ggc_mark_tree (lt->search_slot);
14764           ggc_mark_tree (lt->size);
14765           ggc_mark_tree (lt->pure_virtuals);
14766           ggc_mark_tree (lt->friend_classes);
14767           ggc_mark_tree (lt->rtti);
14768           ggc_mark_tree (lt->methods);
14769           ggc_mark_tree (lt->template_info);
14770           ggc_mark_tree (lt->befriending_classes);
14771         }
14772       else if (lt)
14773         /* In the case of pointer-to-member function types, the
14774            TYPE_LANG_SPECIFIC is really just a tree.  */
14775         ggc_mark_tree ((tree) lt);
14776     }
14777 }