OSDN Git Service

* cp-tree.def (THUNK_DECL): Remove.
[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_EXTERN_C_P (newdecl)
2931                 && DECL_EXTERN_C_P (olddecl)))
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_EXTERN_C_P (olddecl)
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 
2948                    && DECL_EXTERN_C_P (olddecl)
2949                    && DECL_EXTERN_C_P (newdecl)
2950                    && p1 == NULL_TREE)
2951             {
2952               types_match = self_promoting_args_p (p2);
2953               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2954             }
2955           else
2956             types_match = compparms (p1, p2);
2957         }
2958       else
2959         types_match = 0;
2960     }
2961   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2962     {
2963       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2964                                 DECL_TEMPLATE_PARMS (olddecl)))
2965         return 0;
2966
2967       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2968         types_match = 1;
2969       else
2970         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2971                                    DECL_TEMPLATE_RESULT (newdecl));
2972     }
2973   else
2974     {
2975       if (TREE_TYPE (newdecl) == error_mark_node)
2976         types_match = TREE_TYPE (olddecl) == error_mark_node;
2977       else if (TREE_TYPE (olddecl) == NULL_TREE)
2978         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2979       else if (TREE_TYPE (newdecl) == NULL_TREE)
2980         types_match = 0;
2981       else
2982         types_match = comptypes (TREE_TYPE (newdecl),
2983                                  TREE_TYPE (olddecl),
2984                                  COMPARE_REDECLARATION);
2985     }
2986
2987   return types_match;
2988 }
2989
2990 /* If NEWDECL is `static' and an `extern' was seen previously,
2991    warn about it.  OLDDECL is the previous declaration.
2992
2993    Note that this does not apply to the C++ case of declaring
2994    a variable `extern const' and then later `const'.
2995
2996    Don't complain about built-in functions, since they are beyond
2997    the user's control.  */
2998
2999 static void
3000 warn_extern_redeclared_static (newdecl, olddecl)
3001      tree newdecl, olddecl;
3002 {
3003   static const char *explicit_extern_static_warning
3004     = "`%D' was declared `extern' and later `static'";
3005   static const char *implicit_extern_static_warning
3006     = "`%D' was declared implicitly `extern' and later `static'";
3007
3008   tree name;
3009
3010   if (TREE_CODE (newdecl) == TYPE_DECL
3011       || TREE_CODE (newdecl) == TEMPLATE_DECL)
3012     return;
3013
3014   /* Don't get confused by static member functions; that's a different
3015      use of `static'.  */
3016   if (TREE_CODE (newdecl) == FUNCTION_DECL
3017       && DECL_STATIC_FUNCTION_P (newdecl))
3018     return;
3019
3020   /* If the old declaration was `static', or the new one isn't, then
3021      then everything is OK.  */
3022   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3023     return;
3024
3025   /* It's OK to declare a builtin function as `static'.  */
3026   if (TREE_CODE (olddecl) == FUNCTION_DECL
3027       && DECL_ARTIFICIAL (olddecl))
3028     return;
3029
3030   name = DECL_ASSEMBLER_NAME (newdecl);
3031   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3032               ? implicit_extern_static_warning
3033               : explicit_extern_static_warning, newdecl);
3034   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3035 }
3036
3037 /* Handle when a new declaration NEWDECL has the same name as an old
3038    one OLDDECL in the same binding contour.  Prints an error message
3039    if appropriate.
3040
3041    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3042    Otherwise, return 0.  */
3043
3044 int
3045 duplicate_decls (newdecl, olddecl)
3046      tree newdecl, olddecl;
3047 {
3048   unsigned olddecl_uid = DECL_UID (olddecl);
3049   int olddecl_friend = 0, types_match = 0;
3050   int new_defines_function = 0;
3051
3052   if (newdecl == olddecl)
3053     return 1;
3054
3055   types_match = decls_match (newdecl, olddecl);
3056
3057   /* If either the type of the new decl or the type of the old decl is an
3058      error_mark_node, then that implies that we have already issued an
3059      error (earlier) for some bogus type specification, and in that case,
3060      it is rather pointless to harass the user with yet more error message
3061      about the same declaration, so just pretend the types match here.  */
3062   if (TREE_TYPE (newdecl) == error_mark_node
3063       || TREE_TYPE (olddecl) == error_mark_node)
3064     types_match = 1;
3065
3066   /* Check for redeclaration and other discrepancies. */
3067   if (TREE_CODE (olddecl) == FUNCTION_DECL
3068       && DECL_ARTIFICIAL (olddecl))
3069     {
3070       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3071         {
3072           /* If you declare a built-in or predefined function name as static,
3073              the old definition is overridden, but optionally warn this was a
3074              bad choice of name.  */
3075           if (! TREE_PUBLIC (newdecl))
3076             {
3077               if (warn_shadow)
3078                 cp_warning ("shadowing %s function `%#D'",
3079                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3080                             olddecl);
3081               /* Discard the old built-in function.  */
3082               return 0;
3083             }
3084           /* If the built-in is not ansi, then programs can override
3085              it even globally without an error.  */
3086           else if (! DECL_BUILT_IN (olddecl))
3087             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3088                         olddecl, newdecl);
3089           else
3090             {
3091               cp_error ("declaration of `%#D'", newdecl);
3092               cp_error ("conflicts with built-in declaration `%#D'",
3093                         olddecl);
3094             }
3095           return 0;
3096         }
3097       else if (!types_match)
3098         {
3099           if ((DECL_EXTERN_C_P (newdecl)
3100                && DECL_EXTERN_C_P (olddecl))
3101               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3102                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3103             {
3104               /* A near match; override the builtin.  */
3105
3106               if (TREE_PUBLIC (newdecl))
3107                 {
3108                   cp_warning ("new declaration `%#D'", newdecl);
3109                   cp_warning ("ambiguates built-in declaration `%#D'",
3110                               olddecl);
3111                 }
3112               else if (warn_shadow)
3113                 cp_warning ("shadowing %s function `%#D'",
3114                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3115                             olddecl);
3116             }
3117           else
3118             /* Discard the old built-in function.  */
3119             return 0;
3120         }
3121
3122       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3123         {
3124           /* If a builtin function is redeclared as `static', merge
3125              the declarations, but make the original one static.  */
3126           DECL_THIS_STATIC (olddecl) = 1;
3127           TREE_PUBLIC (olddecl) = 0;
3128
3129           /* Make the olddeclaration consistent with the new one so that
3130              all remnants of the builtin-ness of this function will be
3131              banished.  */
3132           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3133           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3134           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3135           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3136                                        newdecl);
3137         }
3138     }
3139   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3140     {
3141       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3142            && TREE_CODE (newdecl) != TYPE_DECL
3143            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3144                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3145           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3146               && TREE_CODE (olddecl) != TYPE_DECL
3147               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3148                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3149                         == TYPE_DECL))))
3150         {
3151           /* We do nothing special here, because C++ does such nasty
3152              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3153              get shadowed, and know that if we need to find a TYPE_DECL
3154              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3155              slot of the identifier.  */
3156           return 0;
3157         }
3158
3159       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3160            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3161           || (TREE_CODE (olddecl) == FUNCTION_DECL
3162               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3163         return 0;
3164
3165       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3166       if (TREE_CODE (olddecl) == TREE_LIST)
3167         olddecl = TREE_VALUE (olddecl);
3168       cp_error_at ("previous declaration of `%#D'", olddecl);
3169
3170       /* New decl is completely inconsistent with the old one =>
3171          tell caller to replace the old one.  */
3172
3173       return 0;
3174     }
3175   else if (!types_match)
3176     {
3177       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3178         /* These are certainly not duplicate declarations; they're
3179            from different scopes.  */
3180         return 0;
3181
3182       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3183         {
3184           /* The name of a class template may not be declared to refer to
3185              any other template, class, function, object, namespace, value,
3186              or type in the same scope.  */
3187           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3188               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3189             {
3190               cp_error ("declaration of template `%#D'", newdecl);
3191               cp_error_at ("conflicts with previous declaration `%#D'",
3192                            olddecl);
3193             }
3194           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3195                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3196                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3197                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3198                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3199                                            DECL_TEMPLATE_PARMS (olddecl)))
3200             {
3201               cp_error ("new declaration `%#D'", newdecl);
3202               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3203             }
3204           return 0;
3205         }
3206       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3207         {
3208           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
3209             {
3210               cp_error ("declaration of C function `%#D' conflicts with",
3211                         newdecl);
3212               cp_error_at ("previous declaration `%#D' here", olddecl);
3213             }
3214           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3215                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3216             {
3217               cp_error ("new declaration `%#D'", newdecl);
3218               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3219             }
3220           else
3221             return 0;
3222         }
3223
3224       /* Already complained about this, so don't do so again.  */
3225       else if (current_class_type == NULL_TREE
3226           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3227         {
3228           cp_error ("conflicting types for `%#D'", newdecl);
3229           cp_error_at ("previous declaration as `%#D'", olddecl);
3230         }
3231     }
3232   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3233             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3234                  && (!DECL_TEMPLATE_INFO (newdecl)
3235                      || (DECL_TI_TEMPLATE (newdecl)
3236                          != DECL_TI_TEMPLATE (olddecl))))
3237                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3238                     && (!DECL_TEMPLATE_INFO (olddecl)
3239                         || (DECL_TI_TEMPLATE (olddecl)
3240                             != DECL_TI_TEMPLATE (newdecl))))))
3241     /* It's OK to have a template specialization and a non-template
3242        with the same type, or to have specializations of two
3243        different templates with the same type.  Note that if one is a
3244        specialization, and the other is an instantiation of the same
3245        template, that we do not exit at this point.  That situation
3246        can occur if we instantiate a template class, and then
3247        specialize one of its methods.  This situation is legal, but
3248        the declarations must be merged in the usual way.  */
3249     return 0;
3250   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3251            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3252                 && !DECL_USE_TEMPLATE (newdecl))
3253                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3254                    && !DECL_USE_TEMPLATE (olddecl))))
3255     /* One of the declarations is a template instantiation, and the
3256        other is not a template at all.  That's OK.  */
3257     return 0;
3258   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3259            && DECL_NAMESPACE_ALIAS (newdecl)
3260            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3261     /* Redeclaration of namespace alias, ignore it. */
3262     return 1;
3263   else
3264     {
3265       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3266       if (errmsg)
3267         {
3268           cp_error (errmsg, newdecl);
3269           if (DECL_NAME (olddecl) != NULL_TREE)
3270             cp_error_at ((DECL_INITIAL (olddecl)
3271                           && namespace_bindings_p ())
3272                          ? "`%#D' previously defined here"
3273                          : "`%#D' previously declared here", olddecl);
3274         }
3275       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3276                && DECL_INITIAL (olddecl) != NULL_TREE
3277                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3278                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3279         {
3280           /* Prototype decl follows defn w/o prototype.  */
3281           cp_warning_at ("prototype for `%#D'", newdecl);
3282           cp_warning_at ("follows non-prototype definition here", olddecl);
3283         }
3284       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3285                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3286         {
3287           /* extern "C" int foo ();
3288              int foo () { bar (); }
3289              is OK.  */
3290           if (current_lang_stack
3291               == &VARRAY_TREE (current_lang_base, 0))
3292             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3293           else
3294             {
3295               cp_error_at ("previous declaration of `%#D' with %L linkage",
3296                            olddecl, DECL_LANGUAGE (olddecl));
3297               cp_error ("conflicts with new declaration with %L linkage",
3298                         DECL_LANGUAGE (newdecl));
3299             }
3300         }
3301
3302       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3303         ;
3304       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3305         {
3306           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3307           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3308           int i = 1;
3309
3310           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3311             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3312
3313           for (; t1 && t1 != void_list_node;
3314                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3315             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3316               {
3317                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3318                                            TREE_PURPOSE (t2)))
3319                   {
3320                     if (pedantic)
3321                       {
3322                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3323                                     i, newdecl);
3324                         cp_pedwarn_at ("after previous specification in `%#D'",
3325                                        olddecl);
3326                       }
3327                   }
3328                 else
3329                   {
3330                     cp_error ("default argument given for parameter %d of `%#D'",
3331                               i, newdecl);
3332                     cp_error_at ("after previous specification in `%#D'",
3333                                  olddecl);
3334                   }
3335               }
3336
3337           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3338               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3339             {
3340               cp_warning ("`%#D' was used before it was declared inline",
3341                           newdecl);
3342               cp_warning_at ("previous non-inline declaration here",
3343                              olddecl);
3344             }
3345         }
3346     }
3347
3348   /* If new decl is `static' and an `extern' was seen previously,
3349      warn about it.  */
3350   warn_extern_redeclared_static (newdecl, olddecl);
3351
3352   /* We have committed to returning 1 at this point.  */
3353   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3354     {
3355       /* Now that functions must hold information normally held
3356          by field decls, there is extra work to do so that
3357          declaration information does not get destroyed during
3358          definition.  */
3359       if (DECL_VINDEX (olddecl))
3360         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3361       if (DECL_VIRTUAL_CONTEXT (olddecl))
3362         DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
3363       if (DECL_CONTEXT (olddecl))
3364         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3365       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3366         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3367       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3368       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3369       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3370       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3371       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3372       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3373       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3374
3375       /* Optionally warn about more than one declaration for the same
3376          name, but don't warn about a function declaration followed by a
3377          definition.  */
3378       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3379           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3380           /* Don't warn about extern decl followed by definition. */
3381           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3382           /* Don't warn about friends, let add_friend take care of it. */
3383           && ! DECL_FRIEND_P (newdecl))
3384         {
3385           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3386           cp_warning_at ("previous declaration of `%D'", olddecl);
3387         }
3388     }
3389
3390   /* Deal with C++: must preserve virtual function table size.  */
3391   if (TREE_CODE (olddecl) == TYPE_DECL)
3392     {
3393       register tree newtype = TREE_TYPE (newdecl);
3394       register tree oldtype = TREE_TYPE (olddecl);
3395
3396       if (newtype != error_mark_node && oldtype != error_mark_node
3397           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3398         {
3399           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3400           CLASSTYPE_FRIEND_CLASSES (newtype)
3401             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3402         }
3403     }
3404
3405   /* Copy all the DECL_... slots specified in the new decl
3406      except for any that we copy here from the old type.  */
3407   DECL_MACHINE_ATTRIBUTES (newdecl)
3408     = merge_machine_decl_attributes (olddecl, newdecl);
3409
3410   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3411     {
3412       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3413                              DECL_TEMPLATE_RESULT (olddecl)))
3414         cp_error ("invalid redeclaration of %D", newdecl);
3415       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3416       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3417         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3418                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3419
3420       return 1;
3421     }
3422
3423   if (types_match)
3424     {
3425       /* Automatically handles default parameters.  */
3426       tree oldtype = TREE_TYPE (olddecl);
3427       tree newtype;
3428
3429       /* Merge the data types specified in the two decls.  */
3430       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3431
3432       if (TREE_CODE (newdecl) == VAR_DECL)
3433         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3434       /* Do this after calling `common_type' so that default
3435          parameters don't confuse us.  */
3436       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3437           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3438               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3439         {
3440           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3441                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3442           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3443                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3444
3445           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3446               && DECL_SOURCE_LINE (olddecl) != 0
3447               && flag_exceptions
3448               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3449                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3450             {
3451               cp_error ("declaration of `%F' throws different exceptions",
3452                         newdecl);
3453               cp_error_at ("than previous declaration `%F'", olddecl);
3454             }
3455         }
3456       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3457
3458       /* Lay the type out, unless already done.  */
3459       if (! same_type_p (newtype, oldtype)
3460           && TREE_TYPE (newdecl) != error_mark_node
3461           && !(processing_template_decl && uses_template_parms (newdecl)))
3462         layout_type (TREE_TYPE (newdecl));
3463
3464       if ((TREE_CODE (newdecl) == VAR_DECL
3465            || TREE_CODE (newdecl) == PARM_DECL
3466            || TREE_CODE (newdecl) == RESULT_DECL
3467            || TREE_CODE (newdecl) == FIELD_DECL
3468            || TREE_CODE (newdecl) == TYPE_DECL)
3469           && !(processing_template_decl && uses_template_parms (newdecl)))
3470         layout_decl (newdecl, 0);
3471
3472       /* Merge the type qualifiers.  */
3473       if (TREE_READONLY (newdecl))
3474         TREE_READONLY (olddecl) = 1;
3475       if (TREE_THIS_VOLATILE (newdecl))
3476         TREE_THIS_VOLATILE (olddecl) = 1;
3477
3478       /* Merge the initialization information.  */
3479       if (DECL_INITIAL (newdecl) == NULL_TREE
3480           && DECL_INITIAL (olddecl) != NULL_TREE)
3481         {
3482           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3483           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3484           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3485           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3486               && DECL_LANG_SPECIFIC (newdecl)
3487               && DECL_LANG_SPECIFIC (olddecl))
3488             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3489         }
3490
3491       /* Merge the section attribute.
3492          We want to issue an error if the sections conflict but that must be
3493          done later in decl_attributes since we are called before attributes
3494          are assigned.  */
3495       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3496         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3497
3498       /* Keep the old rtl since we can safely use it.  */
3499       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3500
3501       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3502         {
3503           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3504             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3505           DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3506             |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3507           DECL_NO_LIMIT_STACK (newdecl)
3508             |= DECL_NO_LIMIT_STACK (olddecl);
3509         }
3510     }
3511   /* If cannot merge, then use the new type and qualifiers,
3512      and don't preserve the old rtl.  */
3513   else
3514     {
3515       /* Clean out any memory we had of the old declaration.  */
3516       tree oldstatic = value_member (olddecl, static_aggregates);
3517       if (oldstatic)
3518         TREE_VALUE (oldstatic) = error_mark_node;
3519
3520       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3521       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3522       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3523       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3524     }
3525
3526   /* Merge the storage class information.  */
3527   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3528   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3529   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3530   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3531   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3532   if (! DECL_EXTERNAL (olddecl))
3533     DECL_EXTERNAL (newdecl) = 0;
3534
3535   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3536     {
3537       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3538       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3539       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3540       DECL_TEMPLATE_INSTANTIATED (newdecl)
3541         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3542       /* Don't really know how much of the language-specific
3543          values we should copy from old to new.  */
3544       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3545       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3546       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3547       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3548       olddecl_friend = DECL_FRIEND_P (olddecl);
3549
3550       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3551       if (TREE_CODE (newdecl) == FUNCTION_DECL
3552           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3553         DECL_BEFRIENDING_CLASSES (newdecl)
3554           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3555                      DECL_BEFRIENDING_CLASSES (olddecl));
3556     }
3557
3558   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3559     {
3560       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3561           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3562         {
3563           /* If newdecl is not a specialization, then it is not a
3564              template-related function at all.  And that means that we
3565              shoud have exited above, returning 0.  */
3566           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3567                               0);
3568
3569           if (TREE_USED (olddecl))
3570             /* From [temp.expl.spec]:
3571
3572                If a template, a member template or the member of a class
3573                template is explicitly specialized then that
3574                specialization shall be declared before the first use of
3575                that specialization that would cause an implicit
3576                instantiation to take place, in every translation unit in
3577                which such a use occurs.  */
3578             cp_error ("explicit specialization of %D after first use",
3579                       olddecl);
3580
3581           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3582         }
3583       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3584
3585       /* If either decl says `inline', this fn is inline, unless its
3586          definition was passed already.  */
3587       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3588         DECL_INLINE (olddecl) = 1;
3589       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3590
3591       if (! types_match)
3592         {
3593           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3594           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3595           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3596         }
3597       if (! types_match || new_defines_function)
3598         {
3599           /* These need to be copied so that the names are available.
3600              Note that if the types do match, we'll preserve inline
3601              info and other bits, but if not, we won't.  */
3602           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3603           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3604         }
3605       if (new_defines_function)
3606         /* If defining a function declared with other language
3607            linkage, use the previously declared language linkage.  */
3608         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3609       else if (types_match)
3610         {
3611           /* If redeclaring a builtin function, and not a definition,
3612              it stays built in.  */
3613           if (DECL_BUILT_IN (olddecl))
3614             {
3615               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3616               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3617               /* If we're keeping the built-in definition, keep the rtl,
3618                  regardless of declaration matches.  */
3619               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3620             }
3621           else
3622             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3623
3624           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3625           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3626             /* Previously saved insns go together with
3627                the function's previous definition.  */
3628             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3629           /* Don't clear out the arguments if we're redefining a function.  */
3630           if (DECL_ARGUMENTS (olddecl))
3631             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3632         }
3633     }
3634
3635   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3636     {
3637       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3638     }
3639
3640   /* Now preserve various other info from the definition.  */
3641   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3642   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3643   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3644   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3645
3646   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3647     {
3648       int function_size;
3649
3650       function_size = sizeof (struct tree_decl);
3651
3652       bcopy ((char *) newdecl + sizeof (struct tree_common),
3653              (char *) olddecl + sizeof (struct tree_common),
3654              function_size - sizeof (struct tree_common));
3655
3656       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3657         {
3658           /* If newdecl is a template instantiation, it is possible that
3659              the following sequence of events has occurred:
3660
3661              o A friend function was declared in a class template.  The
3662              class template was instantiated.
3663
3664              o The instantiation of the friend declaration was
3665              recorded on the instantiation list, and is newdecl.
3666
3667              o Later, however, instantiate_class_template called pushdecl
3668              on the newdecl to perform name injection.  But, pushdecl in
3669              turn called duplicate_decls when it discovered that another
3670              declaration of a global function with the same name already
3671              existed.
3672
3673              o Here, in duplicate_decls, we decided to clobber newdecl.
3674
3675              If we're going to do that, we'd better make sure that
3676              olddecl, and not newdecl, is on the list of
3677              instantiations so that if we try to do the instantiation
3678              again we won't get the clobbered declaration.  */
3679
3680           tree tmpl = DECL_TI_TEMPLATE (newdecl);
3681           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3682
3683           for (; decls; decls = TREE_CHAIN (decls))
3684             if (TREE_VALUE (decls) == newdecl)
3685               TREE_VALUE (decls) = olddecl;
3686         }
3687     }
3688   else
3689     {
3690       bcopy ((char *) newdecl + sizeof (struct tree_common),
3691              (char *) olddecl + sizeof (struct tree_common),
3692              sizeof (struct tree_decl) - sizeof (struct tree_common)
3693              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3694     }
3695
3696   DECL_UID (olddecl) = olddecl_uid;
3697   if (olddecl_friend)
3698     DECL_FRIEND_P (olddecl) = 1;
3699
3700   /* NEWDECL contains the merged attribute lists.
3701      Update OLDDECL to be the same.  */
3702   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3703
3704   return 1;
3705 }
3706
3707 /* Record a decl-node X as belonging to the current lexical scope.
3708    Check for errors (such as an incompatible declaration for the same
3709    name already seen in the same scope).
3710
3711    Returns either X or an old decl for the same name.
3712    If an old decl is returned, it may have been smashed
3713    to agree with what X says.  */
3714
3715 tree
3716 pushdecl (x)
3717      tree x;
3718 {
3719   register tree t;
3720   register tree name;
3721   int need_new_binding;
3722
3723   /* We shouldn't be calling pushdecl when we're generating RTL for a
3724      function that we already did semantic analysis on previously.  */
3725   my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3726                       19990913);
3727
3728   name = DECL_ASSEMBLER_NAME (x);
3729   need_new_binding = 1;
3730
3731   if (DECL_TEMPLATE_PARM_P (x))
3732     /* Template parameters have no context; they are not X::T even
3733        when declared within a class or namespace.  */
3734     ;
3735   else
3736     {
3737       if (current_function_decl && x != current_function_decl
3738           /* A local declaration for a function doesn't constitute
3739              nesting.  */
3740           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3741           /* A local declaration for an `extern' variable is in the
3742              scoped of the current namespace, not the current
3743              function.  */
3744           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3745           && !DECL_CONTEXT (x))
3746         DECL_CONTEXT (x) = current_function_decl;
3747       if (!DECL_CONTEXT (x))
3748         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3749
3750       /* If this is the declaration for a namespace-scope function,
3751          but the declaration itself is in a local scope, mark the
3752          declaration.  */
3753       if (TREE_CODE (x) == FUNCTION_DECL
3754           && DECL_NAMESPACE_SCOPE_P (x)
3755           && current_function_decl
3756           && x != current_function_decl)
3757         DECL_LOCAL_FUNCTION_P (x) = 1;
3758     }
3759
3760   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3761      compiler wants to use.  */
3762   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3763       || TREE_CODE (x) == NAMESPACE_DECL)
3764     name = DECL_NAME (x);
3765
3766   if (name)
3767     {
3768 #if 0
3769       /* Not needed...see below.  */
3770       char *file;
3771       int line;
3772 #endif
3773       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3774         name = TREE_OPERAND (name, 0);
3775
3776       /* Namespace-scoped variables are not found in the current level. */
3777       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3778         t = namespace_binding (name, DECL_CONTEXT (x));
3779       else
3780         t = lookup_name_current_level (name);
3781       if (t == error_mark_node)
3782         {
3783           /* error_mark_node is 0 for a while during initialization!  */
3784           t = NULL_TREE;
3785           cp_error_at ("`%#D' used prior to declaration", x);
3786         }
3787
3788       else if (t != NULL_TREE)
3789         {
3790 #if 0
3791           /* This is turned off until I have time to do it right (bpk).  */
3792           /* With the code below that uses it...  */
3793           file = DECL_SOURCE_FILE (t);
3794           line = DECL_SOURCE_LINE (t);
3795 #endif
3796           if (TREE_CODE (t) == PARM_DECL)
3797             {
3798               if (DECL_CONTEXT (t) == NULL_TREE)
3799                 fatal ("parse errors have confused me too much");
3800
3801               /* Check for duplicate params.  */
3802               if (duplicate_decls (x, t))
3803                 return t;
3804             }
3805           else if ((DECL_EXTERN_C_FUNCTION_P (x)
3806                     || DECL_FUNCTION_TEMPLATE_P (x))
3807                    && is_overloaded_fn (t))
3808             /* Don't do anything just yet. */;
3809           else if (t == wchar_decl_node)
3810             {
3811               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3812                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3813
3814               /* Throw away the redeclaration.  */
3815               return t;
3816             }
3817           else if (TREE_CODE (t) != TREE_CODE (x))
3818             {
3819               if (duplicate_decls (x, t))
3820                 return t;
3821             }
3822           else if (duplicate_decls (x, t))
3823             {
3824 #if 0
3825               /* This is turned off until I have time to do it right (bpk).  */
3826
3827               /* Also warn if they did a prototype with `static' on it, but
3828                  then later left the `static' off.  */
3829               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3830                 {
3831                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3832                     return t;
3833
3834                   if (extra_warnings)
3835                     {
3836                       cp_warning ("`static' missing from declaration of `%D'",
3837                                   t);
3838                       warning_with_file_and_line (file, line,
3839                                                   "previous declaration of `%s'",
3840                                                   decl_as_string (t, 0));
3841                     }
3842
3843                   /* Now fix things so it'll do what they expect.  */
3844                   if (current_function_decl)
3845                     TREE_PUBLIC (current_function_decl) = 0;
3846                 }
3847               /* Due to interference in memory reclamation (X may be
3848                  obstack-deallocated at this point), we must guard against
3849                  one really special case.  [jason: This should be handled
3850                  by start_function]  */
3851               if (current_function_decl == x)
3852                 current_function_decl = t;
3853 #endif
3854               if (TREE_CODE (t) == TYPE_DECL)
3855                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3856               else if (TREE_CODE (t) == FUNCTION_DECL)
3857                 check_default_args (t);
3858
3859               return t;
3860             }
3861           else if (DECL_MAIN_P (x))
3862             {
3863               /* A redeclaration of main, but not a duplicate of the
3864                  previous one.
3865
3866                  [basic.start.main]
3867
3868                  This function shall not be overloaded.  */
3869               cp_error_at ("invalid redeclaration of `%D'", t);
3870               cp_error ("as `%D'", x);
3871               /* We don't try to push this declaration since that
3872                  causes a crash.  */
3873               return x;
3874             }
3875         }
3876
3877       check_template_shadow (x);
3878
3879       /* If this is a function conjured up by the backend, massage it
3880          so it looks friendly.  */
3881       if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_LANG_SPECIFIC (x))
3882         {
3883           retrofit_lang_decl (x);
3884           DECL_LANGUAGE (x) = lang_c;
3885         }
3886
3887       if (DECL_NON_THUNK_FUNCTION_P (x) && ! 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               && !DECL_EXTERN_C_FUNCTION_P (x))
3984             {
3985               if (TREE_CODE (x) == FUNCTION_DECL)
3986                 my_friendly_assert
3987                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3988                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3989               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3990             }
3991
3992           /* Don't forget if the function was used via an implicit decl.  */
3993           if (IDENTIFIER_IMPLICIT_DECL (name)
3994               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3995             TREE_USED (x) = 1;
3996
3997           /* Don't forget if its address was taken in that way.  */
3998           if (IDENTIFIER_IMPLICIT_DECL (name)
3999               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4000             TREE_ADDRESSABLE (x) = 1;
4001
4002           /* Warn about mismatches against previous implicit decl.  */
4003           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4004               /* If this real decl matches the implicit, don't complain.  */
4005               && ! (TREE_CODE (x) == FUNCTION_DECL
4006                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4007             cp_warning
4008               ("`%D' was previously implicitly declared to return `int'", x);
4009
4010           /* If new decl is `static' and an `extern' was seen previously,
4011              warn about it.  */
4012           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4013             warn_extern_redeclared_static (x, t);
4014         }
4015       else
4016         {
4017           /* Here to install a non-global value.  */
4018           tree oldlocal = IDENTIFIER_VALUE (name);
4019           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4020
4021           if (need_new_binding)
4022             {
4023               push_local_binding (name, x, 0);
4024               /* Because push_local_binding will hook X on to the
4025                  current_binding_level's name list, we don't want to
4026                  do that again below.  */
4027               need_new_binding = 0;
4028             }
4029
4030           /* If this is a TYPE_DECL, push it into the type value slot.  */
4031           if (TREE_CODE (x) == TYPE_DECL)
4032             set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4033                                                   current_binding_level);
4034
4035           /* Clear out any TYPE_DECL shadowed by a namespace so that
4036              we won't think this is a type.  The C struct hack doesn't
4037              go through namespaces.  */
4038           if (TREE_CODE (x) == NAMESPACE_DECL)
4039             set_identifier_type_value_with_scope (name, NULL_TREE,
4040                                                   current_binding_level);
4041
4042           if (oldlocal)
4043             {
4044               tree d = oldlocal;
4045
4046               while (oldlocal
4047                      && TREE_CODE (oldlocal) == VAR_DECL
4048                      && DECL_DEAD_FOR_LOCAL (oldlocal))
4049                 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4050
4051               if (oldlocal == NULL_TREE)
4052                 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4053             }
4054
4055           /* If this is an extern function declaration, see if we
4056              have a global definition or declaration for the function.  */
4057           if (oldlocal == NULL_TREE
4058               && DECL_EXTERNAL (x)
4059               && oldglobal != NULL_TREE
4060               && TREE_CODE (x) == FUNCTION_DECL
4061               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4062             {
4063               /* We have one.  Their types must agree.  */
4064               if (decls_match (x, oldglobal))
4065                 /* OK */;
4066               else
4067                 {
4068                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4069                   cp_warning_at ("global declaration `%#D'", oldglobal);
4070                 }
4071             }
4072           /* If we have a local external declaration,
4073              and no file-scope declaration has yet been seen,
4074              then if we later have a file-scope decl it must not be static.  */
4075           if (oldlocal == NULL_TREE
4076               && oldglobal == NULL_TREE
4077               && DECL_EXTERNAL (x)
4078               && TREE_PUBLIC (x))
4079             TREE_PUBLIC (name) = 1;
4080
4081           /* Warn if shadowing an argument at the top level of the body.  */
4082           if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4083               /* Inline decls shadow nothing.  */
4084               && !DECL_FROM_INLINE (x)
4085               && TREE_CODE (oldlocal) == PARM_DECL
4086               /* Don't complain if it's from an enclosing function.  */
4087               && DECL_CONTEXT (oldlocal) == current_function_decl
4088               && TREE_CODE (x) != PARM_DECL)
4089             {
4090               /* Go to where the parms should be and see if we
4091                  find them there.  */
4092               struct binding_level *b = current_binding_level->level_chain;
4093
4094               if (cleanup_label)
4095                 b = b->level_chain;
4096
4097               /* ARM $8.3 */
4098               if (b->parm_flag == 1)
4099                 cp_error ("declaration of `%#D' shadows a parameter", name);
4100             }
4101
4102           /* Maybe warn if shadowing something else.  */
4103           if (warn_shadow && !DECL_EXTERNAL (x)
4104               /* Inline decls shadow nothing.  */
4105               && !DECL_FROM_INLINE (x)
4106               /* No shadow warnings for internally generated vars.  */
4107               && ! DECL_ARTIFICIAL (x)
4108               /* No shadow warnings for vars made for inlining.  */
4109               && ! DECL_FROM_INLINE (x))
4110             {
4111               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4112                 warning ("declaration of `%s' shadows a parameter",
4113                         IDENTIFIER_POINTER (name));
4114               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4115                        && current_class_ptr
4116                        && !TREE_STATIC (name))
4117                 warning ("declaration of `%s' shadows a member of `this'",
4118                         IDENTIFIER_POINTER (name));
4119               else if (oldlocal != NULL_TREE)
4120                 warning ("declaration of `%s' shadows previous local",
4121                         IDENTIFIER_POINTER (name));
4122               else if (oldglobal != NULL_TREE)
4123                 /* XXX shadow warnings in outer-more namespaces */
4124                 warning ("declaration of `%s' shadows global declaration",
4125                         IDENTIFIER_POINTER (name));
4126             }
4127         }
4128
4129       if (TREE_CODE (x) == FUNCTION_DECL)
4130         check_default_args (x);
4131
4132       /* Keep count of variables in this level with incomplete type.  */
4133       if (TREE_CODE (x) == VAR_DECL
4134           && TREE_TYPE (x) != error_mark_node
4135           && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
4136                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4137               /* RTTI TD entries are created while defining the type_info.  */
4138               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4139                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4140         {
4141           if (namespace_bindings_p ())
4142             namespace_scope_incomplete
4143               = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4144           else
4145             current_binding_level->incomplete
4146               = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4147         }
4148     }
4149
4150   if (need_new_binding)
4151     add_decl_to_level (x,
4152                        DECL_NAMESPACE_SCOPE_P (x)
4153                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4154                        : current_binding_level);
4155
4156   return x;
4157 }
4158
4159 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4160    caller to set DECL_CONTEXT properly.  */
4161
4162 static tree
4163 pushdecl_with_scope (x, level)
4164      tree x;
4165      struct binding_level *level;
4166 {
4167   register struct binding_level *b;
4168   tree function_decl = current_function_decl;
4169
4170   current_function_decl = NULL_TREE;
4171   if (level->parm_flag == 2)
4172     {
4173       b = class_binding_level;
4174       class_binding_level = level;
4175       pushdecl_class_level (x);
4176       class_binding_level = b;
4177     }
4178   else
4179     {
4180       b = current_binding_level;
4181       current_binding_level = level;
4182       x = pushdecl (x);
4183       current_binding_level = b;
4184     }
4185   current_function_decl = function_decl;
4186   return x;
4187 }
4188
4189 /* Like pushdecl, only it places X in the current namespace,
4190    if appropriate.  */
4191
4192 tree
4193 pushdecl_namespace_level (x)
4194      tree x;
4195 {
4196   register struct binding_level *b = current_binding_level;
4197   register tree t;
4198
4199   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4200
4201   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4202      what we want.  */
4203   if (TREE_CODE (x) == TYPE_DECL)
4204     {
4205       tree name = DECL_NAME (x);
4206       tree newval;
4207       tree *ptr = (tree *)0;
4208       for (; b != global_binding_level; b = b->level_chain)
4209         {
4210           tree shadowed = b->type_shadowed;
4211           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4212             if (TREE_PURPOSE (shadowed) == name)
4213               {
4214                 ptr = &TREE_VALUE (shadowed);
4215                 /* Can't break out of the loop here because sometimes
4216                    a binding level will have duplicate bindings for
4217                    PT names.  It's gross, but I haven't time to fix it.  */
4218               }
4219         }
4220       newval = TREE_TYPE (x);
4221       if (ptr == (tree *)0)
4222         {
4223           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4224              up here if this is changed to an assertion.  --KR  */
4225           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4226         }
4227       else
4228         {
4229           *ptr = newval;
4230         }
4231     }
4232   return t;
4233 }
4234
4235 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4236    if appropriate.  */
4237
4238 tree
4239 pushdecl_top_level (x)
4240      tree x;
4241 {
4242   push_to_top_level ();
4243   x = pushdecl_namespace_level (x);
4244   pop_from_top_level ();
4245   return x;
4246 }
4247
4248 /* Make the declaration of X appear in CLASS scope.  */
4249
4250 void
4251 pushdecl_class_level (x)
4252      tree x;
4253 {
4254   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4255      scope looks for the pre-mangled name.  */
4256   register tree name;
4257
4258   if (TREE_CODE (x) == OVERLOAD)
4259     x = OVL_CURRENT (x);
4260   name = DECL_NAME (x);
4261
4262   if (name)
4263     {
4264       push_class_level_binding (name, x);
4265       if (TREE_CODE (x) == TYPE_DECL)
4266         set_identifier_type_value (name, TREE_TYPE (x));
4267     }
4268   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4269     {
4270       tree f;
4271
4272       for (f = TYPE_FIELDS (TREE_TYPE (x));
4273            f;
4274            f = TREE_CHAIN (f))
4275         pushdecl_class_level (f);
4276     }
4277 }
4278
4279 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4280    DECL, or a modified version thereof.  */
4281
4282 tree
4283 maybe_push_decl (decl)
4284      tree decl;
4285 {
4286   tree type = TREE_TYPE (decl);
4287
4288   /* Add this decl to the current binding level, but not if it comes
4289      from another scope, e.g. a static member variable.  TEM may equal
4290      DECL or it may be a previous decl of the same name.  */
4291   if (decl == error_mark_node
4292       || (TREE_CODE (decl) != PARM_DECL
4293           && DECL_CONTEXT (decl) != NULL_TREE
4294           /* Definitions of namespace members outside their namespace are
4295              possible. */
4296           && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4297       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4298       || TREE_CODE (type) == UNKNOWN_TYPE
4299       /* The declaration of a template specialization does not affect
4300          the functions available for overload resolution, so we do not
4301          call pushdecl.  */
4302       || (TREE_CODE (decl) == FUNCTION_DECL
4303           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4304     return decl;
4305   else
4306     return pushdecl (decl);
4307 }
4308
4309 /* Make the declaration(s) of X appear in CLASS scope
4310    under the name NAME.  */
4311
4312 void
4313 push_class_level_binding (name, x)
4314      tree name;
4315      tree x;
4316 {
4317   tree binding;
4318   /* The class_binding_level will be NULL if x is a template
4319      parameter name in a member template.  */
4320   if (!class_binding_level)
4321     return;
4322
4323   /* Make sure that this new member does not have the same name
4324      as a template parameter.  */
4325   if (TYPE_BEING_DEFINED (current_class_type))
4326     check_template_shadow (x);
4327
4328   /* If this declaration shadows a declaration from an enclosing
4329      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4330      we leave this class.  Record the shadowed declaration here.  */
4331   binding = IDENTIFIER_BINDING (name);
4332   if (binding
4333       && ((TREE_CODE (x) == OVERLOAD
4334            && BINDING_VALUE (binding)
4335            && is_overloaded_fn (BINDING_VALUE (binding)))
4336           || INHERITED_VALUE_BINDING_P (binding)))
4337     {
4338       tree shadow;
4339       tree old_decl;
4340
4341       /* If the old binding was from a base class, and was for a tag
4342          name, slide it over to make room for the new binding.  The
4343          old binding is still visible if explicitly qualified with a
4344          class-key.  */
4345       if (INHERITED_VALUE_BINDING_P (binding)
4346           && BINDING_VALUE (binding)
4347           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4348           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4349           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4350         {
4351           old_decl = BINDING_TYPE (binding);
4352           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4353           BINDING_VALUE (binding) = NULL_TREE;
4354           INHERITED_VALUE_BINDING_P (binding) = 0;
4355         }
4356       else
4357         old_decl = BINDING_VALUE (binding);
4358
4359       /* There was already a binding for X containing fewer
4360          functions than are named in X.  Find the previous
4361          declaration of X on the class-shadowed list, and update it.  */
4362       for (shadow = class_binding_level->class_shadowed;
4363            shadow;
4364            shadow = TREE_CHAIN (shadow))
4365         if (TREE_PURPOSE (shadow) == name
4366             && TREE_TYPE (shadow) == old_decl)
4367           {
4368             BINDING_VALUE (binding) = x;
4369             INHERITED_VALUE_BINDING_P (binding) = 0;
4370             TREE_TYPE (shadow) = x;
4371             return;
4372           }
4373     }
4374
4375   /* If we didn't replace an existing binding, put the binding on the
4376      stack of bindings for the identifier, and update
4377      IDENTIFIER_CLASS_VALUE.  */
4378   if (push_class_binding (name, x))
4379     {
4380       class_binding_level->class_shadowed
4381         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4382                      class_binding_level->class_shadowed);
4383       /* Record the value we are binding NAME to so that we can know
4384          what to pop later.  */
4385       TREE_TYPE (class_binding_level->class_shadowed) = x;
4386     }
4387 }
4388
4389 /* Insert another USING_DECL into the current binding level,
4390    returning this declaration. If this is a redeclaration,
4391    do nothing and return NULL_TREE.  */
4392
4393 tree
4394 push_using_decl (scope, name)
4395      tree scope;
4396      tree name;
4397 {
4398   tree decl;
4399
4400   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4401   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4402   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4403     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4404       break;
4405   if (decl)
4406     return NULL_TREE;
4407   decl = build_lang_decl (USING_DECL, name, void_type_node);
4408   DECL_INITIAL (decl) = scope;
4409   TREE_CHAIN (decl) = current_binding_level->usings;
4410   current_binding_level->usings = decl;
4411   return decl;
4412 }
4413
4414 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4415    changed (i.e. there was already a directive), or the fresh
4416    TREE_LIST otherwise.  */
4417
4418 tree
4419 push_using_directive (used)
4420      tree used;
4421 {
4422   tree ud = current_binding_level->using_directives;
4423   tree iter, ancestor;
4424
4425   /* Check if we already have this. */
4426   if (purpose_member (used, ud) != NULL_TREE)
4427     return NULL_TREE;
4428
4429   /* Recursively add all namespaces used. */
4430   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4431     push_using_directive (TREE_PURPOSE (iter));
4432
4433   ancestor = namespace_ancestor (current_decl_namespace (), used);
4434   ud = current_binding_level->using_directives;
4435   ud = tree_cons (used, ancestor, ud);
4436   current_binding_level->using_directives = ud;
4437   return ud;
4438 }
4439
4440 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4441    other definitions already in place.  We get around this by making
4442    the value of the identifier point to a list of all the things that
4443    want to be referenced by that name.  It is then up to the users of
4444    that name to decide what to do with that list.
4445
4446    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4447    DECL_TEMPLATE_RESULT.  It is dealt with the same way.
4448
4449    FLAGS is a bitwise-or of the following values:
4450      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4451                  namespace scope.
4452      PUSH_USING: DECL is being pushed as the result of a using
4453                  declaration.
4454
4455    The value returned may be a previous declaration if we guessed wrong
4456    about what language DECL should belong to (C or C++).  Otherwise,
4457    it's always DECL (and never something that's not a _DECL).  */
4458
4459 tree
4460 push_overloaded_decl (decl, flags)
4461      tree decl;
4462      int flags;
4463 {
4464   tree name = DECL_NAME (decl);
4465   tree old;
4466   tree new_binding;
4467   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4468
4469   if (doing_global)
4470     old = namespace_binding (name, DECL_CONTEXT (decl));
4471   else
4472     old = lookup_name_current_level (name);
4473
4474   if (old)
4475     {
4476       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4477         {
4478           tree t = TREE_TYPE (old);
4479           if (IS_AGGR_TYPE (t) && warn_shadow
4480               && (! DECL_IN_SYSTEM_HEADER (decl)
4481                   || ! DECL_IN_SYSTEM_HEADER (old)))
4482             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4483           old = NULL_TREE;
4484         }
4485       else if (is_overloaded_fn (old))
4486         {
4487           tree tmp;
4488
4489           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4490             {
4491               tree fn = OVL_CURRENT (tmp);
4492
4493               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4494                   && !(flags & PUSH_USING)
4495                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4496                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4497                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4498                           decl, fn);
4499
4500               if (duplicate_decls (decl, fn))
4501                 return fn;
4502             }
4503         }
4504       else
4505         {
4506           cp_error_at ("previous non-function declaration `%#D'", old);
4507           cp_error ("conflicts with function declaration `%#D'", decl);
4508           return decl;
4509         }
4510     }
4511
4512   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4513     {
4514       if (old && TREE_CODE (old) != OVERLOAD)
4515         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4516       else
4517         new_binding = ovl_cons (decl, old);
4518       if (flags & PUSH_USING)
4519         OVL_USED (new_binding) = 1;
4520     }
4521   else
4522     /* NAME is not ambiguous.  */
4523     new_binding = decl;
4524
4525   if (doing_global)
4526     set_namespace_binding (name, current_namespace, new_binding);
4527   else
4528     {
4529       /* We only create an OVERLOAD if there was a previous binding at
4530          this level, or if decl is a template. In the former case, we
4531          need to remove the old binding and replace it with the new
4532          binding.  We must also run through the NAMES on the binding
4533          level where the name was bound to update the chain.  */
4534
4535       if (TREE_CODE (new_binding) == OVERLOAD && old)
4536         {
4537           tree *d;
4538
4539           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4540                *d;
4541                d = &TREE_CHAIN (*d))
4542             if (*d == old
4543                 || (TREE_CODE (*d) == TREE_LIST
4544                     && TREE_VALUE (*d) == old))
4545               {
4546                 if (TREE_CODE (*d) == TREE_LIST)
4547                   /* Just replace the old binding with the new.  */
4548                   TREE_VALUE (*d) = new_binding;
4549                 else
4550                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4551                   *d = tree_cons (NULL_TREE, new_binding,
4552                                   TREE_CHAIN (*d));
4553
4554                 /* And update the CPLUS_BINDING node.  */
4555                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4556                   = new_binding;
4557                 return decl;
4558               }
4559
4560           /* We should always find a previous binding in this case.  */
4561           my_friendly_abort (0);
4562         }
4563
4564       /* Install the new binding.  */
4565       push_local_binding (name, new_binding, flags);
4566     }
4567
4568   return decl;
4569 }
4570 \f
4571 /* Generate an implicit declaration for identifier FUNCTIONID
4572    as a function of type int ().  Print a warning if appropriate.  */
4573
4574 tree
4575 implicitly_declare (functionid)
4576      tree functionid;
4577 {
4578   register tree decl;
4579
4580   /* We used to reuse an old implicit decl here,
4581      but this loses with inline functions because it can clobber
4582      the saved decl chains.  */
4583   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4584
4585   DECL_EXTERNAL (decl) = 1;
4586   TREE_PUBLIC (decl) = 1;
4587
4588   /* ISO standard says implicit declarations are in the innermost block.
4589      So we record the decl in the standard fashion.  */
4590   pushdecl (decl);
4591   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4592
4593   if (warn_implicit
4594       /* Only one warning per identifier.  */
4595       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4596     {
4597       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4598     }
4599
4600   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4601
4602   return decl;
4603 }
4604
4605 /* Return zero if the declaration NEWDECL is valid
4606    when the declaration OLDDECL (assumed to be for the same name)
4607    has already been seen.
4608    Otherwise return an error message format string with a %s
4609    where the identifier should go.  */
4610
4611 static const char *
4612 redeclaration_error_message (newdecl, olddecl)
4613      tree newdecl, olddecl;
4614 {
4615   if (TREE_CODE (newdecl) == TYPE_DECL)
4616     {
4617       /* Because C++ can put things into name space for free,
4618          constructs like "typedef struct foo { ... } foo"
4619          would look like an erroneous redeclaration.  */
4620       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4621         return 0;
4622       else
4623         return "redefinition of `%#D'";
4624     }
4625   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4626     {
4627       /* If this is a pure function, its olddecl will actually be
4628          the original initialization to `0' (which we force to call
4629          abort()).  Don't complain about redefinition in this case.  */
4630       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4631         return 0;
4632
4633       /* If both functions come from different namespaces, this is not
4634          a redeclaration - this is a conflict with a used function. */
4635       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4636           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4637         return "`%D' conflicts with used function";
4638
4639       /* We'll complain about linkage mismatches in
4640          warn_extern_redeclared_static.  */
4641
4642       /* Defining the same name twice is no good.  */
4643       if (DECL_INITIAL (olddecl) != NULL_TREE
4644           && DECL_INITIAL (newdecl) != NULL_TREE)
4645         {
4646           if (DECL_NAME (olddecl) == NULL_TREE)
4647             return "`%#D' not declared in class";
4648           else
4649             return "redefinition of `%#D'";
4650         }
4651       return 0;
4652     }
4653   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4654     {
4655       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4656            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4657            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4658           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4659               && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4660               && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4661         return "redefinition of `%#D'";
4662       return 0;
4663     }
4664   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4665     {
4666       /* Objects declared at top level:  */
4667       /* If at least one is a reference, it's ok.  */
4668       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4669         return 0;
4670       /* Reject two definitions.  */
4671       return "redefinition of `%#D'";
4672     }
4673   else
4674     {
4675       /* Objects declared with block scope:  */
4676       /* Reject two definitions, and reject a definition
4677          together with an external reference.  */
4678       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4679         return "redeclaration of `%#D'";
4680       return 0;
4681     }
4682 }
4683 \f
4684 /* Create a new label, named ID.  */
4685
4686 static tree
4687 make_label_decl (id, local_p)
4688      tree id;
4689      int local_p;
4690 {
4691   tree decl;
4692
4693   decl = build_decl (LABEL_DECL, id, void_type_node);
4694   if (expanding_p)
4695     /* Make sure every label has an rtx.  */
4696     label_rtx (decl);
4697
4698   DECL_CONTEXT (decl) = current_function_decl;
4699   DECL_MODE (decl) = VOIDmode;
4700   C_DECLARED_LABEL_FLAG (decl) = local_p;
4701
4702   /* Say where one reference is to the label, for the sake of the
4703      error if it is not defined.  */
4704   DECL_SOURCE_LINE (decl) = lineno;
4705   DECL_SOURCE_FILE (decl) = input_filename;
4706
4707   /* Record the fact that this identifier is bound to this label.  */
4708   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4709
4710   /* Record this label on the list of used labels so that we can check
4711      at the end of the function to see whether or not the label was
4712      actually defined.  */
4713   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4714       && (named_label_uses == NULL
4715           || named_label_uses->names_in_scope != current_binding_level->names
4716           || named_label_uses->label_decl != decl))
4717     {
4718       struct named_label_list *new_ent;
4719       new_ent
4720         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4721       new_ent->label_decl = decl;
4722       new_ent->names_in_scope = current_binding_level->names;
4723       new_ent->binding_level = current_binding_level;
4724       new_ent->lineno_o_goto = lineno;
4725       new_ent->filename_o_goto = input_filename;
4726       new_ent->next = named_label_uses;
4727       named_label_uses = new_ent;
4728     }
4729
4730   return decl;
4731 }
4732
4733 /* Look for a label named ID in the current function.  If one cannot
4734    be found, create one.  (We keep track of used, but undefined,
4735    labels, and complain about them at the end of a function.)  */
4736
4737 tree
4738 lookup_label (id)
4739      tree id;
4740 {
4741   tree decl;
4742
4743   /* You can't use labels at global scope.  */
4744   if (current_function_decl == NULL_TREE)
4745     {
4746       error ("label `%s' referenced outside of any function",
4747              IDENTIFIER_POINTER (id));
4748       return NULL_TREE;
4749     }
4750
4751   /* See if we've already got this label.  */
4752   decl = IDENTIFIER_LABEL_VALUE (id);
4753   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4754     return decl;
4755
4756   /* Record this label on the list of labels used in this function.
4757      We do this before calling make_label_decl so that we get the
4758      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4759   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4760                             named_labels);
4761   /* We need a new label.  */
4762   decl = make_label_decl (id, /*local_p=*/0);
4763   /* Now fill in the information we didn't have before.  */
4764   TREE_VALUE (named_labels) = decl;
4765
4766   return decl;
4767 }
4768
4769 /* Declare a local label named ID.  */
4770
4771 tree
4772 declare_local_label (id)
4773      tree id;
4774 {
4775   tree decl;
4776
4777   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4778      this scope we can restore the old value of
4779      IDENTIFIER_TYPE_VALUE.  */
4780   current_binding_level->shadowed_labels
4781     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4782                  current_binding_level->shadowed_labels);
4783   /* Look for the label.  */
4784   decl = make_label_decl (id, /*local_p=*/1);
4785   /* Now fill in the information we didn't have before.  */
4786   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4787
4788   return decl;
4789 }
4790
4791 /* Define a label, specifying the location in the source file.
4792    Return the LABEL_DECL node for the label, if the definition is valid.
4793    Otherwise return 0.  */
4794
4795 tree
4796 define_label (filename, line, name)
4797      char *filename;
4798      int line;
4799      tree name;
4800 {
4801   tree decl = lookup_label (name);
4802
4803   /* After labels, make any new cleanups go into their
4804      own new (temporary) binding contour.  */
4805   current_binding_level->more_cleanups_ok = 0;
4806
4807   if (name == get_identifier ("wchar_t"))
4808     cp_pedwarn ("label named wchar_t");
4809
4810   if (DECL_INITIAL (decl) != NULL_TREE)
4811     {
4812       cp_error ("duplicate label `%D'", decl);
4813       return 0;
4814     }
4815   else
4816     {
4817       struct named_label_list *uses, *prev;
4818       int identified = 0;
4819       int saw_eh = 0;
4820
4821       /* Mark label as having been defined.  */
4822       DECL_INITIAL (decl) = error_mark_node;
4823       /* Say where in the source.  */
4824       DECL_SOURCE_FILE (decl) = filename;
4825       DECL_SOURCE_LINE (decl) = line;
4826
4827       prev = NULL;
4828       uses = named_label_uses;
4829       while (uses != NULL)
4830         if (uses->label_decl == decl)
4831           {
4832             struct binding_level *b = current_binding_level;
4833             while (b)
4834               {
4835                 tree new_decls = b->names;
4836                 tree old_decls = (b == uses->binding_level)
4837                                   ? uses->names_in_scope : NULL_TREE;
4838                 while (new_decls != old_decls)
4839                   {
4840                     if (TREE_CODE (new_decls) == VAR_DECL
4841                         /* Don't complain about crossing initialization
4842                            of internal entities.  They can't be accessed,
4843                            and they should be cleaned up
4844                            by the time we get to the label.  */
4845                         && ! DECL_ARTIFICIAL (new_decls)
4846                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4847                              && pod_type_p (TREE_TYPE (new_decls))))
4848                       {
4849                         /* This is really only important if we're crossing
4850                            an initialization.  The POD stuff is just
4851                            pedantry; why should it matter if the class
4852                            contains a field of pointer to member type?  */
4853                         int problem = (DECL_INITIAL (new_decls)
4854                                        || (TYPE_NEEDS_CONSTRUCTING
4855                                            (TREE_TYPE (new_decls))));
4856
4857                         if (! identified)
4858                           {
4859                             if (problem)
4860                               {
4861                                 cp_error ("jump to label `%D'", decl);
4862                                 error_with_file_and_line
4863                                   (uses->filename_o_goto,
4864                                    uses->lineno_o_goto, "  from here");
4865                               }
4866                             else
4867                               {
4868                                 cp_pedwarn ("jump to label `%D'", decl);
4869                                 pedwarn_with_file_and_line
4870                                   (uses->filename_o_goto,
4871                                    uses->lineno_o_goto, "  from here");
4872                               }
4873                             identified = 1;
4874                           }
4875
4876                         if (problem)
4877                           cp_error_at ("  crosses initialization of `%#D'",
4878                                        new_decls);
4879                         else
4880                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4881                                          new_decls);
4882                       }
4883                     new_decls = TREE_CHAIN (new_decls);
4884                   }
4885                 if (b == uses->binding_level)
4886                   break;
4887                 if (b->eh_region && ! saw_eh)
4888                   {
4889                     if (! identified)
4890                       {
4891                         cp_error ("jump to label `%D'", decl);
4892                         error_with_file_and_line
4893                           (uses->filename_o_goto,
4894                            uses->lineno_o_goto, "  from here");
4895                         identified = 1;
4896                       }
4897                     error ("  enters exception handling block");
4898                     saw_eh = 1;
4899                   }
4900                 b = b->level_chain;
4901               }
4902
4903             if (prev != NULL)
4904               prev->next = uses->next;
4905             else
4906               named_label_uses = uses->next;
4907
4908             uses = uses->next;
4909           }
4910         else
4911           {
4912             prev = uses;
4913             uses = uses->next;
4914           }
4915       current_function_return_value = NULL_TREE;
4916       return decl;
4917     }
4918 }
4919
4920 struct cp_switch
4921 {
4922   struct binding_level *level;
4923   struct cp_switch *next;
4924 };
4925
4926 static struct cp_switch *switch_stack;
4927
4928 void
4929 push_switch ()
4930 {
4931   struct cp_switch *p
4932     = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
4933   p->level = current_binding_level;
4934   p->next = switch_stack;
4935   switch_stack = p;
4936 }
4937
4938 void
4939 pop_switch ()
4940 {
4941   struct cp_switch *cs;
4942   
4943   cs = switch_stack;
4944   switch_stack = switch_stack->next;
4945   free (cs);
4946 }
4947
4948 /* Note that we've seen a definition of a case label, and complain if this
4949    is a bad place for one.  */
4950
4951 void
4952 define_case_label ()
4953 {
4954   tree cleanup = last_cleanup_this_contour ();
4955   struct binding_level *b = current_binding_level;
4956   int identified = 0;
4957
4958   if (! switch_stack)
4959     /* Don't crash; we'll complain in do_case.  */
4960     return;
4961
4962   if (cleanup)
4963     {
4964       static int explained = 0;
4965       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4966       warning ("where case label appears here");
4967       if (!explained)
4968         {
4969           warning ("(enclose actions of previous case statements requiring");
4970           warning ("destructors in their own binding contours.)");
4971           explained = 1;
4972         }
4973     }
4974
4975   for (; b && b != switch_stack->level; b = b->level_chain)
4976     {
4977       tree new_decls = b->names;
4978       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4979         {
4980           if (TREE_CODE (new_decls) == VAR_DECL
4981               /* Don't complain about crossing initialization
4982                  of internal entities.  They can't be accessed,
4983                  and they should be cleaned up
4984                  by the time we get to the label.  */
4985               && ! DECL_ARTIFICIAL (new_decls)
4986               && ((DECL_INITIAL (new_decls) != NULL_TREE
4987                    && DECL_INITIAL (new_decls) != error_mark_node)
4988                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4989             {
4990               if (! identified)
4991                 error ("jump to case label");
4992               identified = 1;
4993               cp_error_at ("  crosses initialization of `%#D'",
4994                            new_decls);
4995             }
4996         }
4997     }
4998
4999   /* After labels, make any new cleanups go into their
5000      own new (temporary) binding contour.  */
5001
5002   current_binding_level->more_cleanups_ok = 0;
5003   current_function_return_value = NULL_TREE;
5004 }
5005 \f
5006 /* Return the list of declarations of the current level.
5007    Note that this list is in reverse order unless/until
5008    you nreverse it; and when you do nreverse it, you must
5009    store the result back using `storedecls' or you will lose.  */
5010
5011 tree
5012 getdecls ()
5013 {
5014   return current_binding_level->names;
5015 }
5016
5017 /* Return the list of type-tags (for structs, etc) of the current level.  */
5018
5019 tree
5020 gettags ()
5021 {
5022   return current_binding_level->tags;
5023 }
5024
5025 /* Store the list of declarations of the current level.
5026    This is done for the parameter declarations of a function being defined,
5027    after they are modified in the light of any missing parameters.  */
5028
5029 static void
5030 storedecls (decls)
5031      tree decls;
5032 {
5033   current_binding_level->names = decls;
5034 }
5035
5036 /* Similarly, store the list of tags of the current level.  */
5037
5038 void
5039 storetags (tags)
5040      tree tags;
5041 {
5042   current_binding_level->tags = tags;
5043 }
5044 \f
5045 /* Given NAME, an IDENTIFIER_NODE,
5046    return the structure (or union or enum) definition for that name.
5047    Searches binding levels from BINDING_LEVEL up to the global level.
5048    If THISLEVEL_ONLY is nonzero, searches only the specified context
5049    (but skips any tag-transparent contexts to find one that is
5050    meaningful for tags).
5051    FORM says which kind of type the caller wants;
5052    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5053    If the wrong kind of type is found, and it's not a template, an error is
5054    reported.  */
5055
5056 static tree
5057 lookup_tag (form, name, binding_level, thislevel_only)
5058      enum tree_code form;
5059      tree name;
5060      struct binding_level *binding_level;
5061      int thislevel_only;
5062 {
5063   register struct binding_level *level;
5064   /* Non-zero if, we should look past a template parameter level, even
5065      if THISLEVEL_ONLY.  */
5066   int allow_template_parms_p = 1;
5067
5068   for (level = binding_level; level; level = level->level_chain)
5069     {
5070       register tree tail;
5071       if (ANON_AGGRNAME_P (name))
5072         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5073           {
5074             /* There's no need for error checking here, because
5075                anon names are unique throughout the compilation.  */
5076             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5077               return TREE_VALUE (tail);
5078           }
5079       else if (level->namespace_p)
5080         /* Do namespace lookup. */
5081         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5082           {
5083             tree old = binding_for_name (name, tail);
5084
5085             /* If we just skipped past a template parameter level,
5086                even though THISLEVEL_ONLY, and we find a template
5087                class declaration, then we use the _TYPE node for the
5088                template.  See the example below.  */
5089             if (thislevel_only && !allow_template_parms_p
5090                 && old && BINDING_VALUE (old)
5091                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5092               old = TREE_TYPE (BINDING_VALUE (old));
5093             else
5094               old = BINDING_TYPE (old);
5095
5096             /* If it has an original type, it is a typedef, and we
5097                should not return it.  */
5098             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5099               old = NULL_TREE;
5100             if (old && TREE_CODE (old) != form
5101                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5102               {
5103                 cp_error ("`%#D' redeclared as %C", old, form);
5104                 return NULL_TREE;
5105               }
5106             if (old)
5107               return old;
5108             if (thislevel_only || tail == global_namespace)
5109               return NULL_TREE;
5110           }
5111       else
5112         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5113           {
5114             if (TREE_PURPOSE (tail) == name)
5115               {
5116                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5117                 /* Should tighten this up; it'll probably permit
5118                    UNION_TYPE and a struct template, for example.  */
5119                 if (code != form
5120                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5121                   {
5122                     /* Definition isn't the kind we were looking for.  */
5123                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5124                               form);
5125                     return NULL_TREE;
5126                   }
5127                 return TREE_VALUE (tail);
5128               }
5129           }
5130       if (thislevel_only && ! level->tag_transparent)
5131         {
5132           if (level->template_parms_p && allow_template_parms_p)
5133             {
5134               /* We must deal with cases like this:
5135
5136                    template <class T> struct S;
5137                    template <class T> struct S {};
5138
5139                  When looking up `S', for the second declaration, we
5140                  would like to find the first declaration.  But, we
5141                  are in the pseudo-global level created for the
5142                  template parameters, rather than the (surrounding)
5143                  namespace level.  Thus, we keep going one more level,
5144                  even though THISLEVEL_ONLY is non-zero.  */
5145               allow_template_parms_p = 0;
5146               continue;
5147             }
5148           else
5149             return NULL_TREE;
5150         }
5151     }
5152   return NULL_TREE;
5153 }
5154
5155 #if 0
5156 void
5157 set_current_level_tags_transparency (tags_transparent)
5158      int tags_transparent;
5159 {
5160   current_binding_level->tag_transparent = tags_transparent;
5161 }
5162 #endif
5163
5164 /* Given a type, find the tag that was defined for it and return the tag name.
5165    Otherwise return 0.  However, the value can never be 0
5166    in the cases in which this is used.
5167
5168    C++: If NAME is non-zero, this is the new name to install.  This is
5169    done when replacing anonymous tags with real tag names.  */
5170
5171 static tree
5172 lookup_tag_reverse (type, name)
5173      tree type;
5174      tree name;
5175 {
5176   register struct binding_level *level;
5177
5178   for (level = current_binding_level; level; level = level->level_chain)
5179     {
5180       register tree tail;
5181       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5182         {
5183           if (TREE_VALUE (tail) == type)
5184             {
5185               if (name)
5186                 TREE_PURPOSE (tail) = name;
5187               return TREE_PURPOSE (tail);
5188             }
5189         }
5190     }
5191   return NULL_TREE;
5192 }
5193 \f
5194 /* Look up NAME in the NAMESPACE.  */
5195
5196 tree
5197 lookup_namespace_name (namespace, name)
5198      tree namespace, name;
5199 {
5200   tree val;
5201   tree template_id = NULL_TREE;
5202
5203   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5204
5205   if (TREE_CODE (name) == NAMESPACE_DECL)
5206     /* This happens for A::B<int> when B is a namespace. */
5207     return name;
5208   else if (TREE_CODE (name) == TEMPLATE_DECL)
5209     {
5210       /* This happens for A::B where B is a template, and there are no
5211          template arguments.  */
5212       cp_error ("invalid use of `%D'", name);
5213       return error_mark_node;
5214     }
5215
5216   namespace = ORIGINAL_NAMESPACE (namespace);
5217
5218   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5219     {
5220       template_id = name;
5221       name = TREE_OPERAND (name, 0);
5222       if (TREE_CODE (name) == OVERLOAD)
5223         name = DECL_NAME (OVL_CURRENT (name));
5224       else if (DECL_P (name))
5225         name = DECL_NAME (name);
5226     }
5227
5228   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5229
5230   val = make_node (CPLUS_BINDING);
5231   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5232     return error_mark_node;
5233
5234   if (BINDING_VALUE (val))
5235     {
5236       val = BINDING_VALUE (val);
5237
5238       if (template_id)
5239         {
5240           if (DECL_CLASS_TEMPLATE_P (val))
5241             val = lookup_template_class (val,
5242                                          TREE_OPERAND (template_id, 1),
5243                                          /*in_decl=*/NULL_TREE,
5244                                          /*context=*/NULL_TREE,
5245                                          /*entering_scope=*/0);
5246           else if (DECL_FUNCTION_TEMPLATE_P (val)
5247                    || TREE_CODE (val) == OVERLOAD)
5248             val = lookup_template_function (val,
5249                                             TREE_OPERAND (template_id, 1));
5250           else
5251             {
5252               cp_error ("`%D::%D' is not a template",
5253                         namespace, name);
5254               return error_mark_node;
5255             }
5256         }
5257
5258       /* If we have a single function from a using decl, pull it out.  */
5259       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5260         val = OVL_FUNCTION (val);
5261       return val;
5262     }
5263
5264   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5265   return error_mark_node;
5266 }
5267
5268 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5269
5270 static unsigned long
5271 typename_hash (k)
5272      hash_table_key k;
5273 {
5274   unsigned long hash;
5275   tree t;
5276
5277   t = (tree) k;
5278   hash = (((unsigned long) TYPE_CONTEXT (t))
5279           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5280
5281   return hash;
5282 }
5283
5284 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5285
5286 static boolean
5287 typename_compare (k1, k2)
5288      hash_table_key k1;
5289      hash_table_key k2;
5290 {
5291   tree t1;
5292   tree t2;
5293   tree d1;
5294   tree d2;
5295
5296   t1 = (tree) k1;
5297   t2 = (tree) k2;
5298   d1 = TYPE_NAME (t1);
5299   d2 = TYPE_NAME (t2);
5300
5301   return (DECL_NAME (d1) == DECL_NAME (d2)
5302           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5303           && ((TREE_TYPE (t1) != NULL_TREE)
5304               == (TREE_TYPE (t2) != NULL_TREE))
5305           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5306           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5307 }
5308
5309 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5310    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5311    is non-NULL, this type is being created by the implicit typename
5312    extension, and BASE_TYPE is a type named `t' in some base class of
5313    `T' which depends on template parameters.
5314
5315    Returns the new TYPENAME_TYPE.  */
5316
5317 tree
5318 build_typename_type (context, name, fullname, base_type)
5319      tree context;
5320      tree name;
5321      tree fullname;
5322      tree base_type;
5323 {
5324   tree t;
5325   tree d;
5326   struct hash_entry* e;
5327
5328   static struct hash_table ht;
5329
5330   if (!ht.table)
5331     {
5332       static struct hash_table *h = &ht;
5333       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5334                             &typename_compare))
5335         fatal ("virtual memory exhausted");
5336       ggc_add_tree_hash_table_root (&h, 1);
5337     }
5338
5339   /* Build the TYPENAME_TYPE.  */
5340   t = make_aggr_type (TYPENAME_TYPE);
5341   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5342   TYPENAME_TYPE_FULLNAME (t) = fullname;
5343   TREE_TYPE (t) = base_type;
5344
5345   /* Build the corresponding TYPE_DECL.  */
5346   d = build_decl (TYPE_DECL, name, t);
5347   TYPE_NAME (TREE_TYPE (d)) = d;
5348   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5349   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5350   DECL_ARTIFICIAL (d) = 1;
5351
5352   /* See if we already have this type.  */
5353   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5354   if (e)
5355     t = (tree) e->key;
5356   else
5357     /* Insert the type into the table.  */
5358     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5359
5360   return t;
5361 }
5362
5363 /* Resolve `typename CONTEXT::NAME'.  Returns an appropriate type,
5364    unless an error occurs, in which case error_mark_node is returned.
5365    If COMPLAIN zero, don't complain about any errors that occur.  */
5366
5367 tree
5368 make_typename_type (context, name, complain)
5369      tree context, name;
5370      int complain;
5371 {
5372   tree fullname;
5373
5374   if (TYPE_P (name))
5375     {
5376       if (!(TYPE_LANG_SPECIFIC (name)
5377             && (CLASSTYPE_IS_TEMPLATE (name)
5378                 || CLASSTYPE_USE_TEMPLATE (name))))
5379         name = TYPE_IDENTIFIER (name);
5380       else
5381         /* Create a TEMPLATE_ID_EXPR for the type.  */
5382         name = build_nt (TEMPLATE_ID_EXPR,
5383                          CLASSTYPE_TI_TEMPLATE (name),
5384                          CLASSTYPE_TI_ARGS (name));
5385     }
5386   else if (TREE_CODE (name) == TYPE_DECL)
5387     name = DECL_NAME (name);
5388
5389   fullname = name;
5390
5391   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5392     {
5393       name = TREE_OPERAND (name, 0);
5394       if (TREE_CODE (name) == TEMPLATE_DECL)
5395         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5396     }
5397   if (TREE_CODE (name) != IDENTIFIER_NODE)
5398     my_friendly_abort (2000);
5399
5400   if (TREE_CODE (context) == NAMESPACE_DECL)
5401     {
5402       /* We can get here from typename_sub0 in the explicit_template_type
5403          expansion.  Just fail.  */
5404       if (complain)
5405         cp_error ("no class template named `%#T' in `%#T'",
5406                   name, context);
5407       return error_mark_node;
5408     }
5409
5410   if (! uses_template_parms (context)
5411       || currently_open_class (context))
5412     {
5413       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5414         {
5415           tree tmpl = NULL_TREE;
5416           if (IS_AGGR_TYPE (context))
5417             tmpl = lookup_field (context, name, 0, 0);
5418           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5419             {
5420               if (complain)
5421                 cp_error ("no class template named `%#T' in `%#T'",
5422                           name, context);
5423               return error_mark_node;
5424             }
5425
5426           return lookup_template_class (tmpl,
5427                                         TREE_OPERAND (fullname, 1),
5428                                         NULL_TREE, context,
5429                                         /*entering_scope=*/0);
5430         }
5431       else
5432         {
5433           tree t;
5434
5435           if (!IS_AGGR_TYPE (context))
5436             {
5437               if (complain)
5438                 cp_error ("no type named `%#T' in `%#T'", name, context);
5439               return error_mark_node;
5440             }
5441
5442           t = lookup_field (context, name, 0, 1);
5443           if (t)
5444             return TREE_TYPE (t);
5445         }
5446     }
5447
5448   /* If the CONTEXT is not a template type, then either the field is
5449      there now or its never going to be.  */
5450   if (!uses_template_parms (context))
5451     {
5452       if (complain)
5453         cp_error ("no type named `%#T' in `%#T'", name, context);
5454       return error_mark_node;
5455     }
5456
5457
5458   return build_typename_type (context, name, fullname,  NULL_TREE);
5459 }
5460
5461 /* Select the right _DECL from multiple choices. */
5462
5463 static tree
5464 select_decl (binding, flags)
5465      tree binding;
5466      int flags;
5467 {
5468   tree val;
5469   val = BINDING_VALUE (binding);
5470   if (LOOKUP_NAMESPACES_ONLY (flags))
5471     {
5472       /* We are not interested in types. */
5473       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5474         return val;
5475       return NULL_TREE;
5476     }
5477
5478   /* If we could have a type and
5479      we have nothing or we need a type and have none.  */
5480   if (BINDING_TYPE (binding)
5481       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5482                    && TREE_CODE (val) != TYPE_DECL)))
5483     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5484   /* Don't return non-types if we really prefer types. */
5485   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5486            && (TREE_CODE (val) != TEMPLATE_DECL
5487                || !DECL_CLASS_TEMPLATE_P (val)))
5488     val = NULL_TREE;
5489
5490   return val;
5491 }
5492
5493 /* Unscoped lookup of a global: iterate over current namespaces,
5494    considering using-directives.  If SPACESP is non-NULL, store a list
5495    of the namespaces we've considered in it.  */
5496
5497 tree
5498 unqualified_namespace_lookup (name, flags, spacesp)
5499      tree name;
5500      int flags;
5501      tree *spacesp;
5502 {
5503   tree b = make_node (CPLUS_BINDING);
5504   tree initial = current_decl_namespace();
5505   tree scope = initial;
5506   tree siter;
5507   struct binding_level *level;
5508   tree val = NULL_TREE;
5509
5510   if (spacesp)
5511     *spacesp = NULL_TREE;
5512
5513   for (; !val; scope = CP_DECL_CONTEXT (scope))
5514     {
5515       if (spacesp)
5516         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5517       val = binding_for_name (name, scope);
5518
5519       /* Initialize binding for this context. */
5520       BINDING_VALUE (b) = BINDING_VALUE (val);
5521       BINDING_TYPE (b) = BINDING_TYPE (val);
5522
5523       /* Add all _DECLs seen through local using-directives. */
5524       for (level = current_binding_level;
5525            !level->namespace_p;
5526            level = level->level_chain)
5527         if (!lookup_using_namespace (name, b, level->using_directives,
5528                                      scope, flags, spacesp))
5529           /* Give up because of error. */
5530           return error_mark_node;
5531
5532       /* Add all _DECLs seen through global using-directives. */
5533       /* XXX local and global using lists should work equally. */
5534       siter = initial;
5535       while (1)
5536         {
5537           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5538                                        scope, flags, spacesp))
5539             /* Give up because of error. */
5540             return error_mark_node;
5541           if (siter == scope) break;
5542           siter = CP_DECL_CONTEXT (siter);
5543         }
5544
5545       val = select_decl (b, flags);
5546       if (scope == global_namespace)
5547         break;
5548     }
5549   return val;
5550 }
5551
5552 /* Combine prefer_type and namespaces_only into flags.  */
5553
5554 static int
5555 lookup_flags (prefer_type, namespaces_only)
5556   int prefer_type, namespaces_only;
5557 {
5558   if (namespaces_only)
5559     return LOOKUP_PREFER_NAMESPACES;
5560   if (prefer_type > 1)
5561     return LOOKUP_PREFER_TYPES;
5562   if (prefer_type > 0)
5563     return LOOKUP_PREFER_BOTH;
5564   return 0;
5565 }
5566
5567 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5568    ignore it or not.  Subroutine of lookup_name_real.  */
5569
5570 static tree
5571 qualify_lookup (val, flags)
5572      tree val;
5573      int flags;
5574 {
5575   if (val == NULL_TREE)
5576     return val;
5577   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5578     return val;
5579   if ((flags & LOOKUP_PREFER_TYPES)
5580       && (TREE_CODE (val) == TYPE_DECL
5581           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5582               && DECL_CLASS_TEMPLATE_P (val))))
5583     return val;
5584   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5585     return NULL_TREE;
5586   return val;
5587 }
5588
5589 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5590    that.  */
5591
5592 static void
5593 warn_about_implicit_typename_lookup (typename, binding)
5594      tree typename;
5595      tree binding;
5596 {
5597   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5598   tree name = DECL_NAME (typename);
5599
5600   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5601          && CLASSTYPE_TEMPLATE_INFO (subtype)
5602          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5603       && ! (TREE_CODE (binding) == TYPE_DECL
5604             && same_type_p (TREE_TYPE (binding), subtype)))
5605     {
5606       cp_warning ("lookup of `%D' finds `%#D'",
5607                   name, binding);
5608       cp_warning ("  instead of `%D' from dependent base class",
5609                   typename);
5610       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5611                   constructor_name (current_class_type), name);
5612     }
5613 }
5614
5615 /* Look up NAME in the current binding level and its superiors in the
5616    namespace of variables, functions and typedefs.  Return a ..._DECL
5617    node of some kind representing its definition if there is only one
5618    such declaration, or return a TREE_LIST with all the overloaded
5619    definitions if there are many, or return 0 if it is undefined.
5620
5621    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5622    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5623    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5624    Otherwise we prefer non-TYPE_DECLs.
5625
5626    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5627    using IDENTIFIER_CLASS_VALUE.  */
5628
5629 static tree
5630 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5631      tree name;
5632      int prefer_type, nonclass, namespaces_only;
5633 {
5634   tree t;
5635   tree val = NULL_TREE;
5636   int yylex = 0;
5637   tree from_obj = NULL_TREE;
5638   int flags;
5639   int val_is_implicit_typename = 0;
5640
5641   /* Hack: copy flag set by parser, if set. */
5642   if (only_namespace_names)
5643     namespaces_only = 1;
5644
5645   if (prefer_type == -2)
5646     {
5647       extern int looking_for_typename;
5648       tree type = NULL_TREE;
5649
5650       yylex = 1;
5651       prefer_type = looking_for_typename;
5652
5653       flags = lookup_flags (prefer_type, namespaces_only);
5654       /* If the next thing is '<', class templates are types. */
5655       if (looking_for_template)
5656         flags |= LOOKUP_TEMPLATES_EXPECTED;
5657
5658       /* std:: becomes :: for now.  */
5659       if (got_scope == std_node)
5660         got_scope = void_type_node;
5661
5662       if (got_scope)
5663         type = got_scope;
5664       else if (got_object != error_mark_node)
5665         type = got_object;
5666
5667       if (type)
5668         {
5669           if (type == error_mark_node)
5670             return error_mark_node;
5671           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5672             type = TREE_TYPE (type);
5673
5674           if (TYPE_P (type))
5675             type = complete_type (type);
5676
5677           if (TREE_CODE (type) == VOID_TYPE)
5678             type = global_namespace;
5679           if (TREE_CODE (type) == NAMESPACE_DECL)
5680             {
5681               val = make_node (CPLUS_BINDING);
5682               flags |= LOOKUP_COMPLAIN;
5683               if (!qualified_lookup_using_namespace (name, type, val, flags))
5684                 return NULL_TREE;
5685               val = select_decl (val, flags);
5686             }
5687           else if (! IS_AGGR_TYPE (type)
5688                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5689                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5690                    || TREE_CODE (type) == TYPENAME_TYPE)
5691             /* Someone else will give an error about this if needed.  */
5692             val = NULL_TREE;
5693           else if (type == current_class_type)
5694             val = IDENTIFIER_CLASS_VALUE (name);
5695           else
5696             {
5697               val = lookup_member (type, name, 0, prefer_type);
5698               type_access_control (type, val);
5699             }
5700         }
5701       else
5702         val = NULL_TREE;
5703
5704       if (got_scope)
5705         goto done;
5706       else if (got_object && val)
5707         from_obj = val;
5708     }
5709   else
5710     {
5711       flags = lookup_flags (prefer_type, namespaces_only);
5712       /* If we're not parsing, we need to complain. */
5713       flags |= LOOKUP_COMPLAIN;
5714     }
5715
5716   /* First, look in non-namespace scopes.  */
5717
5718   if (current_class_type == NULL_TREE)
5719     nonclass = 1;
5720
5721   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5722     {
5723       tree binding;
5724
5725       if (!LOCAL_BINDING_P (t) && nonclass)
5726         /* We're not looking for class-scoped bindings, so keep going.  */
5727         continue;
5728
5729       /* If this is the kind of thing we're looking for, we're done.  */
5730       if (qualify_lookup (BINDING_VALUE (t), flags))
5731         binding = BINDING_VALUE (t);
5732       else if ((flags & LOOKUP_PREFER_TYPES)
5733                && qualify_lookup (BINDING_TYPE (t), flags))
5734         binding = BINDING_TYPE (t);
5735       else
5736         binding = NULL_TREE;
5737
5738       /* Handle access control on types from enclosing or base classes.  */
5739       if (binding && ! yylex
5740           && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5741         type_access_control (BINDING_LEVEL (t)->this_class, binding);
5742
5743       if (binding
5744           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5745         {
5746           if (val_is_implicit_typename && !yylex)
5747             warn_about_implicit_typename_lookup (val, binding);
5748           val = binding;
5749           val_is_implicit_typename
5750             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5751           if (!val_is_implicit_typename)
5752             break;
5753         }
5754     }
5755
5756   /* Now lookup in namespace scopes.  */
5757   if (!val || val_is_implicit_typename)
5758     {
5759       t = unqualified_namespace_lookup (name, flags, 0);
5760       if (t)
5761         {
5762           if (val_is_implicit_typename && !yylex)
5763             warn_about_implicit_typename_lookup (val, t);
5764           val = t;
5765         }
5766     }
5767
5768  done:
5769   if (val)
5770     {
5771       /* This should only warn about types used in qualified-ids.  */
5772       if (from_obj && from_obj != val)
5773         {
5774           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5775               && TREE_CODE (val) == TYPE_DECL
5776               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5777             {
5778               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5779                           name, got_object, TREE_TYPE (from_obj));
5780               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5781                           TREE_TYPE (val));
5782             }
5783
5784           /* We don't change val to from_obj if got_object depends on
5785              template parms because that breaks implicit typename for
5786              destructor calls.  */
5787           if (! uses_template_parms (got_object))
5788             val = from_obj;
5789         }
5790
5791       /* If we have a single function from a using decl, pull it out.  */
5792       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5793         val = OVL_FUNCTION (val);
5794     }
5795   else if (from_obj)
5796     val = from_obj;
5797
5798   return val;
5799 }
5800
5801 tree
5802 lookup_name_nonclass (name)
5803      tree name;
5804 {
5805   return lookup_name_real (name, 0, 1, 0);
5806 }
5807
5808 tree
5809 lookup_function_nonclass (name, args)
5810      tree name;
5811      tree args;
5812 {
5813   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5814 }
5815
5816 tree
5817 lookup_name_namespace_only (name)
5818      tree name;
5819 {
5820   /* type-or-namespace, nonclass, namespace_only */
5821   return lookup_name_real (name, 1, 1, 1);
5822 }
5823
5824 tree
5825 lookup_name (name, prefer_type)
5826      tree name;
5827      int prefer_type;
5828 {
5829   return lookup_name_real (name, prefer_type, 0, 0);
5830 }
5831
5832 /* Similar to `lookup_name' but look only in the innermost non-class
5833    binding level.  */
5834
5835 tree
5836 lookup_name_current_level (name)
5837      tree name;
5838 {
5839   struct binding_level *b;
5840   tree t = NULL_TREE;
5841
5842   b = current_binding_level;
5843   while (b->parm_flag == 2)
5844     b = b->level_chain;
5845
5846   if (b->namespace_p)
5847     {
5848       t = IDENTIFIER_NAMESPACE_VALUE (name);
5849
5850       /* extern "C" function() */
5851       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5852         t = TREE_VALUE (t);
5853     }
5854   else if (IDENTIFIER_BINDING (name)
5855            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5856     {
5857       while (1)
5858         {
5859           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5860             return IDENTIFIER_VALUE (name);
5861
5862           if (b->keep == 2)
5863             b = b->level_chain;
5864           else
5865             break;
5866         }
5867     }
5868
5869   return t;
5870 }
5871
5872 /* Like lookup_name_current_level, but for types.  */
5873
5874 tree
5875 lookup_type_current_level (name)
5876      tree name;
5877 {
5878   register tree t = NULL_TREE;
5879
5880   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5881
5882   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5883       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5884     {
5885       struct binding_level *b = current_binding_level;
5886       while (1)
5887         {
5888           if (purpose_member (name, b->type_shadowed))
5889             return REAL_IDENTIFIER_TYPE_VALUE (name);
5890           if (b->keep == 2)
5891             b = b->level_chain;
5892           else
5893             break;
5894         }
5895     }
5896
5897   return t;
5898 }
5899
5900 void
5901 begin_only_namespace_names ()
5902 {
5903   only_namespace_names = 1;
5904 }
5905
5906 void
5907 end_only_namespace_names ()
5908 {
5909   only_namespace_names = 0;
5910 }
5911 \f
5912 /* Arrange for the user to get a source line number, even when the
5913    compiler is going down in flames, so that she at least has a
5914    chance of working around problems in the compiler.  We used to
5915    call error(), but that let the segmentation fault continue
5916    through; now, it's much more passive by asking them to send the
5917    maintainers mail about the problem.  */
5918
5919 static void
5920 signal_catch (sig)
5921      int sig ATTRIBUTE_UNUSED;
5922 {
5923   signal (SIGSEGV, SIG_DFL);
5924 #ifdef SIGIOT
5925   signal (SIGIOT, SIG_DFL);
5926 #endif
5927 #ifdef SIGILL
5928   signal (SIGILL, SIG_DFL);
5929 #endif
5930 #ifdef SIGABRT
5931   signal (SIGABRT, SIG_DFL);
5932 #endif
5933 #ifdef SIGBUS
5934   signal (SIGBUS, SIG_DFL);
5935 #endif
5936   my_friendly_abort (0);
5937 }
5938
5939 /* Push the declarations of builtin types into the namespace.
5940    RID_INDEX, if < RID_MAX is the index of the builtin type
5941    in the array RID_POINTERS.  NAME is the name used when looking
5942    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5943
5944 static void
5945 record_builtin_type (rid_index, name, type)
5946      enum rid rid_index;
5947      const char *name;
5948      tree type;
5949 {
5950   tree rname = NULL_TREE, tname = NULL_TREE;
5951   tree tdecl = NULL_TREE;
5952
5953   if ((int) rid_index < (int) RID_MAX)
5954     rname = ridpointers[(int) rid_index];
5955   if (name)
5956     tname = get_identifier (name);
5957
5958   TYPE_BUILT_IN (type) = 1;
5959
5960   if (tname)
5961     {
5962       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5963       set_identifier_type_value (tname, NULL_TREE);
5964       if ((int) rid_index < (int) RID_MAX)
5965         /* Built-in types live in the global namespace. */
5966         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5967     }
5968   if (rname != NULL_TREE)
5969     {
5970       if (tname != NULL_TREE)
5971         {
5972           set_identifier_type_value (rname, NULL_TREE);
5973           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5974         }
5975       else
5976         {
5977           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5978           set_identifier_type_value (rname, NULL_TREE);
5979         }
5980     }
5981 }
5982
5983 /* Record one of the standard Java types.
5984  * Declare it as having the given NAME.
5985  * If SIZE > 0, it is the size of one of the integral types;
5986  * otherwise it is the negative of the size of one of the other types.  */
5987
5988 static tree
5989 record_builtin_java_type (name, size)
5990      const char *name;
5991      int size;
5992 {
5993   tree type, decl;
5994   if (size > 0)
5995     type = make_signed_type (size);
5996   else if (size > -32)
5997     { /* "__java_char" or ""__java_boolean". */
5998       type = make_unsigned_type (-size);
5999       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6000     }
6001   else
6002     { /* "__java_float" or ""__java_double". */
6003       type = make_node (REAL_TYPE);
6004       TYPE_PRECISION (type) = - size;
6005       layout_type (type);
6006     }
6007   record_builtin_type (RID_MAX, name, type);
6008   decl = TYPE_NAME (type);
6009
6010   /* Suppress generate debug symbol entries for these types,
6011      since for normal C++ they are just clutter.
6012      However, push_lang_context undoes this if extern "Java" is seen. */
6013   DECL_IGNORED_P (decl) = 1;
6014
6015   TYPE_FOR_JAVA (type) = 1;
6016   return type;
6017 }
6018
6019 /* Push a type into the namespace so that the back-ends ignore it. */
6020
6021 static void
6022 record_unknown_type (type, name)
6023      tree type;
6024      const char *name;
6025 {
6026   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6027   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6028   DECL_IGNORED_P (decl) = 1;
6029   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6030   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6031   TYPE_ALIGN (type) = 1;
6032   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6033 }
6034
6035 /* An string for which we should create an IDENTIFIER_NODE at
6036    startup.  */
6037
6038 typedef struct predefined_identifier
6039 {
6040   /* The name of the identifier.  */
6041   const char *name;
6042   /* The place where the IDENTIFIER_NODE should be stored.  */
6043   tree *node;
6044   /* Non-zero if this is the name of a constructor or destructor.  */
6045   int ctor_or_dtor_p;
6046 } predefined_identifier;
6047
6048 /* Create all the predefined identifiers.  */
6049
6050 static void
6051 initialize_predefined_identifiers () 
6052 {
6053   struct predefined_identifier *pid;
6054
6055   /* A table of identifiers to create at startup.  */
6056   static predefined_identifier predefined_identifiers[] = {
6057     { "C++", &lang_name_cplusplus, 0 },
6058     { "C", &lang_name_c, 0 },
6059     { "Java", &lang_name_java, 0 },
6060     { CTOR_NAME, &ctor_identifier, 1 },
6061     { "__base_ctor", &base_ctor_identifier, 1 },
6062     { "__comp_ctor", &complete_ctor_identifier, 1 },
6063     { DTOR_NAME, &dtor_identifier, 1 },
6064     { "__comp_dtor", &complete_dtor_identifier, 1 },
6065     { "__base_dtor", &base_dtor_identifier, 1 },
6066     { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6067     { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6068     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6069     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6070     { VTABLE_INDEX_NAME, &index_identifier, 0 },
6071     { "nelts", &nelts_identifier, 0 },
6072     { THIS_NAME, &this_identifier, 0 },
6073     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6074     { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6075     { "_vptr", &vptr_identifier, 0 },
6076     { "__cp_push_exception", &cp_push_exception_identifier, 0 },
6077     { NULL, NULL, 0 }
6078   };
6079
6080   for (pid = predefined_identifiers; pid->name; ++pid)
6081     {
6082       *pid->node = get_identifier (pid->name);
6083       if (pid->ctor_or_dtor_p)
6084         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6085     }
6086 }
6087
6088 /* Create the predefined scalar types of C,
6089    and some nodes representing standard constants (0, 1, (void *)0).
6090    Initialize the global binding level.
6091    Make definitions for built-in primitive functions.  */
6092
6093 void
6094 init_decl_processing ()
6095 {
6096   tree fields[20];
6097   int wchar_type_size;
6098   tree array_domain_type;
6099
6100   /* Check to see that the user did not specify an invalid combination
6101      of command-line options.  */
6102   if (flag_new_abi && !flag_vtable_thunks)
6103     fatal ("the new ABI requires vtable thunks");
6104
6105   /* Create all the identifiers we need.  */
6106   initialize_predefined_identifiers ();
6107
6108   /* Let the back-end now how to save and restore language-specific
6109      per-function globals.  */
6110   init_lang_status = &push_cp_function_context;
6111   free_lang_status = &pop_cp_function_context;
6112   mark_lang_status = &mark_cp_function_context;
6113
6114   cp_parse_init ();
6115   init_decl2 ();
6116   init_pt ();
6117
6118   /* Create the global variables.  */
6119   push_to_top_level ();
6120
6121   /* Enter the global namespace. */
6122   my_friendly_assert (global_namespace == NULL_TREE, 375);
6123   push_namespace (get_identifier ("::"));
6124   global_namespace = current_namespace;
6125   current_lang_name = NULL_TREE;
6126
6127   /* Adjust various flags based on command-line settings.  */
6128   if (flag_strict_prototype == 2)
6129     flag_strict_prototype = pedantic;
6130   if (! flag_permissive && ! pedantic)
6131     flag_pedantic_errors = 1;
6132   if (!flag_no_inline)
6133     flag_inline_trees = 1;
6134
6135   strict_prototypes_lang_c = flag_strict_prototype;
6136
6137   /* Initially, C.  */
6138   current_lang_name = lang_name_c;
6139
6140   current_function_decl = NULL_TREE;
6141   current_binding_level = NULL_BINDING_LEVEL;
6142   free_binding_level = NULL_BINDING_LEVEL;
6143
6144   /* Because most segmentation signals can be traced back into user
6145      code, catch them and at least give the user a chance of working
6146      around compiler bugs.  */
6147   signal (SIGSEGV, signal_catch);
6148
6149   /* We will also catch aborts in the back-end through signal_catch and
6150      give the user a chance to see where the error might be, and to defeat
6151      aborts in the back-end when there have been errors previously in their
6152      code.  */
6153 #ifdef SIGIOT
6154   signal (SIGIOT, signal_catch);
6155 #endif
6156 #ifdef SIGILL
6157   signal (SIGILL, signal_catch);
6158 #endif
6159 #ifdef SIGABRT
6160   signal (SIGABRT, signal_catch);
6161 #endif
6162 #ifdef SIGBUS
6163   signal (SIGBUS, signal_catch);
6164 #endif
6165
6166   build_common_tree_nodes (flag_signed_char);
6167
6168   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6169   TREE_TYPE (error_mark_list) = error_mark_node;
6170
6171   /* Make the binding_level structure for global names.  */
6172   pushlevel (0);
6173   global_binding_level = current_binding_level;
6174   /* The global level is the namespace level of ::.  */
6175   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6176   declare_namespace_level ();
6177
6178   /* Define `int' and `char' first so that dbx will output them first.  */
6179   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6180   record_builtin_type (RID_CHAR, "char", char_type_node);
6181
6182   /* `signed' is the same as `int' */
6183   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6184   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6185   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6186   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6187   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6188   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6189   record_builtin_type (RID_MAX, "long long unsigned int",
6190                        long_long_unsigned_type_node);
6191   record_builtin_type (RID_MAX, "long long unsigned",
6192                        long_long_unsigned_type_node);
6193   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6194   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6195   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6196
6197   ptrdiff_type_node
6198     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6199
6200   /* Define both `signed char' and `unsigned char'.  */
6201   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6202   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6203
6204   /* `unsigned long' is the standard type for sizeof.
6205      Note that stddef.h uses `unsigned long',
6206      and this must agree, even if long and int are the same size.  */
6207   set_sizetype
6208     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6209
6210   /* Create the widest literal types. */
6211   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6212   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6213                         widest_integer_literal_type_node));
6214
6215   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6216   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6217                         widest_unsigned_literal_type_node));
6218
6219   /* These are types that type_for_size and type_for_mode use.  */
6220   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6221   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6222   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6223   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6224 #if HOST_BITS_PER_WIDE_INT >= 64
6225   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6226 #endif
6227   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6228   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6229   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6230   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6231 #if HOST_BITS_PER_WIDE_INT >= 64
6232   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6233 #endif
6234
6235   build_common_tree_nodes_2 (flag_short_double);
6236
6237   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6238   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6239   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6240   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6241   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6242   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6243   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6244   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6245
6246   integer_two_node = build_int_2 (2, 0);
6247   TREE_TYPE (integer_two_node) = integer_type_node;
6248   integer_three_node = build_int_2 (3, 0);
6249   TREE_TYPE (integer_three_node) = integer_type_node;
6250
6251   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6252   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6253   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6254   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6255   TYPE_PRECISION (boolean_type_node) = 1;
6256   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6257   boolean_false_node = build_int_2 (0, 0);
6258   TREE_TYPE (boolean_false_node) = boolean_type_node;
6259   boolean_true_node = build_int_2 (1, 0);
6260   TREE_TYPE (boolean_true_node) = boolean_type_node;
6261
6262   signed_size_zero_node = build_int_2 (0, 0);
6263   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6264   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6265   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6266
6267   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6268                         complex_integer_type_node));
6269   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6270                         complex_float_type_node));
6271   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6272                         complex_double_type_node));
6273   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6274                         complex_long_double_type_node));
6275
6276   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6277
6278   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6279   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6280   TREE_PARMLIST (void_list_node) = 1;
6281
6282   /* Used for expressions that do nothing, but are not errors.  */
6283   void_zero_node = build_int_2 (0, 0);
6284   TREE_TYPE (void_zero_node) = void_type_node;
6285
6286   string_type_node = build_pointer_type (char_type_node);
6287   const_string_type_node
6288     = build_pointer_type (build_qualified_type (char_type_node,
6289                                                 TYPE_QUAL_CONST));
6290   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6291 #if 0
6292   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6293 #endif
6294
6295   /* Make a type to be the domain of a few array types
6296      whose domains don't really matter.
6297      200 is small enough that it always fits in size_t.  */
6298   array_domain_type = build_index_type (build_int_2 (200, 0));
6299
6300   /* Make a type for arrays of characters.
6301      With luck nothing will ever really depend on the length of this
6302      array type.  */
6303   char_array_type_node
6304     = build_array_type (char_type_node, array_domain_type);
6305   /* Likewise for arrays of ints.  */
6306   int_array_type_node
6307     = build_array_type (integer_type_node, array_domain_type);
6308
6309   if (flag_new_abi)
6310     delta_type_node = ptrdiff_type_node;
6311   else if (flag_huge_objects)
6312     delta_type_node = long_integer_type_node;
6313   else
6314     delta_type_node = short_integer_type_node;
6315
6316   if (flag_new_abi)
6317     vtable_index_type = ptrdiff_type_node;
6318   else
6319     vtable_index_type = delta_type_node;
6320
6321   default_function_type
6322     = build_function_type (integer_type_node, NULL_TREE);
6323
6324   ptr_type_node = build_pointer_type (void_type_node);
6325   const_ptr_type_node
6326     = build_pointer_type (build_qualified_type (void_type_node,
6327                                                 TYPE_QUAL_CONST));
6328   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6329   lang_type_promotes_to = convert_type_from_ellipsis;
6330
6331   void_ftype_ptr
6332     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6333
6334   /* C++ extensions */
6335
6336   unknown_type_node = make_node (UNKNOWN_TYPE);
6337   record_unknown_type (unknown_type_node, "unknown type");
6338
6339   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6340   TREE_TYPE (unknown_type_node) = unknown_type_node;
6341
6342   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6343
6344   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6345      result.  */
6346   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6347   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6348
6349   /* This is special for C++ so functions can be overloaded.  */
6350   wchar_type_node = get_identifier (flag_short_wchar
6351                                     ? "short unsigned int"
6352                                     : WCHAR_TYPE);
6353   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6354   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6355   signed_wchar_type_node = make_signed_type (wchar_type_size);
6356   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6357   wchar_type_node
6358     = TREE_UNSIGNED (wchar_type_node)
6359       ? unsigned_wchar_type_node
6360       : signed_wchar_type_node;
6361   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6362
6363   /* Artificial declaration of wchar_t -- can be bashed */
6364   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6365                                 wchar_type_node);
6366   pushdecl (wchar_decl_node);
6367
6368   /* This is for wide string constants.  */
6369   wchar_array_type_node
6370     = build_array_type (wchar_type_node, array_domain_type);
6371
6372   if (flag_vtable_thunks)
6373     {
6374       /* Make sure we get a unique function type, so we can give
6375          its pointer type a name.  (This wins for gdb.) */
6376       tree vfunc_type = make_node (FUNCTION_TYPE);
6377       TREE_TYPE (vfunc_type) = integer_type_node;
6378       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6379       layout_type (vfunc_type);
6380
6381       vtable_entry_type = build_pointer_type (vfunc_type);
6382     }
6383   else
6384     {
6385       vtable_entry_type = make_aggr_type (RECORD_TYPE);
6386       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6387                                    delta_type_node);
6388       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6389                                    delta_type_node);
6390       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6391                                    ptr_type_node);
6392       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6393                            double_type_node);
6394
6395       /* Make this part of an invisible union.  */
6396       fields[3] = copy_node (fields[2]);
6397       TREE_TYPE (fields[3]) = delta_type_node;
6398       DECL_NAME (fields[3]) = delta2_identifier;
6399       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6400       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6401       DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
6402       TREE_UNSIGNED (fields[3]) = 0;
6403       TREE_CHAIN (fields[2]) = fields[3];
6404       vtable_entry_type = build_qualified_type (vtable_entry_type,
6405                                                 TYPE_QUAL_CONST);
6406     }
6407   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6408
6409   vtbl_type_node
6410     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6411   layout_type (vtbl_type_node);
6412   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6413   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6414   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6415   layout_type (vtbl_ptr_type_node);
6416   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6417
6418   std_node = build_decl (NAMESPACE_DECL,
6419                          get_identifier (flag_honor_std ? "fake std":"std"),
6420                          void_type_node);
6421   pushdecl (std_node);
6422   
6423   if (flag_new_abi)
6424     {
6425       push_namespace (get_identifier ("__cxxabiv1"));
6426       abi_node = current_namespace;
6427       pop_namespace ();
6428     }
6429
6430   global_type_node = make_node (LANG_TYPE);
6431   record_unknown_type (global_type_node, "global type");
6432
6433   /* Now, C++.  */
6434   current_lang_name = lang_name_cplusplus;
6435
6436   {
6437     tree bad_alloc_type_node, newtype, deltype;
6438     if (flag_honor_std)
6439       push_namespace (get_identifier ("std"));
6440     bad_alloc_type_node = xref_tag
6441       (class_type_node, get_identifier ("bad_alloc"), 1);
6442     if (flag_honor_std)
6443       pop_namespace ();
6444     newtype = build_exception_variant
6445       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6446     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6447     push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6448     push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6449     global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6450                                                deltype);
6451     push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6452   }
6453
6454   abort_fndecl
6455     = build_library_fn_ptr ("__pure_virtual", void_ftype);
6456
6457   /* Perform other language dependent initializations.  */
6458   init_class_processing ();
6459   init_init_processing ();
6460   init_search_processing ();
6461   init_rtti_processing ();
6462
6463   if (flag_exceptions)
6464     init_exception_processing ();
6465   if (flag_no_inline)
6466     {
6467       flag_inline_functions = 0;
6468     }
6469
6470   if (! supports_one_only ())
6471     flag_weak = 0;
6472
6473   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6474   make_fname_decl = cp_make_fname_decl;
6475   declare_function_name ();
6476
6477   /* Prepare to check format strings against argument lists.  */
6478   init_function_format_info ();
6479
6480   /* Show we use EH for cleanups.  */
6481   using_eh_for_cleanups ();
6482
6483   print_error_function = lang_print_error_function;
6484   lang_get_alias_set = &c_get_alias_set;
6485   valid_lang_attribute = cp_valid_lang_attribute;
6486
6487   /* Maintain consistency.  Perhaps we should just complain if they
6488      say -fwritable-strings?  */
6489   if (flag_writable_strings)
6490     flag_const_strings = 0;
6491
6492   /* Add GC roots for all of our global variables.  */
6493   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6494   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6495   ggc_add_tree_root (&integer_three_node, 1);
6496   ggc_add_tree_root (&integer_two_node, 1);
6497   ggc_add_tree_root (&signed_size_zero_node, 1);
6498   ggc_add_tree_root (&size_one_node, 1);
6499   ggc_add_tree_root (&size_zero_node, 1);
6500   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6501                 mark_binding_level);
6502   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6503   ggc_add_tree_root (&static_ctors, 1);
6504   ggc_add_tree_root (&static_dtors, 1);
6505   ggc_add_tree_root (&lastiddecl, 1);
6506
6507   ggc_add_tree_root (&last_function_parm_tags, 1);
6508   ggc_add_tree_root (&current_function_return_value, 1);
6509   ggc_add_tree_root (&current_function_parms, 1);
6510   ggc_add_tree_root (&current_function_parm_tags, 1);
6511   ggc_add_tree_root (&last_function_parms, 1);
6512   ggc_add_tree_root (&error_mark_list, 1);
6513
6514   ggc_add_tree_root (&global_namespace, 1);
6515   ggc_add_tree_root (&global_type_node, 1);
6516   ggc_add_tree_root (&anonymous_namespace_name, 1);
6517
6518   ggc_add_tree_root (&got_object, 1);
6519   ggc_add_tree_root (&got_scope, 1);
6520
6521   ggc_add_tree_root (&current_lang_name, 1);
6522   ggc_add_tree_root (&static_aggregates, 1);
6523 }
6524
6525 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6526    decl, NAME is the initialization string and TYPE_DEP indicates whether
6527    NAME depended on the type of the function. We make use of that to detect
6528    __PRETTY_FUNCTION__ inside a template fn.  Because we build a tree for
6529    the function before emitting any of it, we don't need to treat the
6530    VAR_DECL specially. We can decide whether to emit it later, if it was
6531    used.  */
6532
6533 static tree
6534 cp_make_fname_decl (id, name, type_dep)
6535      tree id;
6536      const char *name;
6537      int type_dep;
6538 {
6539   tree decl, type, init;
6540   size_t length = strlen (name);
6541   tree domain = NULL_TREE;
6542   
6543   if (!processing_template_decl)
6544     type_dep = 0;
6545   if (!type_dep)
6546     domain = build_index_type (build_int_2 (length, 0));
6547
6548   type =  build_cplus_array_type
6549           (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6550            domain);
6551
6552   decl = build_decl (VAR_DECL, id, type);
6553   TREE_STATIC (decl) = 1;
6554   TREE_READONLY (decl) = 1;
6555   DECL_SOURCE_LINE (decl) = 0;
6556   DECL_ARTIFICIAL (decl) = 1;
6557   DECL_IN_SYSTEM_HEADER (decl) = 1;
6558   pushdecl (decl);
6559   if (processing_template_decl)
6560     decl = push_template_decl (decl);
6561   if (type_dep)
6562     {
6563       init = build (FUNCTION_NAME, type);
6564       DECL_PRETTY_FUNCTION_P (decl) = 1;
6565     }
6566   else
6567     {
6568       init = build_string (length + 1, name);
6569       TREE_TYPE (init) = type;
6570     }
6571   DECL_INITIAL (decl) = init;
6572   cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6573   
6574   /* We will have to make sure we only emit this, if it is actually used. */
6575   return decl;
6576 }
6577
6578 /* Function to print any language-specific context for an error message.  */
6579
6580 static void
6581 lang_print_error_function (file)
6582      const char *file;
6583 {
6584   default_print_error_function (file);
6585   maybe_print_template_context ();
6586 }
6587
6588 /* Entry point for the benefit of c_common_nodes_and_builtins.
6589
6590    Make a definition for a builtin function named NAME and whose data type
6591    is TYPE.  TYPE should be a function type with argument types.
6592
6593    CLASS and CODE tell later passes how to compile calls to this function.
6594    See tree.h for possible values.
6595
6596    If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6597    the name to be called if we can't opencode the function.  */
6598
6599 tree
6600 builtin_function (name, type, code, class, libname)
6601      const char *name;
6602      tree type;
6603      int code;
6604      enum built_in_class class;
6605      const char *libname;
6606 {
6607   tree decl = build_library_fn_1 (get_identifier (name), type);
6608   DECL_BUILT_IN_CLASS (decl) = class;
6609   DECL_FUNCTION_CODE (decl) = code;
6610
6611   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6612
6613   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6614      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6615      function in the namespace.  */
6616   pushdecl (decl);
6617   if (libname)
6618     DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
6619   make_function_rtl (decl);
6620   return decl;
6621 }
6622
6623 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6624    function.  Not called directly.  */
6625
6626 static tree
6627 build_library_fn_1 (name, type)
6628      tree name;
6629      tree type;
6630 {
6631   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6632   DECL_EXTERNAL (fn) = 1;
6633   TREE_PUBLIC (fn) = 1;
6634   DECL_ARTIFICIAL (fn) = 1;
6635   TREE_NOTHROW (fn) = 1;
6636   return fn;
6637 }
6638
6639 /* Returns the _DECL for a library function with C linkage.
6640    We assume that such functions never throw; if this is incorrect,
6641    callers should unset TREE_NOTHROW.  */
6642
6643 tree
6644 build_library_fn (name, type)
6645      tree name;
6646      tree type;
6647 {
6648   tree fn = build_library_fn_1 (name, type);
6649   make_function_rtl (fn);
6650   return fn;
6651 }
6652
6653 /* Returns the _DECL for a library function with C++ linkage.  */
6654
6655 tree
6656 build_cp_library_fn (name, type)
6657      tree name;
6658      tree type;
6659 {
6660   tree fn = build_library_fn_1 (name, type);
6661   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6662   set_mangled_name_for_decl (fn);
6663   make_function_rtl (fn);
6664   return fn;
6665 }
6666
6667 /* Like build_library_fn, but takes a C string instead of an
6668    IDENTIFIER_NODE.  */
6669
6670 tree
6671 build_library_fn_ptr (name, type)
6672      const char *name;
6673      tree type;
6674 {
6675   return build_library_fn (get_identifier (name), type);
6676 }
6677
6678 /* Like build_cp_library_fn, but takes a C string instead of an
6679    IDENTIFIER_NODE.  */
6680
6681 tree
6682 build_cp_library_fn_ptr (name, type)
6683      const char *name;
6684      tree type;
6685 {
6686   return build_cp_library_fn (get_identifier (name), type);
6687 }
6688
6689 /* Like build_library_fn, but also pushes the function so that we will
6690    be able to find it via IDENTIFIER_GLOBAL_VALUE.  */
6691
6692 tree
6693 push_library_fn (name, type)
6694      tree name, type;
6695 {
6696   tree fn = build_library_fn (name, type);
6697   pushdecl_top_level (fn);
6698   return fn;
6699 }
6700
6701 /* Like build_cp_library_fn, but also pushes the function so that it
6702    will be found by normal lookup.  */
6703
6704 tree
6705 push_cp_library_fn (name, type)
6706      tree name;
6707      tree type;
6708 {
6709   tree fn = build_cp_library_fn (name, type);
6710   pushdecl (fn);
6711   return fn;
6712 }
6713
6714 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6715    a FUNCTION_TYPE.  */
6716
6717 tree
6718 push_void_library_fn (name, parmtypes)
6719      tree name, parmtypes;
6720 {
6721   tree type = build_function_type (void_type_node, parmtypes);
6722   return push_library_fn (name, type);
6723 }
6724
6725 /* Like push_library_fn, but also note that this function throws
6726    and does not return.  Used for __throw_foo and the like.  */
6727
6728 tree
6729 push_throw_library_fn (name, type)
6730      tree name, type;
6731 {
6732   tree fn = push_library_fn (name, type);
6733   TREE_THIS_VOLATILE (fn) = 1;
6734   TREE_NOTHROW (fn) = 0;
6735   return fn;
6736 }
6737 \f
6738 /* When we call finish_struct for an anonymous union, we create
6739    default copy constructors and such.  But, an anonymous union
6740    shouldn't have such things; this function undoes the damage to the
6741    anonymous union type T.
6742
6743    (The reason that we create the synthesized methods is that we don't
6744    distinguish `union { int i; }' from `typedef union { int i; } U'.
6745    The first is an anonymous union; the second is just an ordinary
6746    union type.)  */
6747
6748 void
6749 fixup_anonymous_aggr (t)
6750      tree t;
6751 {
6752   tree *q;
6753
6754   /* Wipe out memory of synthesized methods */
6755   TYPE_HAS_CONSTRUCTOR (t) = 0;
6756   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6757   TYPE_HAS_INIT_REF (t) = 0;
6758   TYPE_HAS_CONST_INIT_REF (t) = 0;
6759   TYPE_HAS_ASSIGN_REF (t) = 0;
6760   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6761
6762   /* Splice the implicitly generated functions out of the TYPE_METHODS
6763      list.  */
6764   q = &TYPE_METHODS (t);
6765   while (*q)
6766     {
6767       if (DECL_ARTIFICIAL (*q))
6768         *q = TREE_CHAIN (*q);
6769       else
6770         q = &TREE_CHAIN (*q);
6771     }
6772
6773   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
6774   if (TYPE_METHODS (t))
6775     error ("an anonymous union cannot have function members");
6776 }
6777
6778 /* Make sure that a declaration with no declarator is well-formed, i.e.
6779    just defines a tagged type or anonymous union.
6780
6781    Returns the type defined, if any.  */
6782
6783 tree
6784 check_tag_decl (declspecs)
6785      tree declspecs;
6786 {
6787   int found_type = 0;
6788   int saw_friend = 0;
6789   tree ob_modifier = NULL_TREE;
6790   register tree link;
6791   register tree t = NULL_TREE;
6792
6793   for (link = declspecs; link; link = TREE_CHAIN (link))
6794     {
6795       register tree value = TREE_VALUE (link);
6796
6797       if (TYPE_P (value)
6798           || (TREE_CODE (value) == IDENTIFIER_NODE
6799               && IDENTIFIER_GLOBAL_VALUE (value)
6800               && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
6801         {
6802           ++found_type;
6803
6804           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6805             {
6806               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6807               t = value;
6808             }
6809         }
6810       else if (value == ridpointers[(int) RID_FRIEND])
6811         {
6812           if (current_class_type == NULL_TREE
6813               || current_scope () != current_class_type)
6814             ob_modifier = value;
6815           else
6816             saw_friend = 1;
6817         }
6818       else if (value == ridpointers[(int) RID_STATIC]
6819                || value == ridpointers[(int) RID_EXTERN]
6820                || value == ridpointers[(int) RID_AUTO]
6821                || value == ridpointers[(int) RID_REGISTER]
6822                || value == ridpointers[(int) RID_INLINE]
6823                || value == ridpointers[(int) RID_VIRTUAL]
6824                || value == ridpointers[(int) RID_CONST]
6825                || value == ridpointers[(int) RID_VOLATILE]
6826                || value == ridpointers[(int) RID_EXPLICIT])
6827         ob_modifier = value;
6828     }
6829
6830   if (found_type > 1)
6831     error ("multiple types in one declaration");
6832
6833   if (t == NULL_TREE && ! saw_friend)
6834     pedwarn ("declaration does not declare anything");
6835
6836   /* Check for an anonymous union.  We're careful
6837      accessing TYPE_IDENTIFIER because some built-in types, like
6838      pointer-to-member types, do not have TYPE_NAME.  */
6839   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6840            && TYPE_NAME (t)
6841            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6842     {
6843       /* Anonymous unions are objects, so they can have specifiers.  */;
6844       SET_ANON_AGGR_TYPE_P (t);
6845
6846       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6847         pedwarn ("ISO C++ prohibits anonymous structs");
6848     }
6849
6850   else if (ob_modifier)
6851     {
6852       if (ob_modifier == ridpointers[(int) RID_INLINE]
6853           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6854         cp_error ("`%D' can only be specified for functions", ob_modifier);
6855       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6856         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6857       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6858         cp_error ("`%D' can only be specified for constructors",
6859                   ob_modifier);
6860       else
6861         cp_error ("`%D' can only be specified for objects and functions",
6862                   ob_modifier);
6863     }
6864
6865   return t;
6866 }
6867
6868 /* Called when a declaration is seen that contains no names to declare.
6869    If its type is a reference to a structure, union or enum inherited
6870    from a containing scope, shadow that tag name for the current scope
6871    with a forward reference.
6872    If its type defines a new named structure or union
6873    or defines an enum, it is valid but we need not do anything here.
6874    Otherwise, it is an error.
6875
6876    C++: may have to grok the declspecs to learn about static,
6877    complain for anonymous unions.  */
6878
6879 void
6880 shadow_tag (declspecs)
6881      tree declspecs;
6882 {
6883   tree t = check_tag_decl (declspecs);
6884
6885   if (t)
6886     maybe_process_partial_specialization (t);
6887
6888   /* This is where the variables in an anonymous union are
6889      declared.  An anonymous union declaration looks like:
6890      union { ... } ;
6891      because there is no declarator after the union, the parser
6892      sends that declaration here.  */
6893   if (t && ANON_AGGR_TYPE_P (t))
6894     {
6895       fixup_anonymous_aggr (t);
6896
6897       if (TYPE_FIELDS (t))
6898         {
6899           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6900                                       NULL_TREE);
6901           finish_anon_union (decl);
6902         }
6903     }
6904 }
6905 \f
6906 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6907
6908 tree
6909 groktypename (typename)
6910      tree typename;
6911 {
6912   if (TREE_CODE (typename) != TREE_LIST)
6913     return typename;
6914   return grokdeclarator (TREE_VALUE (typename),
6915                          TREE_PURPOSE (typename),
6916                          TYPENAME, 0, NULL_TREE);
6917 }
6918
6919 /* Decode a declarator in an ordinary declaration or data definition.
6920    This is called as soon as the type information and variable name
6921    have been parsed, before parsing the initializer if any.
6922    Here we create the ..._DECL node, fill in its type,
6923    and put it on the list of decls for the current context.
6924    The ..._DECL node is returned as the value.
6925
6926    Exception: for arrays where the length is not specified,
6927    the type is left null, to be filled in by `cp_finish_decl'.
6928
6929    Function definitions do not come here; they go to start_function
6930    instead.  However, external and forward declarations of functions
6931    do go through here.  Structure field declarations are done by
6932    grokfield and not through here.  */
6933
6934 tree
6935 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6936      tree declarator, declspecs;
6937      int initialized;
6938      tree attributes, prefix_attributes;
6939 {
6940   register tree decl;
6941   register tree type, tem;
6942   tree context;
6943   extern int have_extern_spec;
6944   extern int used_extern_spec;
6945   tree attrlist;
6946
6947 #if 0
6948   /* See code below that used this.  */
6949   int init_written = initialized;
6950 #endif
6951
6952   /* This should only be done once on the top most decl.  */
6953   if (have_extern_spec && !used_extern_spec)
6954     {
6955       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6956                                   declspecs);
6957       used_extern_spec = 1;
6958     }
6959
6960   if (attributes || prefix_attributes)
6961     attrlist = build_tree_list (attributes, prefix_attributes);
6962   else
6963     attrlist = NULL_TREE;
6964
6965   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6966                          attrlist);
6967
6968   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6969     return NULL_TREE;
6970
6971   type = TREE_TYPE (decl);
6972
6973   if (type == error_mark_node)
6974     return NULL_TREE;
6975
6976   context = DECL_CONTEXT (decl);
6977
6978   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6979       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6980     {
6981       /* When parsing the initializer, lookup should use the object's
6982          namespace. */
6983       push_decl_namespace (context);
6984     }
6985
6986   /* We are only interested in class contexts, later. */
6987   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6988     context = NULL_TREE;
6989
6990   if (initialized)
6991     /* Is it valid for this decl to have an initializer at all?
6992        If not, set INITIALIZED to zero, which will indirectly
6993        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6994     switch (TREE_CODE (decl))
6995       {
6996       case TYPE_DECL:
6997         /* typedef foo = bar  means give foo the same type as bar.
6998            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
6999            Any other case of an initialization in a TYPE_DECL is an error.  */
7000         if (pedantic || list_length (declspecs) > 1)
7001           {
7002             cp_error ("typedef `%D' is initialized", decl);
7003             initialized = 0;
7004           }
7005         break;
7006
7007       case FUNCTION_DECL:
7008         cp_error ("function `%#D' is initialized like a variable", decl);
7009         initialized = 0;
7010         break;
7011
7012       default:
7013         break;
7014       }
7015
7016   if (initialized)
7017     {
7018       if (! toplevel_bindings_p ()
7019           && DECL_EXTERNAL (decl))
7020         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7021                     decl);
7022       DECL_EXTERNAL (decl) = 0;
7023       if (toplevel_bindings_p ())
7024         TREE_STATIC (decl) = 1;
7025
7026       /* Tell `pushdecl' this is an initialized decl
7027          even though we don't yet have the initializer expression.
7028          Also tell `cp_finish_decl' it may store the real initializer.  */
7029       DECL_INITIAL (decl) = error_mark_node;
7030     }
7031
7032 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7033   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7034 #endif
7035
7036   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7037   cplus_decl_attributes (decl, attributes, prefix_attributes);
7038
7039   if (context && COMPLETE_TYPE_P (complete_type (context)))
7040     {
7041       push_nested_class (context, 2);
7042
7043       if (TREE_CODE (decl) == VAR_DECL)
7044         {
7045           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7046           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7047             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7048           else
7049             {
7050               if (DECL_CONTEXT (field) != context)
7051                 {
7052                   cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7053                               DECL_CONTEXT (field), DECL_NAME (decl),
7054                               context, DECL_NAME (decl));
7055                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7056                 }
7057               /* Static data member are tricky; an in-class initialization
7058                  still doesn't provide a definition, so the in-class
7059                  declaration will have DECL_EXTERNAL set, but will have an
7060                  initialization.  Thus, duplicate_decls won't warn
7061                  about this situation, and so we check here.  */
7062               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7063                 cp_error ("duplicate initialization of %D", decl);
7064               if (duplicate_decls (decl, field))
7065                 decl = field;
7066             }
7067         }
7068       else
7069         {
7070           tree field = check_classfn (context, decl);
7071           if (field && duplicate_decls (decl, field))
7072             decl = field;
7073         }
7074
7075       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7076       DECL_IN_AGGR_P (decl) = 0;
7077       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7078           || CLASSTYPE_USE_TEMPLATE (context))
7079         {
7080           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7081           /* [temp.expl.spec] An explicit specialization of a static data
7082              member of a template is a definition if the declaration
7083              includes an initializer; otherwise, it is a declaration.
7084
7085              We check for processing_specialization so this only applies
7086              to the new specialization syntax.  */
7087           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7088             DECL_EXTERNAL (decl) = 1;
7089         }
7090
7091       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7092         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7093                     decl);
7094     }
7095
7096   /* Enter this declaration into the symbol table.  */
7097   tem = maybe_push_decl (decl);
7098
7099   if (processing_template_decl)
7100     tem = push_template_decl (tem);
7101
7102 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7103   /* Tell the back-end to use or not use .common as appropriate.  If we say
7104      -fconserve-space, we want this to save .data space, at the expense of
7105      wrong semantics.  If we say -fno-conserve-space, we want this to
7106      produce errors about redefs; to do this we force variables into the
7107      data segment.  */
7108   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7109 #endif
7110
7111   if (! processing_template_decl)
7112     start_decl_1 (tem);
7113
7114   return tem;
7115 }
7116
7117 void
7118 start_decl_1 (decl)
7119      tree decl;
7120 {
7121   tree type = TREE_TYPE (decl);
7122   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7123
7124   if (type == error_mark_node)
7125     return;
7126
7127   /* If this type of object needs a cleanup, but we're not allowed to
7128      add any more objects with cleanups to the current scope, create a
7129      new binding level.  */
7130   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7131       && current_binding_level->more_cleanups_ok == 0)
7132     {
7133       keep_next_level (2);
7134       pushlevel (1);
7135       clear_last_expr ();
7136       add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7137     }
7138
7139   if (initialized)
7140     /* Is it valid for this decl to have an initializer at all?
7141        If not, set INITIALIZED to zero, which will indirectly
7142        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7143     {
7144       /* Don't allow initializations for incomplete types except for
7145          arrays which might be completed by the initialization.  */
7146       if (COMPLETE_TYPE_P (complete_type (type)))
7147         ;                       /* A complete type is ok.  */
7148       else if (TREE_CODE (type) != ARRAY_TYPE)
7149         {
7150           cp_error ("variable `%#D' has initializer but incomplete type",
7151                     decl);
7152           initialized = 0;
7153           type = TREE_TYPE (decl) = error_mark_node;
7154         }
7155       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7156         {
7157           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7158             cp_error ("elements of array `%#D' have incomplete type", decl);
7159           /* else we already gave an error in start_decl.  */
7160           initialized = 0;
7161         }
7162     }
7163
7164   if (!initialized
7165       && TREE_CODE (decl) != TYPE_DECL
7166       && TREE_CODE (decl) != TEMPLATE_DECL
7167       && type != error_mark_node
7168       && IS_AGGR_TYPE (type) 
7169       && ! DECL_EXTERNAL (decl))
7170     {
7171       if ((! processing_template_decl || ! uses_template_parms (type))
7172           && !COMPLETE_TYPE_P (complete_type (type)))
7173         {
7174           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7175                  decl);
7176           /* Change the type so that assemble_variable will give
7177              DECL an rtl we can live with: (mem (const_int 0)).  */
7178           type = TREE_TYPE (decl) = error_mark_node;
7179         }
7180       else
7181         {
7182           /* If any base type in the hierarchy of TYPE needs a constructor,
7183              then we set initialized to 1.  This way any nodes which are
7184              created for the purposes of initializing this aggregate
7185              will live as long as it does.  This is necessary for global
7186              aggregates which do not have their initializers processed until
7187              the end of the file.  */
7188           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7189         }
7190     }
7191
7192   if (! initialized)
7193     DECL_INITIAL (decl) = NULL_TREE;
7194 }
7195
7196 /* Handle initialization of references.
7197    These three arguments are from `cp_finish_decl', and have the
7198    same meaning here that they do there.
7199
7200    Quotes on semantics can be found in ARM 8.4.3.  */
7201
7202 static void
7203 grok_reference_init (decl, type, init)
7204      tree decl, type, init;
7205 {
7206   tree tmp;
7207
7208   if (init == NULL_TREE)
7209     {
7210       if ((DECL_LANG_SPECIFIC (decl) == 0
7211            || DECL_IN_AGGR_P (decl) == 0)
7212           && ! DECL_THIS_EXTERN (decl))
7213         cp_error ("`%D' declared as reference but not initialized", decl);
7214       return;
7215     }
7216
7217   if (init == error_mark_node)
7218     return;
7219
7220   if (TREE_CODE (init) == CONSTRUCTOR)
7221     {
7222       cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7223       return;
7224     }
7225
7226   if (TREE_CODE (init) == TREE_LIST)
7227     init = build_compound_expr (init);
7228
7229   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7230     init = convert_from_reference (init);
7231
7232   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7233       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7234     {
7235       /* Note: default conversion is only called in very special cases.  */
7236       init = default_conversion (init);
7237     }
7238
7239   /* Convert INIT to the reference type TYPE.  This may involve the
7240      creation of a temporary, whose lifetime must be the same as that
7241      of the reference.  If so, a DECL_STMT for the temporary will be
7242      added just after the DECL_STMT for DECL.  That's why we don't set
7243      DECL_INITIAL for local references (instead assigning to them
7244      explicitly); we need to allow the temporary to be initialized
7245      first.  */
7246   tmp = convert_to_reference
7247     (type, init, CONV_IMPLICIT,
7248      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7249
7250   if (tmp == error_mark_node)
7251     return;
7252   else if (tmp != NULL_TREE)
7253     {
7254       init = tmp;
7255       tmp = save_expr (tmp);
7256       if (building_stmt_tree ())
7257         {
7258           /* Initialize the declaration.  */
7259           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7260           finish_expr_stmt (tmp);
7261         }
7262       else
7263         DECL_INITIAL (decl) = tmp;
7264     }
7265   else
7266     {
7267       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7268       return;
7269     }
7270
7271   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7272     {
7273       expand_static_init (decl, DECL_INITIAL (decl));
7274       DECL_INITIAL (decl) = NULL_TREE;
7275     }
7276   return;
7277 }
7278
7279 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7280    mucking with forces it does not comprehend (i.e. initialization with a
7281    constructor).  If we are at global scope and won't go into COMMON, fill
7282    it in with a dummy CONSTRUCTOR to force the variable into .data;
7283    otherwise we can use error_mark_node.  */
7284
7285 static tree
7286 obscure_complex_init (decl, init)
7287      tree decl, init;
7288 {
7289   if (! flag_no_inline && TREE_STATIC (decl))
7290     {
7291       if (extract_init (decl, init))
7292         return NULL_TREE;
7293     }
7294
7295 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7296   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7297     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7298                                  NULL_TREE);
7299   else
7300 #endif
7301     DECL_INITIAL (decl) = error_mark_node;
7302
7303   return init;
7304 }
7305
7306 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7307    array until we finish parsing the initializer.  If that's the
7308    situation we're in, update DECL accordingly.  */
7309
7310 static void
7311 maybe_deduce_size_from_array_init (decl, init)
7312      tree decl;
7313      tree init;
7314 {
7315   tree type = TREE_TYPE (decl);
7316
7317   if (TREE_CODE (type) == ARRAY_TYPE
7318       && TYPE_DOMAIN (type) == NULL_TREE
7319       && TREE_CODE (decl) != TYPE_DECL)
7320     {
7321       int do_default
7322         = (TREE_STATIC (decl)
7323            /* Even if pedantic, an external linkage array
7324               may have incomplete type at first.  */
7325            ? pedantic && ! DECL_EXTERNAL (decl)
7326            : !DECL_EXTERNAL (decl));
7327       tree initializer = init ? init : DECL_INITIAL (decl);
7328       int failure = complete_array_type (type, initializer, do_default);
7329
7330       if (failure == 1)
7331         cp_error ("initializer fails to determine size of `%D'", decl);
7332
7333       if (failure == 2)
7334         {
7335           if (do_default)
7336             cp_error ("array size missing in `%D'", decl);
7337           /* If a `static' var's size isn't known, make it extern as
7338              well as static, so it does not get allocated.  If it's not
7339              `static', then don't mark it extern; finish_incomplete_decl
7340              will give it a default size and it will get allocated.  */
7341           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7342             DECL_EXTERNAL (decl) = 1;
7343         }
7344
7345       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7346           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7347                               integer_zero_node))
7348         cp_error ("zero-size array `%D'", decl);
7349
7350       layout_decl (decl, 0);
7351     }
7352 }
7353
7354 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7355    any appropriate error messages regarding the layout.  */
7356
7357 static void
7358 layout_var_decl (decl)
7359      tree decl;
7360 {
7361   tree type = TREE_TYPE (decl);
7362 #if 0
7363   tree ttype = target_type (type);
7364 #endif
7365
7366   /* If we haven't already layed out this declaration, do so now.
7367      Note that we must not call complete type for an external object
7368      because it's type might involve templates that we are not
7369      supposed to isntantiate yet.  (And it's perfectly legal to say
7370      `extern X x' for some incomplete type `X'.)  */
7371   if (!DECL_EXTERNAL (decl))
7372     complete_type (type);
7373   if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
7374     layout_decl (decl, 0);
7375
7376   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7377     {
7378       /* An automatic variable with an incomplete type: that is an error.
7379          Don't talk about array types here, since we took care of that
7380          message in grokdeclarator.  */
7381       cp_error ("storage size of `%D' isn't known", decl);
7382       TREE_TYPE (decl) = error_mark_node;
7383     }
7384 #if 0
7385   /* Keep this code around in case we later want to control debug info
7386      based on whether a type is "used".  (jason 1999-11-11) */
7387
7388   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7389     /* Let debugger know it should output info for this type.  */
7390     note_debug_info_needed (ttype);
7391
7392   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7393     note_debug_info_needed (DECL_CONTEXT (decl));
7394 #endif
7395
7396   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7397       && DECL_SIZE (decl) != NULL_TREE
7398       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7399     {
7400       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7401         constant_expression_warning (DECL_SIZE (decl));
7402       else
7403         cp_error ("storage size of `%D' isn't constant", decl);
7404     }
7405 }
7406
7407 /* If a local static variable is declared in an inline function, or if
7408    we have a weak definition, we must endeavor to create only one
7409    instance of the variable at link-time.  */
7410
7411 static void
7412 maybe_commonize_var (decl)
7413      tree decl;
7414 {
7415   /* Static data in a function with comdat linkage also has comdat
7416      linkage.  */
7417   if (TREE_STATIC (decl)
7418       /* Don't mess with __FUNCTION__.  */
7419       && ! DECL_ARTIFICIAL (decl)
7420       && current_function_decl
7421       && DECL_CONTEXT (decl) == current_function_decl
7422       && (DECL_THIS_INLINE (current_function_decl)
7423           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7424       && TREE_PUBLIC (current_function_decl))
7425     {
7426       /* Rather than try to get this right with inlining, we suppress
7427          inlining of such functions.  */
7428       current_function_cannot_inline
7429         = "function with static variable cannot be inline";
7430
7431       /* If flag_weak, we don't need to mess with this, as we can just
7432          make the function weak, and let it refer to its unique local
7433          copy.  This works because we don't allow the function to be
7434          inlined.  */
7435       if (! flag_weak)
7436         {
7437           if (DECL_INTERFACE_KNOWN (current_function_decl))
7438             {
7439               TREE_PUBLIC (decl) = 1;
7440               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7441             }
7442           else if (DECL_INITIAL (decl) == NULL_TREE
7443                    || DECL_INITIAL (decl) == error_mark_node)
7444             {
7445               TREE_PUBLIC (decl) = 1;
7446               DECL_COMMON (decl) = 1;
7447             }
7448           /* else we lose. We can only do this if we can use common,
7449              which we can't if it has been initialized.  */
7450
7451           if (TREE_PUBLIC (decl))
7452             DECL_ASSEMBLER_NAME (decl)
7453               = build_static_name (current_function_decl, DECL_NAME (decl));
7454           else
7455             {
7456               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7457               cp_warning_at ("  you can work around this by removing the initializer", decl);
7458             }
7459         }
7460     }
7461   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7462     /* Set it up again; we might have set DECL_INITIAL since the last
7463        time.  */
7464     comdat_linkage (decl);
7465 }
7466
7467 /* Issue an error message if DECL is an uninitialized const variable.  */
7468
7469 static void
7470 check_for_uninitialized_const_var (decl)
7471      tree decl;
7472 {
7473   tree type = TREE_TYPE (decl);
7474
7475   /* ``Unless explicitly declared extern, a const object does not have
7476      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7477      7.1.6 */
7478   if (TREE_CODE (decl) == VAR_DECL
7479       && TREE_CODE (type) != REFERENCE_TYPE
7480       && CP_TYPE_CONST_P (type)
7481       && !TYPE_NEEDS_CONSTRUCTING (type)
7482       && !DECL_INITIAL (decl))
7483     cp_error ("uninitialized const `%D'", decl);
7484 }
7485
7486 /* Verify INIT (the initializer for DECL), and record the
7487    initialization in DECL_INITIAL, if appropriate.  Returns a new
7488    value for INIT.  */
7489
7490 static tree
7491 check_initializer (decl, init)
7492      tree decl;
7493      tree init;
7494 {
7495   tree type;
7496
7497   if (TREE_CODE (decl) == FIELD_DECL)
7498     return init;
7499
7500   type = TREE_TYPE (decl);
7501
7502   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7503   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7504     init = NULL_TREE;
7505
7506   /* Check the initializer.  */
7507   if (init)
7508     {
7509       /* Things that are going to be initialized need to have complete
7510          type.  */
7511       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7512
7513       if (type == error_mark_node)
7514         /* We will have already complained.  */
7515         init = NULL_TREE;
7516       else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7517         {
7518           cp_error ("variable-sized object `%D' may not be initialized", decl);
7519           init = NULL_TREE;
7520         }
7521       else if (TREE_CODE (type) == ARRAY_TYPE
7522                && !COMPLETE_TYPE_P (TREE_TYPE (type)))
7523         {
7524           cp_error ("elements of array `%#D' have incomplete type", decl);
7525           init = NULL_TREE;
7526         }
7527       else if (!COMPLETE_TYPE_P (type))
7528         {
7529           cp_error ("`%D' has incomplete type", decl);
7530           TREE_TYPE (decl) = error_mark_node;
7531           init = NULL_TREE;
7532         }
7533     }
7534
7535   if (TREE_CODE (decl) == CONST_DECL)
7536     {
7537       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7538
7539       DECL_INITIAL (decl) = init;
7540
7541       /* This will keep us from needing to worry about our obstacks.  */
7542       my_friendly_assert (init != NULL_TREE, 149);
7543       init = NULL_TREE;
7544     }
7545   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7546     {
7547       if (TREE_STATIC (decl))
7548         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7549       grok_reference_init (decl, type, init);
7550       init = NULL_TREE;
7551     }
7552   else if (init)
7553     {
7554       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7555         {
7556           if (TREE_CODE (type) == ARRAY_TYPE)
7557             init = digest_init (type, init, (tree *) 0);
7558           else if (TREE_CODE (init) == CONSTRUCTOR
7559                    && TREE_HAS_CONSTRUCTOR (init))
7560             {
7561               if (TYPE_NON_AGGREGATE_CLASS (type))
7562                 {
7563                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7564                             decl);
7565                   init = error_mark_node;
7566                 }
7567               else
7568                 goto dont_use_constructor;
7569             }
7570         }
7571       else
7572         {
7573         dont_use_constructor:
7574           if (TREE_CODE (init) != TREE_VEC)
7575             init = store_init_value (decl, init);
7576         }
7577
7578       if (init)
7579         /* We must hide the initializer so that expand_decl
7580            won't try to do something it does not understand.  */
7581         init = obscure_complex_init (decl, init);
7582     }
7583   else if (DECL_EXTERNAL (decl))
7584     ;
7585   else if (TYPE_P (type)
7586            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7587     {
7588       tree core_type = strip_array_types (type);
7589
7590       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7591         {
7592           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7593             cp_error ("structure `%D' with uninitialized const members", decl);
7594           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7595             cp_error ("structure `%D' with uninitialized reference members",
7596                       decl);
7597         }
7598
7599       check_for_uninitialized_const_var (decl);
7600
7601       if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
7602         init = obscure_complex_init (decl, NULL_TREE);
7603
7604     }
7605   else
7606     check_for_uninitialized_const_var (decl);
7607
7608   return init;
7609 }
7610
7611 /* If DECL is not a local variable, give it RTL.  */
7612
7613 static void
7614 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7615      tree decl;
7616      tree init;
7617      const char *asmspec;
7618 {
7619   int toplev;
7620   tree type;
7621
7622   type = TREE_TYPE (decl);
7623   toplev = toplevel_bindings_p ();
7624
7625   /* Handle non-variables up front.  */
7626   if (TREE_CODE (decl) != VAR_DECL)
7627     {
7628       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7629       return;
7630     }
7631
7632   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7633   if (asmspec)
7634     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7635
7636   if (DECL_VIRTUAL_P (decl))
7637     make_decl_rtl (decl, NULL_PTR, toplev);
7638   else if (TREE_READONLY (decl)
7639            && DECL_INITIAL (decl) != NULL_TREE
7640            && DECL_INITIAL (decl) != error_mark_node
7641            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7642     {
7643       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7644
7645       if (toplev && ! TREE_PUBLIC (decl))
7646         {
7647           /* If this is a static const, change its apparent linkage
7648              if it belongs to a #pragma interface.  */
7649           if (!interface_unknown)
7650             {
7651               TREE_PUBLIC (decl) = 1;
7652               DECL_EXTERNAL (decl) = interface_only;
7653             }
7654           make_decl_rtl (decl, asmspec, toplev);
7655         }
7656       else if (toplev)
7657         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7658     }
7659   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7660     {
7661       my_friendly_assert (TREE_STATIC (decl), 19990828);
7662
7663       if (init == NULL_TREE
7664 #ifdef DEFAULT_STATIC_DEFS
7665           /* If this code is dead, then users must
7666              explicitly declare static member variables
7667              outside the class def'n as well.  */
7668           && TYPE_NEEDS_CONSTRUCTING (type)
7669 #endif
7670           )
7671         {
7672           DECL_EXTERNAL (decl) = 1;
7673           make_decl_rtl (decl, asmspec, 1);
7674         }
7675       else
7676         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7677     }
7678   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7679            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7680     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7681 }
7682
7683 /* Create RTL for the local static variable DECL.  */
7684
7685 void
7686 make_rtl_for_local_static (decl)
7687      tree decl;
7688 {
7689   const char *asmspec = NULL;
7690
7691   /* If we inlined this variable, we could see it's declaration
7692      again.  */
7693   if (DECL_RTL (decl))
7694     return;
7695
7696   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7697     {
7698       /* The only way this situaton can occur is if the
7699          user specified a name for this DECL using the
7700          `attribute' syntax.  */
7701       asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7702       DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7703     }
7704
7705   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7706 }
7707
7708 /* The old ARM scoping rules injected variables declared in the
7709    initialization statement of a for-statement into the surrounding
7710    scope.  We support this usage, in order to be backward-compatible.
7711    DECL is a just-declared VAR_DECL; if necessary inject its
7712    declaration into the surrounding scope.  */
7713
7714 void
7715 maybe_inject_for_scope_var (decl)
7716      tree decl;
7717 {
7718   if (current_binding_level->is_for_scope)
7719     {
7720       struct binding_level *outer
7721         = current_binding_level->level_chain;
7722
7723       /* Check to see if the same name is already bound at the outer
7724          level, either because it was directly declared, or because a
7725          dead for-decl got preserved.  In either case, the code would
7726          not have been valid under the ARM scope rules, so clear
7727          is_for_scope for the current_binding_level.
7728
7729          Otherwise, we need to preserve the temp slot for decl to last
7730          into the outer binding level.  */
7731
7732       tree outer_binding
7733         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7734
7735       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7736           && (TREE_CODE (BINDING_VALUE (outer_binding))
7737               == VAR_DECL)
7738           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7739         {
7740           BINDING_VALUE (outer_binding)
7741             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7742           current_binding_level->is_for_scope = 0;
7743         }
7744       else if (DECL_IN_MEMORY_P (decl))
7745         preserve_temp_slots (DECL_RTL (decl));
7746     }
7747 }
7748
7749 /* Generate code to initialize DECL (a local variable).  */
7750
7751 void
7752 initialize_local_var (decl, init, flags)
7753      tree decl;
7754      tree init;
7755      int flags;
7756 {
7757   tree type = TREE_TYPE (decl);
7758
7759   /* If the type is bogus, don't bother initializing the variable.  */
7760   if (type == error_mark_node)
7761     return;
7762
7763   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7764     {
7765       /* If we used it already as memory, it must stay in memory.  */
7766       DECL_INITIAL (decl) = NULL_TREE;
7767       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7768     }
7769
7770   /* Local statics are handled differently from ordinary automatic
7771      variables.  */
7772   if (TREE_STATIC (decl))
7773     {
7774       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7775           || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7776         expand_static_init (decl, init);
7777       return;
7778     }
7779
7780   if (DECL_SIZE (decl) && type != error_mark_node)
7781     {
7782       int already_used;
7783
7784       /* Compute and store the initial value.  */
7785       already_used = TREE_USED (decl) || TREE_USED (type);
7786
7787       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7788         {
7789           int saved_stmts_are_full_exprs_p;
7790
7791           emit_line_note (DECL_SOURCE_FILE (decl),
7792                           DECL_SOURCE_LINE (decl));
7793           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7794           stmts_are_full_exprs_p = 1;
7795           finish_expr_stmt (build_aggr_init (decl, init, flags));
7796           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7797         }
7798
7799       /* Set this to 0 so we can tell whether an aggregate which was
7800          initialized was ever used.  Don't do this if it has a
7801          destructor, so we don't complain about the 'resource
7802          allocation is initialization' idiom.  Now set
7803          attribute((unused)) on types so decls of that type will be
7804          marked used. (see TREE_USED, above.)  */
7805       if (TYPE_NEEDS_CONSTRUCTING (type)
7806           && ! already_used
7807           && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7808           && DECL_NAME (decl))
7809         TREE_USED (decl) = 0;
7810       else if (already_used)
7811         TREE_USED (decl) = 1;
7812     }
7813 }
7814
7815 /* Generate code to destroy DECL (a local variable).  */
7816
7817 static void
7818 destroy_local_var (decl)
7819      tree decl;
7820 {
7821   tree type = TREE_TYPE (decl);
7822   tree cleanup;
7823
7824   /* Only variables get cleaned up.  */
7825   if (TREE_CODE (decl) != VAR_DECL)
7826     return;
7827
7828   /* And only things with destructors need cleaning up.  */
7829   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7830     return;
7831
7832   if (TREE_CODE (decl) == VAR_DECL &&
7833       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7834     /* We don't clean up things that aren't defined in this
7835        translation unit, or that need a static cleanup.  The latter
7836        are handled by finish_file.  */
7837     return;
7838
7839   /* Compute the cleanup.  */
7840   cleanup = maybe_build_cleanup (decl);
7841
7842   /* Record the cleanup required for this declaration.  */
7843   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7844       && cleanup)
7845     finish_decl_cleanup (decl, cleanup);
7846 }
7847
7848 /* Let the back-end know about DECL.  */
7849
7850 void
7851 emit_local_var (decl)
7852      tree decl;
7853 {
7854   /* Create RTL for this variable.  */
7855   if (DECL_RTL (decl))
7856     /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7857        All other local variables are assigned RTL in this function.  */
7858     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7859                         19990828);
7860   else
7861     {
7862       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7863         /* The user must have specified an assembler name for this
7864            variable.  Set that up now.  */
7865         rest_of_decl_compilation
7866           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7867            /*top_level=*/0, /*at_end=*/0);
7868       else
7869         expand_decl (decl);
7870     }
7871
7872   /* Actually do the initialization.  */
7873   if (stmts_are_full_exprs_p)
7874     expand_start_target_temps ();
7875
7876   expand_decl_init (decl);
7877
7878   if (stmts_are_full_exprs_p)
7879     expand_end_target_temps ();
7880 }
7881
7882 /* Finish processing of a declaration;
7883    install its line number and initial value.
7884    If the length of an array type is not known before,
7885    it must be determined now, from the initial value, or it is an error.
7886
7887    INIT0 holds the value of an initializer that should be allowed to escape
7888    the normal rules.
7889
7890    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
7891    if the (init) syntax was used.  */
7892
7893 void
7894 cp_finish_decl (decl, init, asmspec_tree, flags)
7895      tree decl, init;
7896      tree asmspec_tree;
7897      int flags;
7898 {
7899   register tree type;
7900   tree ttype = NULL_TREE;
7901   const char *asmspec = NULL;
7902   int was_readonly = 0;
7903
7904   if (! decl)
7905     {
7906       if (init)
7907         error ("assignment (not initialization) in declaration");
7908       return;
7909     }
7910
7911   /* If a name was specified, get the string.  */
7912   if (asmspec_tree)
7913       asmspec = TREE_STRING_POINTER (asmspec_tree);
7914
7915   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7916     {
7917       cp_error ("cannot initialize `%D' to namespace `%D'",
7918                 decl, init);
7919       init = NULL_TREE;
7920     }
7921
7922   if (current_class_type
7923       && CP_DECL_CONTEXT (decl) == current_class_type
7924       && TYPE_BEING_DEFINED (current_class_type)
7925       && (DECL_INITIAL (decl) || init))
7926     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7927
7928   if (TREE_CODE (decl) == VAR_DECL
7929       && DECL_CONTEXT (decl)
7930       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7931       && DECL_CONTEXT (decl) != current_namespace
7932       && init)
7933     {
7934       /* Leave the namespace of the object. */
7935       pop_decl_namespace ();
7936     }
7937
7938   type = TREE_TYPE (decl);
7939
7940   if (type == error_mark_node)
7941     return;
7942   
7943   /* Add this declaration to the statement-tree.  */
7944   if (building_stmt_tree () && at_function_scope_p ())
7945     add_decl_stmt (decl);
7946
7947   if (TYPE_HAS_MUTABLE_P (type))
7948     TREE_READONLY (decl) = 0;
7949
7950   if (processing_template_decl)
7951     {
7952       if (init && DECL_INITIAL (decl))
7953         DECL_INITIAL (decl) = init;
7954       goto finish_end0;
7955     }
7956
7957   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7958   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7959
7960   /* Take care of TYPE_DECLs up front.  */
7961   if (TREE_CODE (decl) == TYPE_DECL)
7962     {
7963       if (init && DECL_INITIAL (decl))
7964         {
7965           /* typedef foo = bar; store the type of bar as the type of foo.  */
7966           TREE_TYPE (decl) = type = TREE_TYPE (init);
7967           DECL_INITIAL (decl) = init = NULL_TREE;
7968         }
7969       if (type != error_mark_node
7970           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7971         {
7972           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7973             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7974           set_identifier_type_value (DECL_NAME (decl), type);
7975           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7976         }
7977       GNU_xref_decl (current_function_decl, decl);
7978
7979       /* If we have installed this as the canonical typedef for this
7980          type, and that type has not been defined yet, delay emitting
7981          the debug information for it, as we will emit it later.  */
7982       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7983           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7984         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7985
7986       rest_of_decl_compilation (decl, NULL_PTR,
7987                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7988       goto finish_end;
7989     }
7990
7991   if (TREE_CODE (decl) != FUNCTION_DECL)
7992     ttype = target_type (type);
7993
7994   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7995       && TYPE_NEEDS_CONSTRUCTING (type))
7996     {
7997       /* Currently, GNU C++ puts constants in text space, making them
7998          impossible to initialize.  In the future, one would hope for
7999          an operating system which understood the difference between
8000          initialization and the running of a program.  */
8001       was_readonly = 1;
8002       TREE_READONLY (decl) = 0;
8003     }
8004
8005   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8006     {
8007       /* This must override the asm specifier which was placed by
8008          grokclassfn.  Lay this out fresh.  */
8009       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8010       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8011       make_decl_rtl (decl, asmspec, 0);
8012     }
8013
8014   /* Deduce size of array from initialization, if not already known.  */
8015   maybe_deduce_size_from_array_init (decl, init);
8016   init = check_initializer (decl, init);
8017
8018   GNU_xref_decl (current_function_decl, decl);
8019
8020   if (TREE_CODE (decl) == VAR_DECL)
8021     layout_var_decl (decl);
8022
8023   /* Output the assembler code and/or RTL code for variables and functions,
8024      unless the type is an undefined structure or union.
8025      If not, it will get done when the type is completed.  */
8026   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8027       || TREE_CODE (decl) == RESULT_DECL)
8028     {
8029       if (TREE_CODE (decl) == VAR_DECL)
8030         maybe_commonize_var (decl);
8031
8032       make_rtl_for_nonlocal_decl (decl, init, asmspec);
8033
8034       if (TREE_CODE (type) == FUNCTION_TYPE
8035           || TREE_CODE (type) == METHOD_TYPE)
8036         abstract_virtuals_error (decl,
8037                                  strip_array_types (TREE_TYPE (type)));
8038       else
8039         abstract_virtuals_error (decl, strip_array_types (type));
8040
8041       if (TREE_CODE (decl) == FUNCTION_DECL)
8042         ;
8043       else if (DECL_EXTERNAL (decl)
8044                && ! (DECL_LANG_SPECIFIC (decl)
8045                      && DECL_NOT_REALLY_EXTERN (decl)))
8046         {
8047           if (init)
8048             DECL_INITIAL (decl) = init;
8049         }
8050       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8051         {
8052           /* This is a local declaration.  */
8053           if (doing_semantic_analysis_p ())
8054             maybe_inject_for_scope_var (decl);
8055           /* Initialize the local variable.  But, if we're building a
8056              statement-tree, we'll do the initialization when we
8057              expand the tree.  */
8058           if (processing_template_decl)
8059             {
8060               if (init || DECL_INITIAL (decl) == error_mark_node)
8061                 DECL_INITIAL (decl) = init;
8062             }
8063           else
8064             {
8065               /* If we're not building RTL, then we need to do so
8066                  now.  */
8067               if (!building_stmt_tree ())
8068                 emit_local_var (decl);
8069               /* Initialize the variable.  */
8070               initialize_local_var (decl, init, flags);
8071               /* Clean up the variable.  */
8072               destroy_local_var (decl);
8073             }
8074         }
8075       else if (TREE_STATIC (decl) && type != error_mark_node)
8076         {
8077           /* Cleanups for static variables are handled by `finish_file'.  */
8078           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8079               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8080             expand_static_init (decl, init);
8081         }
8082     finish_end0:
8083
8084       /* Undo call to `pushclass' that was done in `start_decl'
8085          due to initialization of qualified member variable.
8086          I.e., Foo::x = 10;  */
8087       {
8088         tree context = CP_DECL_CONTEXT (decl);
8089         if (context
8090             && TYPE_P (context)
8091             && (TREE_CODE (decl) == VAR_DECL
8092                 /* We also have a pushclass done that we need to undo here
8093                    if we're at top level and declare a method.  */
8094                 || TREE_CODE (decl) == FUNCTION_DECL)
8095             /* If size hasn't been set, we're still defining it,
8096                and therefore inside the class body; don't pop
8097                the binding level..  */
8098             && COMPLETE_TYPE_P (context)
8099             && context == current_class_type)
8100           pop_nested_class ();
8101       }
8102     }
8103
8104  finish_end:
8105
8106   if (was_readonly)
8107     TREE_READONLY (decl) = 1;
8108 }
8109
8110 /* This is here for a midend callback from c-common.c */
8111
8112 void
8113 finish_decl (decl, init, asmspec_tree)
8114      tree decl, init;
8115      tree asmspec_tree;
8116 {
8117   cp_finish_decl (decl, init, asmspec_tree, 0);
8118 }
8119
8120 /* Returns a declaration for a VAR_DECL as if:
8121
8122      extern "C" TYPE NAME;
8123
8124    had been seen.  Used to create compiler-generated global
8125    variables.  */
8126
8127 tree
8128 declare_global_var (name, type)
8129      tree name;
8130      tree type;
8131 {
8132   tree decl;
8133
8134   push_to_top_level ();
8135   decl = build_decl (VAR_DECL, name, type);
8136   TREE_PUBLIC (decl) = 1;
8137   DECL_EXTERNAL (decl) = 1;
8138   DECL_ARTIFICIAL (decl) = 1;
8139   pushdecl (decl);
8140   cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8141   pop_from_top_level ();
8142
8143   return decl;
8144 }
8145
8146 /* Returns a pointer to the `atexit' function.  Note that if
8147    FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8148    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
8149
8150 static tree
8151 get_atexit_node ()
8152 {
8153   tree atexit_fndecl;
8154   tree arg_types;
8155   tree fn_type;
8156   tree fn_ptr_type;
8157   const char *name;
8158
8159   if (atexit_node)
8160     return atexit_node;
8161
8162   if (flag_use_cxa_atexit)
8163     {
8164       /* The declaration for `__cxa_atexit' is:
8165
8166            int __cxa_atexit (void (*)(void *), void *, void *)
8167
8168          We build up the argument types and then then function type
8169          itself.  */
8170
8171       /* First, build the pointer-to-function type for the first
8172          argument.  */
8173       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8174       fn_type = build_function_type (void_type_node, arg_types);
8175       fn_ptr_type = build_pointer_type (fn_type);
8176       /* Then, build the rest of the argument types.  */
8177       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8178       arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8179       arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8180       /* And the final __cxa_atexit type.  */
8181       fn_type = build_function_type (integer_type_node, arg_types);
8182       fn_ptr_type = build_pointer_type (fn_type);
8183       name = "__cxa_atexit";
8184     }
8185   else
8186     {
8187       /* The declaration for `atexit' is:
8188
8189            int atexit (void (*)());
8190
8191          We build up the argument types and then then function type
8192          itself.  */
8193       fn_type = build_function_type (void_type_node, void_list_node);
8194       fn_ptr_type = build_pointer_type (fn_type);
8195       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8196       /* Build the final atexit type.  */
8197       fn_type = build_function_type (integer_type_node, arg_types);
8198       name = "atexit";
8199     }
8200
8201   /* Now, build the function declaration.  */
8202   push_lang_context (lang_name_c);
8203   atexit_fndecl = build_library_fn_ptr (name, fn_type);
8204   mark_used (atexit_fndecl);
8205   pop_lang_context ();
8206   atexit_node = default_conversion (atexit_fndecl);
8207
8208   return atexit_node;
8209 }
8210
8211 /* Returns the __dso_handle VAR_DECL.  */
8212
8213 static tree
8214 get_dso_handle_node ()
8215 {
8216   if (dso_handle_node)
8217     return dso_handle_node;
8218
8219   /* Declare the variable.  */
8220   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8221                                         ptr_type_node);
8222
8223   return dso_handle_node;
8224 }
8225
8226 /* Begin a new function with internal linkage whose job will be simply
8227    to destroy some particular variable.  */
8228
8229 static tree
8230 start_cleanup_fn ()
8231 {
8232   static int counter = 0;
8233   int old_interface_unknown = interface_unknown;
8234   char name[32];
8235   tree parmtypes;
8236   tree fntype;
8237   tree fndecl;
8238
8239   push_to_top_level ();
8240
8241   /* No need to mangle this.  */
8242   push_lang_context (lang_name_c);
8243
8244   interface_unknown = 1;
8245
8246   /* Build the parameter-types.  */
8247   parmtypes = void_list_node;
8248   /* Functions passed to __cxa_atexit take an additional parameter.
8249      We'll just ignore it.  After we implement the new calling
8250      convention for destructors, we can eliminate the use of
8251      additional cleanup functions entirely in the -fnew-abi case.  */
8252   if (flag_use_cxa_atexit)
8253     parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8254   /* Build the function type itself.  */
8255   fntype = build_function_type (void_type_node, parmtypes);
8256   /* Build the name of the function.  */
8257   sprintf (name, "__tcf_%d", counter++);
8258   /* Build the function declaration.  */
8259   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8260   /* It's a function with internal linkage, generated by the
8261      compiler.  */
8262   TREE_PUBLIC (fndecl) = 0;
8263   DECL_ARTIFICIAL (fndecl) = 1;
8264   /* Build the parameter.  */
8265   if (flag_use_cxa_atexit)
8266     {
8267       tree parmdecl;
8268
8269       parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8270       DECL_CONTEXT (parmdecl) = fndecl;
8271       DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8272       TREE_USED (parmdecl) = 1;
8273       DECL_ARGUMENTS (fndecl) = parmdecl;
8274     }
8275
8276   pushdecl (fndecl);
8277   start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8278   do_pushlevel ();
8279
8280   interface_unknown = old_interface_unknown;
8281
8282   pop_lang_context ();
8283
8284   return current_function_decl;
8285 }
8286
8287 /* Finish the cleanup function begun by start_cleanup_fn.  */
8288
8289 static void
8290 end_cleanup_fn ()
8291 {
8292   do_poplevel ();
8293
8294   expand_body (finish_function (0));
8295
8296   pop_from_top_level ();
8297 }
8298
8299 /* Generate code to handle the destruction of DECL, an object with
8300    static storage duration.  */
8301
8302 void
8303 register_dtor_fn (decl)
8304      tree decl;
8305 {
8306   tree cleanup;
8307   tree compound_stmt;
8308   tree args;
8309   tree fcall;
8310
8311   int saved_flag_access_control;
8312
8313   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8314     return;
8315
8316   /* Call build_cleanup before we enter the anonymous function so that
8317      any access checks will be done relative to the current scope,
8318      rather than the scope of the anonymous function.  */
8319   build_cleanup (decl);
8320
8321   /* Now start the function.  */
8322   cleanup = start_cleanup_fn ();
8323
8324   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8325      to the original function, rather than the anonymous one.  That
8326      will make the back-end think that nested functions are in use,
8327      which causes confusion.  */
8328   saved_flag_access_control = flag_access_control;
8329   flag_access_control = 0;
8330   fcall = build_cleanup (decl);
8331   flag_access_control = saved_flag_access_control;
8332
8333   /* Create the body of the anonymous function.  */
8334   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8335   finish_expr_stmt (fcall);
8336   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8337   end_cleanup_fn ();
8338
8339   /* Call atexit with the cleanup function.  */
8340   mark_addressable (cleanup);
8341   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8342   if (flag_use_cxa_atexit)
8343     {
8344       args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8345       args = tree_cons (NULL_TREE, null_pointer_node, args);
8346       args = tree_cons (NULL_TREE, cleanup, args);
8347     }
8348   else
8349     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8350   finish_expr_stmt (build_function_call (get_atexit_node (), args));
8351 }
8352
8353 void
8354 expand_static_init (decl, init)
8355      tree decl;
8356      tree init;
8357 {
8358   tree oldstatic = value_member (decl, static_aggregates);
8359
8360   if (oldstatic)
8361     {
8362       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8363         cp_error ("multiple initializations given for `%D'", decl);
8364     }
8365   else if (! toplevel_bindings_p ())
8366     {
8367       /* Emit code to perform this initialization but once.  */
8368       tree temp;
8369       tree if_stmt;
8370       tree then_clause;
8371       tree assignment;
8372       tree temp_init;
8373
8374       /* Emit code to perform this initialization but once.  This code
8375          looks like:
8376
8377            static int temp = 0;
8378            if (!temp) {
8379              // Do initialization.
8380              temp = 1;
8381              // Register variable for destruction at end of program.
8382            }
8383
8384          Note that the `temp' variable is only set to 1 *after* the
8385          initialization is complete.  This ensures that an exception,
8386          thrown during the construction, will cause the variable to
8387          reinitialized when we pass through this code again, as per:
8388
8389            [stmt.dcl]
8390
8391            If the initialization exits by throwing an exception, the
8392            initialization is not complete, so it will be tried again
8393            the next time control enters the declaration.
8394
8395          In theory, this process should be thread-safe, too; multiple
8396          threads should not be able to initialize the variable more
8397          than once.  We don't yet attempt to ensure thread-safety.  */
8398       temp = get_temp_name (integer_type_node, 1);
8399       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8400
8401       /* Begin the conditional initialization.  */
8402       if_stmt = begin_if_stmt ();
8403       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8404                                             integer_zero_node),
8405                            if_stmt);
8406       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8407
8408       /* Do the initialization itself.  */
8409       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8410           || (init && TREE_CODE (init) == TREE_LIST))
8411         assignment = build_aggr_init (decl, init, 0);
8412       else if (init)
8413         /* The initialization we're doing here is just a bitwise
8414            copy.  */
8415         assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8416       else
8417         assignment = NULL_TREE;
8418
8419       /* Once the assignment is complete, set TEMP to 1.  Since the
8420          construction of the static object is complete at this point,
8421          we want to make sure TEMP is set to 1 even if a temporary
8422          constructed during the initialization throws an exception
8423          when it is destroyed.  So, we combine the initialization and
8424          the assignment to TEMP into a single expression, ensuring
8425          that when we call finish_expr_stmt the cleanups will not be
8426          run until after TEMP is set to 1.  */
8427       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8428       if (assignment)
8429         {
8430           assignment = tree_cons (NULL_TREE, assignment,
8431                                   build_tree_list (NULL_TREE,
8432                                                    temp_init));
8433           assignment = build_compound_expr (assignment);
8434         }
8435       else
8436         assignment = temp_init;
8437       finish_expr_stmt (assignment);
8438
8439       /* Use atexit to register a function for destroying this static
8440          variable.  */
8441       register_dtor_fn (decl);
8442
8443       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8444       finish_then_clause (if_stmt);
8445       finish_if_stmt ();
8446     }
8447   else
8448     static_aggregates = tree_cons (init, decl, static_aggregates);
8449 }
8450
8451 /* Finish the declaration of a catch-parameter.  */
8452
8453 tree
8454 start_handler_parms (declspecs, declarator)
8455      tree declspecs;
8456      tree declarator;
8457 {
8458   tree decl;
8459   if (declspecs)
8460     {
8461       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8462                              1, NULL_TREE);
8463       if (decl == NULL_TREE)
8464         error ("invalid catch parameter");
8465     }
8466   else
8467     decl = NULL_TREE;
8468
8469   return decl;
8470 }
8471
8472 \f
8473 /* Make TYPE a complete type based on INITIAL_VALUE.
8474    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8475    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8476
8477 int
8478 complete_array_type (type, initial_value, do_default)
8479      tree type, initial_value;
8480      int do_default;
8481 {
8482   register tree maxindex = NULL_TREE;
8483   int value = 0;
8484
8485   if (initial_value)
8486     {
8487       /* Note MAXINDEX  is really the maximum index,
8488          one less than the size.  */
8489       if (TREE_CODE (initial_value) == STRING_CST)
8490         {
8491           int eltsize
8492             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8493           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8494                                    / eltsize) - 1, 0);
8495         }
8496       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8497         {
8498           tree elts = CONSTRUCTOR_ELTS (initial_value);
8499
8500           maxindex = ssize_int (-1);
8501           for (; elts; elts = TREE_CHAIN (elts))
8502             {
8503               if (TREE_PURPOSE (elts))
8504                 maxindex = TREE_PURPOSE (elts);
8505               else
8506                 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8507             }
8508           maxindex = copy_node (maxindex);
8509         }
8510       else
8511         {
8512           /* Make an error message unless that happened already.  */
8513           if (initial_value != error_mark_node)
8514             value = 1;
8515           else
8516             initial_value = NULL_TREE;
8517
8518           /* Prevent further error messages.  */
8519           maxindex = build_int_2 (0, 0);
8520         }
8521     }
8522
8523   if (!maxindex)
8524     {
8525       if (do_default)
8526         maxindex = build_int_2 (0, 0);
8527       value = 2;
8528     }
8529
8530   if (maxindex)
8531     {
8532       tree itype;
8533       tree domain;
8534
8535       domain = build_index_type (maxindex);
8536       TYPE_DOMAIN (type) = domain;
8537
8538       if (! TREE_TYPE (maxindex))
8539         TREE_TYPE (maxindex) = domain;
8540       if (initial_value)
8541         itype = TREE_TYPE (initial_value);
8542       else
8543         itype = NULL;
8544       if (itype && !TYPE_DOMAIN (itype))
8545         TYPE_DOMAIN (itype) = domain;
8546       /* The type of the main variant should never be used for arrays
8547          of different sizes.  It should only ever be completed with the
8548          size of the array.  */
8549       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8550         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8551     }
8552
8553   /* Lay out the type now that we can get the real answer.  */
8554
8555   layout_type (type);
8556
8557   return value;
8558 }
8559 \f
8560 /* Return zero if something is declared to be a member of type
8561    CTYPE when in the context of CUR_TYPE.  STRING is the error
8562    message to print in that case.  Otherwise, quietly return 1.  */
8563
8564 static int
8565 member_function_or_else (ctype, cur_type, flags)
8566      tree ctype, cur_type;
8567      enum overload_flags flags;
8568 {
8569   if (ctype && ctype != cur_type)
8570     {
8571       if (flags == DTOR_FLAG)
8572         error ("destructor for alien class `%s' cannot be a member",
8573                TYPE_NAME_STRING (ctype));
8574       else
8575         error ("constructor for alien class `%s' cannot be a member",
8576                TYPE_NAME_STRING (ctype));
8577       return 0;
8578     }
8579   return 1;
8580 }
8581 \f
8582 /* Subroutine of `grokdeclarator'.  */
8583
8584 /* Generate errors possibly applicable for a given set of specifiers.
8585    This is for ARM $7.1.2.  */
8586
8587 static void
8588 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8589      tree object;
8590      const char *type;
8591      int virtualp, quals, friendp, raises, inlinep;
8592 {
8593   if (virtualp)
8594     cp_error ("`%D' declared as a `virtual' %s", object, type);
8595   if (inlinep)
8596     cp_error ("`%D' declared as an `inline' %s", object, type);
8597   if (quals)
8598     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8599               object, type);
8600   if (friendp)
8601     cp_error_at ("`%D' declared as a friend", object);
8602   if (raises)
8603     cp_error_at ("`%D' declared with an exception specification", object);
8604 }
8605
8606 /* CTYPE is class type, or null if non-class.
8607    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8608    or METHOD_TYPE.
8609    DECLARATOR is the function's name.
8610    VIRTUALP is truthvalue of whether the function is virtual or not.
8611    FLAGS are to be passed through to `grokclassfn'.
8612    QUALS are qualifiers indicating whether the function is `const'
8613    or `volatile'.
8614    RAISES is a list of exceptions that this function can raise.
8615    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8616    not look, and -1 if we should not call `grokclassfn' at all.
8617
8618    Returns `NULL_TREE' if something goes wrong, after issuing
8619    applicable error messages.  */
8620
8621 static tree
8622 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8623             raises, check, friendp, publicp, inlinep, funcdef_flag,
8624             template_count, in_namespace)
8625      tree ctype, type;
8626      tree declarator;
8627      tree orig_declarator;
8628      int virtualp;
8629      enum overload_flags flags;
8630      tree quals, raises;
8631      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8632      tree in_namespace;
8633 {
8634   tree cname, decl;
8635   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8636   int has_default_arg = 0;
8637   tree t;
8638
8639   if (ctype)
8640     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8641       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8642   else
8643     cname = NULL_TREE;
8644
8645   if (raises)
8646     {
8647       type = build_exception_variant (type, raises);
8648     }
8649
8650   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8651   /* Propagate volatile out from type to decl. */
8652   if (TYPE_VOLATILE (type))
8653     TREE_THIS_VOLATILE (decl) = 1;
8654
8655   /* If this decl has namespace scope, set that up.  */
8656   if (in_namespace)
8657     set_decl_namespace (decl, in_namespace, friendp);
8658   else if (publicp && ! ctype)
8659     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8660
8661   /* `main' and builtins have implicit 'C' linkage.  */
8662   if ((MAIN_NAME_P (declarator)
8663        || (IDENTIFIER_LENGTH (declarator) > 10
8664            && IDENTIFIER_POINTER (declarator)[0] == '_'
8665            && IDENTIFIER_POINTER (declarator)[1] == '_'
8666            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8667       && current_lang_name == lang_name_cplusplus
8668       && ctype == NULL_TREE
8669       /* NULL_TREE means global namespace.  */
8670       && DECL_CONTEXT (decl) == NULL_TREE)
8671     DECL_LANGUAGE (decl) = lang_c;
8672
8673   /* Should probably propagate const out from type to decl I bet (mrs).  */
8674   if (staticp)
8675     {
8676       DECL_STATIC_FUNCTION_P (decl) = 1;
8677       DECL_CONTEXT (decl) = ctype;
8678     }
8679
8680   if (ctype)
8681     DECL_CONTEXT (decl) = ctype;
8682
8683   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8684     {
8685       if (processing_template_decl)
8686         error ("cannot declare `::main' to be a template");
8687       if (inlinep)
8688         error ("cannot declare `::main' to be inline");
8689       else if (! publicp)
8690         error ("cannot declare `::main' to be static");
8691       inlinep = 0;
8692       publicp = 1;
8693     }
8694
8695   /* Members of anonymous types and local classes have no linkage; make
8696      them internal.  */
8697   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8698                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8699     publicp = 0;
8700
8701   if (publicp)
8702     {
8703       /* [basic.link]: A name with no linkage (notably, the name of a class
8704          or enumeration declared in a local scope) shall not be used to
8705          declare an entity with linkage.
8706
8707          Only check this for public decls for now.  */
8708       t = no_linkage_check (TREE_TYPE (decl));
8709       if (t)
8710         {
8711           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8712             {
8713               if (DECL_EXTERN_C_P (decl))
8714                 /* Allow this; it's pretty common in C.  */;
8715               else
8716                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8717                             decl);
8718             }
8719           else
8720             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8721                         decl, t);
8722         }
8723     }
8724
8725   TREE_PUBLIC (decl) = publicp;
8726   if (! publicp)
8727     {
8728       DECL_INTERFACE_KNOWN (decl) = 1;
8729       DECL_NOT_REALLY_EXTERN (decl) = 1;
8730     }
8731
8732   if (inlinep)
8733     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8734
8735   DECL_EXTERNAL (decl) = 1;
8736   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8737     {
8738       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8739                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8740       quals = NULL_TREE;
8741     }
8742
8743   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8744     grok_op_properties (decl, virtualp, check < 0);
8745
8746   if (ctype && decl_function_context (decl))
8747     DECL_NO_STATIC_CHAIN (decl) = 1;
8748
8749   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8750     if (TREE_PURPOSE (t)
8751         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8752       {
8753         has_default_arg = 1;
8754         break;
8755       }
8756
8757   if (friendp
8758       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8759     {
8760       if (funcdef_flag)
8761         cp_error
8762           ("defining explicit specialization `%D' in friend declaration",
8763            orig_declarator);
8764       else
8765         {
8766           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8767             {
8768               /* Something like `template <class T> friend void f<T>()'.  */
8769               cp_error ("invalid use of template-id `%D' in declaration of primary template",
8770                         orig_declarator);
8771               return NULL_TREE;
8772             }
8773
8774
8775           /* A friend declaration of the form friend void f<>().  Record
8776              the information in the TEMPLATE_ID_EXPR.  */
8777           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8778           DECL_TEMPLATE_INFO (decl)
8779             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8780                          TREE_OPERAND (orig_declarator, 1),
8781                          NULL_TREE);
8782
8783           if (has_default_arg)
8784             {
8785               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8786                         decl);
8787               return NULL_TREE;
8788             }
8789
8790           if (inlinep)
8791             {
8792               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8793                         decl);
8794               return NULL_TREE;
8795             }
8796         }
8797     }
8798
8799   if (has_default_arg)
8800     add_defarg_fn (decl);
8801
8802   /* Plain overloading: will not be grok'd by grokclassfn.  */
8803   if (! ctype && ! processing_template_decl
8804       && !DECL_EXTERN_C_P (decl)
8805       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8806     set_mangled_name_for_decl (decl);
8807
8808   if (funcdef_flag)
8809     /* Make the init_value nonzero so pushdecl knows this is not
8810        tentative.  error_mark_node is replaced later with the BLOCK.  */
8811     DECL_INITIAL (decl) = error_mark_node;
8812
8813   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8814     TREE_NOTHROW (decl) = 1;
8815
8816   /* Caller will do the rest of this.  */
8817   if (check < 0)
8818     return decl;
8819
8820   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8821     DECL_CONSTRUCTOR_P (decl) = 1;
8822
8823   /* Function gets the ugly name, field gets the nice one.  This call
8824      may change the type of the function (because of default
8825      parameters)!  */
8826   if (ctype != NULL_TREE)
8827     grokclassfn (ctype, decl, flags, quals);
8828
8829   decl = check_explicit_specialization (orig_declarator, decl,
8830                                         template_count,
8831                                         2 * (funcdef_flag != 0) +
8832                                         4 * (friendp != 0));
8833   if (decl == error_mark_node)
8834     return NULL_TREE;
8835
8836   if (ctype != NULL_TREE
8837       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8838       && check)
8839     {
8840       tree old_decl;
8841
8842       old_decl = check_classfn (ctype, decl);
8843
8844       if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8845         /* Because grokfndecl is always supposed to return a
8846            FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8847            here.  We depend on our callers to figure out that its
8848            really a template that's being returned.  */
8849         old_decl = DECL_TEMPLATE_RESULT (old_decl);
8850
8851       if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8852           && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8853         {
8854           /* Remove the `this' parm added by grokclassfn.
8855              XXX Isn't this done in start_function, too?  */
8856           revert_static_member_fn (decl);
8857           last_function_parms = TREE_CHAIN (last_function_parms);
8858         }
8859       if (old_decl && DECL_ARTIFICIAL (old_decl))
8860         cp_error ("definition of implicitly-declared `%D'", old_decl);
8861
8862       if (old_decl)
8863         {
8864           /* Since we've smashed OLD_DECL to its
8865              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8866           if (TREE_CODE (decl) == TEMPLATE_DECL)
8867             decl = DECL_TEMPLATE_RESULT (decl);
8868
8869           /* Attempt to merge the declarations.  This can fail, in
8870              the case of some illegal specialization declarations.  */
8871           if (!duplicate_decls (decl, old_decl))
8872             cp_error ("no `%#D' member function declared in class `%T'",
8873                       decl, ctype);
8874           return old_decl;
8875         }
8876     }
8877
8878   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8879     return NULL_TREE;
8880
8881   if (ctype == NULL_TREE || check)
8882     return decl;
8883
8884   if (virtualp)
8885     {
8886       DECL_VIRTUAL_P (decl) = 1;
8887       if (DECL_VINDEX (decl) == NULL_TREE)
8888         DECL_VINDEX (decl) = error_mark_node;
8889       IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8890     }
8891
8892   return decl;
8893 }
8894
8895 static tree
8896 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8897      tree type;
8898      tree declarator;
8899      RID_BIT_TYPE *specbits_in;
8900      int initialized;
8901      int constp;
8902      tree in_namespace;
8903 {
8904   tree decl;
8905   RID_BIT_TYPE specbits;
8906
8907   specbits = *specbits_in;
8908
8909   if (TREE_CODE (type) == OFFSET_TYPE)
8910     {
8911       /* If you declare a static member so that it
8912          can be initialized, the code will reach here.  */
8913       tree basetype = TYPE_OFFSET_BASETYPE (type);
8914       type = TREE_TYPE (type);
8915       decl = build_lang_decl (VAR_DECL, declarator, type);
8916       DECL_CONTEXT (decl) = basetype;
8917       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8918     }
8919   else
8920     {
8921       tree context;
8922
8923       if (in_namespace)
8924         context = in_namespace;
8925       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8926         context = current_namespace;
8927       else
8928         context = NULL_TREE;
8929
8930       if (processing_template_decl && context)
8931         /* For global variables, declared in a template, we need the
8932            full lang_decl.  */
8933         decl = build_lang_decl (VAR_DECL, declarator, type);
8934       else
8935         decl = build_decl (VAR_DECL, declarator, type);
8936
8937       if (context)
8938         set_decl_namespace (decl, context, 0);
8939
8940       context = DECL_CONTEXT (decl);
8941       if (declarator && context && current_lang_name != lang_name_c)
8942         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8943     }
8944
8945   if (in_namespace)
8946     set_decl_namespace (decl, in_namespace, 0);
8947
8948   if (RIDBIT_SETP (RID_EXTERN, specbits))
8949     {
8950       DECL_THIS_EXTERN (decl) = 1;
8951       DECL_EXTERNAL (decl) = !initialized;
8952     }
8953
8954   /* In class context, static means one per class,
8955      public access, and static storage.  */
8956   if (DECL_CLASS_SCOPE_P (decl))
8957     {
8958       TREE_PUBLIC (decl) = 1;
8959       TREE_STATIC (decl) = 1;
8960       DECL_EXTERNAL (decl) = 0;
8961     }
8962   /* At top level, either `static' or no s.c. makes a definition
8963      (perhaps tentative), and absence of `static' makes it public.  */
8964   else if (toplevel_bindings_p ())
8965     {
8966       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8967                             && (DECL_THIS_EXTERN (decl) || ! constp));
8968       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8969     }
8970   /* Not at top level, only `static' makes a static definition.  */
8971   else
8972     {
8973       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8974       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8975     }
8976
8977   if (TREE_PUBLIC (decl))
8978     {
8979       /* [basic.link]: A name with no linkage (notably, the name of a class
8980          or enumeration declared in a local scope) shall not be used to
8981          declare an entity with linkage.
8982
8983          Only check this for public decls for now.  */
8984       tree t = no_linkage_check (TREE_TYPE (decl));
8985       if (t)
8986         {
8987           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8988             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8989           else
8990             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8991                         decl, t);
8992         }
8993     }
8994
8995   return decl;
8996 }
8997
8998 /* Create and return a canonical pointer to member function type, for
8999    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9000
9001 tree
9002 build_ptrmemfunc_type (type)
9003      tree type;
9004 {
9005   tree fields[4];
9006   tree t;
9007   tree u;
9008   tree unqualified_variant = NULL_TREE;
9009
9010   /* If a canonical type already exists for this type, use it.  We use
9011      this method instead of type_hash_canon, because it only does a
9012      simple equality check on the list of field members.  */
9013
9014   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9015     return t;
9016
9017   /* Make sure that we always have the unqualified pointer-to-member
9018      type first.  */
9019   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9020     unqualified_variant
9021       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9022
9023   t = make_aggr_type (RECORD_TYPE);
9024   /* Let the front-end know this is a pointer to member function...  */
9025   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9026   /* ... and not really an aggregate.  */
9027   SET_IS_AGGR_TYPE (t, 0);
9028
9029   if (!flag_new_abi)
9030     {
9031       u = make_aggr_type (UNION_TYPE);
9032       SET_IS_AGGR_TYPE (u, 0);
9033       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9034       fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
9035                                    delta_type_node);
9036       finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9037       TYPE_NAME (u) = NULL_TREE;
9038
9039       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
9040                                    delta_type_node);
9041       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
9042                                    delta_type_node);
9043       fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9044       finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9045     }
9046   else
9047     {
9048       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9049       fields[1] = build_lang_decl (FIELD_DECL, delta_identifier,
9050                                    delta_type_node);
9051       finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9052     }
9053
9054   /* Zap out the name so that the back-end will give us the debugging
9055      information for this anonymous RECORD_TYPE.  */
9056   TYPE_NAME (t) = NULL_TREE;
9057
9058   /* If this is not the unqualified form of this pointer-to-member
9059      type, set the TYPE_MAIN_VARIANT for this type to be the
9060      unqualified type.  Since they are actually RECORD_TYPEs that are
9061      not variants of each other, we must do this manually.  */
9062   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9063     {
9064       t = build_qualified_type (t, CP_TYPE_QUALS (type));
9065       TYPE_MAIN_VARIANT (t) = unqualified_variant;
9066       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9067       TYPE_NEXT_VARIANT (unqualified_variant) = t;
9068     }
9069
9070   /* Cache this pointer-to-member type so that we can find it again
9071      later.  */
9072   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9073
9074   /* Seems to be wanted.  */
9075   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9076
9077   return t;
9078 }
9079
9080 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9081    Check to see that the definition is valid.  Issue appropriate error
9082    messages.  Return 1 if the definition is particularly bad, or 0
9083    otherwise.  */
9084
9085 int
9086 check_static_variable_definition (decl, type)
9087      tree decl;
9088      tree type;
9089 {
9090   /* Motion 10 at San Diego: If a static const integral data member is
9091      initialized with an integral constant expression, the initializer
9092      may appear either in the declaration (within the class), or in
9093      the definition, but not both.  If it appears in the class, the
9094      member is a member constant.  The file-scope definition is always
9095      required.  */
9096   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9097     {
9098       cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
9099                 type);
9100       /* If we just return the declaration, crashes will sometimes
9101          occur.  We therefore return void_type_node, as if this was a
9102          friend declaration, to cause callers to completely ignore
9103          this declaration.  */
9104       return 1;
9105     }
9106   else if (!CP_TYPE_CONST_P (type))
9107     cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9108               decl);
9109   else if (pedantic && !INTEGRAL_TYPE_P (type))
9110     cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9111
9112   return 0;
9113 }
9114
9115 /* Given the SIZE (i.e., number of elements) in an array, compute an
9116    appropriate index type for the array.  If non-NULL, NAME is the
9117    name of the thing being declared.  */
9118
9119 tree
9120 compute_array_index_type (name, size)
9121      tree name;
9122      tree size;
9123 {
9124   tree itype;
9125
9126   /* The size might be the result of a cast. */
9127   STRIP_TYPE_NOPS (size);
9128
9129   /* It might be a const variable or enumeration constant.  */
9130   size = decl_constant_value (size);
9131
9132   /* If this involves a template parameter, it will be a constant at
9133      instantiation time, but we don't know what the value is yet.
9134      Even if no template parameters are involved, we may an expression
9135      that is not a constant; we don't even simplify `1 + 2' when
9136      processing a template.  */
9137   if (processing_template_decl)
9138     {
9139       /* Resolve a qualified reference to an enumerator or static
9140          const data member of ours.  */
9141       if (TREE_CODE (size) == SCOPE_REF
9142           && TREE_OPERAND (size, 0) == current_class_type)
9143         {
9144           tree t = lookup_field (current_class_type,
9145                                  TREE_OPERAND (size, 1), 0, 0);
9146           if (t)
9147             size = t;
9148         }
9149
9150       return build_index_type (build_min (MINUS_EXPR, sizetype,
9151                                           size, integer_one_node));
9152     }
9153
9154   /* The array bound must be an integer type.  */
9155   if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9156       && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9157       && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9158     {
9159       if (name)
9160         cp_error ("size of array `%D' has non-integer type", name);
9161       else
9162         cp_error ("size of array has non-integer type");
9163       size = integer_one_node;
9164     }
9165
9166   /* Normally, the array-bound will be a constant.  */
9167   if (TREE_CONSTANT (size))
9168     {
9169       /* Check to see if the array bound overflowed.  Make that an
9170          error, no matter how generous we're being.  */
9171       int old_flag_pedantic_errors = flag_pedantic_errors;
9172       int old_pedantic = pedantic;
9173       pedantic = flag_pedantic_errors = 1;
9174       constant_expression_warning (size);
9175       pedantic = old_pedantic;
9176       flag_pedantic_errors = old_flag_pedantic_errors;
9177
9178       /* An array must have a positive number of elements.  */
9179       if (INT_CST_LT (size, integer_zero_node))
9180         {
9181           if (name)
9182             cp_error ("size of array `%D' is negative", name);
9183           else
9184             cp_error ("size of array is negative");
9185           size = integer_one_node;
9186         }
9187       /* Except that an extension we allow zero-sized arrays.  We
9188          always allow them in system headers because glibc uses
9189          them.  */
9190       else if (integer_zerop (size) && pedantic && !in_system_header)
9191         {
9192           if (name)
9193             cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9194           else
9195             cp_pedwarn ("ISO C++ forbids zero-size array");
9196         }
9197     }
9198
9199   /* Compute the index of the largest element in the array.  It is
9200      one less than the number of elements in the array.  */
9201   itype
9202     = fold (build_binary_op (MINUS_EXPR,
9203                              cp_convert (ssizetype, size),
9204                              cp_convert (ssizetype,
9205                                          integer_one_node)));
9206
9207   /* Check for variable-sized arrays.  We allow such things as an
9208      extension, even though they are not allowed in ANSI/ISO C++.  */
9209   if (!TREE_CONSTANT (itype))
9210     {
9211       if (pedantic)
9212         {
9213           if (name)
9214             cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
9215                         name);
9216           else
9217             cp_pedwarn ("ISO C++ forbids variable-size array");
9218         }
9219
9220       /* Create a variable-sized array index type.  */
9221       itype = variable_size (itype);
9222     }
9223   /* Make sure that there was no overflow when creating to a signed
9224      index type.  (For example, on a 32-bit machine, an array with
9225      size 2^32 - 1 is too big.)  */
9226   else if (TREE_OVERFLOW (itype))
9227     {
9228       error ("overflow in array dimension");
9229       TREE_OVERFLOW (itype) = 0;
9230     }
9231
9232   /* Create and return the appropriate index type.  */
9233   return build_index_type (itype);
9234 }
9235
9236 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9237    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9238    with this type.  */
9239
9240 static tree
9241 create_array_type_for_decl (name, type, size)
9242      tree name;
9243      tree type;
9244      tree size;
9245 {
9246   tree itype = NULL_TREE;
9247   const char* error_msg;
9248
9249   /* If things have already gone awry, bail now.  */
9250   if (type == error_mark_node || size == error_mark_node)
9251     return error_mark_node;
9252
9253   /* Assume that everything will go OK.  */
9254   error_msg = NULL;
9255
9256   /* There are some types which cannot be array elements.  */
9257   switch (TREE_CODE (type))
9258     {
9259     case VOID_TYPE:
9260       error_msg = "array of void";
9261       break;
9262
9263     case FUNCTION_TYPE:
9264       error_msg = "array of functions";
9265       break;
9266
9267     case REFERENCE_TYPE:
9268       error_msg = "array of references";
9269       break;
9270
9271     case OFFSET_TYPE:
9272       error_msg = "array of data members";
9273       break;
9274
9275     case METHOD_TYPE:
9276       error_msg = "array of function members";
9277       break;
9278
9279     default:
9280       break;
9281     }
9282
9283   /* If something went wrong, issue an error-message and return.  */
9284   if (error_msg)
9285     {
9286       if (name)
9287         cp_error ("declaration of `%D' as %s", name, error_msg);
9288       else
9289         cp_error ("creating %s", error_msg);
9290
9291       return error_mark_node;
9292     }
9293
9294   /* [dcl.array]
9295
9296      The constant expressions that specify the bounds of the arrays
9297      can be omitted only for the first member of the sequence.  */
9298   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9299     {
9300       cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9301                 name);
9302
9303       return error_mark_node;
9304     }
9305
9306   /* Figure out the index type for the array.  */
9307   if (size)
9308     itype = compute_array_index_type (name, size);
9309
9310   return build_cplus_array_type (type, itype);
9311 }
9312
9313 /* Check that it's OK to declare a function with the indicated TYPE.
9314    SFK indicates the kind of special function (if any) that this
9315    function is.  CTYPE is the class of which this function is a
9316    member.  OPTYPE is the type given in a conversion operator
9317    declaration.  Returns the actual return type of the function; that
9318    may be different than TYPE if an error occurs, or for certain
9319    special functions.  */
9320
9321 static tree
9322 check_special_function_return_type (sfk, type, ctype, optype)
9323      special_function_kind sfk;
9324      tree type;
9325      tree ctype;
9326      tree optype;
9327 {
9328   switch (sfk)
9329     {
9330     case sfk_constructor:
9331       if (type)
9332         cp_error ("return type specification for constructor invalid");
9333         
9334       /* In the old ABI, we return `this'; in the new ABI we don't
9335          bother.  */
9336       type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9337       break;
9338
9339     case sfk_destructor:
9340       if (type)
9341         cp_error ("return type specification for destructor invalid");
9342       type = void_type_node;
9343       break;
9344
9345     case sfk_conversion:
9346       if (type && !same_type_p (type, optype))
9347         cp_error ("operator `%T' declared to return `%T'", optype, type);
9348       else if (type)
9349         cp_pedwarn ("return type specified for `operator %T'",  optype);
9350       type = optype;
9351       break;
9352
9353     default:
9354       my_friendly_abort (20000408);
9355       break;
9356     }
9357
9358   return type;
9359 }
9360
9361 /* Given declspecs and a declarator,
9362    determine the name and type of the object declared
9363    and construct a ..._DECL node for it.
9364    (In one case we can return a ..._TYPE node instead.
9365     For invalid input we sometimes return 0.)
9366
9367    DECLSPECS is a chain of tree_list nodes whose value fields
9368     are the storage classes and type specifiers.
9369
9370    DECL_CONTEXT says which syntactic context this declaration is in:
9371      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9372      FUNCDEF for a function definition.  Like NORMAL but a few different
9373       error messages in each case.  Return value may be zero meaning
9374       this definition is too screwy to try to parse.
9375      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9376       handle member functions (which have FIELD context).
9377       Return value may be zero meaning this definition is too screwy to
9378       try to parse.
9379      PARM for a parameter declaration (either within a function prototype
9380       or before a function body).  Make a PARM_DECL, or return void_type_node.
9381      CATCHPARM for a parameter declaration before a catch clause.
9382      TYPENAME if for a typename (in a cast or sizeof).
9383       Don't make a DECL node; just return the ..._TYPE node.
9384      FIELD for a struct or union field; make a FIELD_DECL.
9385      BITFIELD for a field with specified width.
9386    INITIALIZED is 1 if the decl has an initializer.
9387
9388    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9389    normal attributes in TREE_PURPOSE, or NULL_TREE.
9390
9391    In the TYPENAME case, DECLARATOR is really an abstract declarator.
9392    It may also be so in the PARM case, for a prototype where the
9393    argument type is specified but not the name.
9394
9395    This function is where the complicated C meanings of `static'
9396    and `extern' are interpreted.
9397
9398    For C++, if there is any monkey business to do, the function which
9399    calls this one must do it, i.e., prepending instance variables,
9400    renaming overloaded function names, etc.
9401
9402    Note that for this C++, it is an error to define a method within a class
9403    which does not belong to that class.
9404
9405    Except in the case where SCOPE_REFs are implicitly known (such as
9406    methods within a class being redundantly qualified),
9407    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9408    (class_name::decl_name).  The caller must also deal with this.
9409
9410    If a constructor or destructor is seen, and the context is FIELD,
9411    then the type gains the attribute TREE_HAS_x.  If such a declaration
9412    is erroneous, NULL_TREE is returned.
9413
9414    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9415    function, these are the qualifiers to give to the `this' pointer. We
9416    apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
9417
9418    May return void_type_node if the declarator turned out to be a friend.
9419    See grokfield for details.  */
9420
9421 tree
9422 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9423      tree declspecs;
9424      tree declarator;
9425      enum decl_context decl_context;
9426      int initialized;
9427      tree attrlist;
9428 {
9429   RID_BIT_TYPE specbits;
9430   int nclasses = 0;
9431   tree spec;
9432   tree type = NULL_TREE;
9433   int longlong = 0;
9434   int constp;
9435   int restrictp;
9436   int volatilep;
9437   int type_quals;
9438   int virtualp, explicitp, friendp, inlinep, staticp;
9439   int explicit_int = 0;
9440   int explicit_char = 0;
9441   int defaulted_int = 0;
9442   tree typedef_decl = NULL_TREE;
9443   const char *name;
9444   tree typedef_type = NULL_TREE;
9445   int funcdef_flag = 0;
9446   enum tree_code innermost_code = ERROR_MARK;
9447   int bitfield = 0;
9448 #if 0
9449   /* See the code below that used this.  */
9450   tree decl_machine_attr = NULL_TREE;
9451 #endif
9452   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9453      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9454   tree init = NULL_TREE;
9455
9456   /* Keep track of what sort of function is being processed
9457      so that we can warn about default return values, or explicit
9458      return values which do not match prescribed defaults.  */
9459   special_function_kind sfk = sfk_none;
9460
9461   tree dname = NULL_TREE;
9462   tree ctype = current_class_type;
9463   tree ctor_return_type = NULL_TREE;
9464   enum overload_flags flags = NO_SPECIAL;
9465   tree quals = NULL_TREE;
9466   tree raises = NULL_TREE;
9467   int template_count = 0;
9468   tree in_namespace = NULL_TREE;
9469   tree inner_attrs;
9470   int ignore_attrs;
9471
9472   RIDBIT_RESET_ALL (specbits);
9473   if (decl_context == FUNCDEF)
9474     funcdef_flag = 1, decl_context = NORMAL;
9475   else if (decl_context == MEMFUNCDEF)
9476     funcdef_flag = -1, decl_context = FIELD;
9477   else if (decl_context == BITFIELD)
9478     bitfield = 1, decl_context = FIELD;
9479
9480   /* Look inside a declarator for the name being declared
9481      and get it as a string, for an error message.  */
9482   {
9483     tree *next = &declarator;
9484     register tree decl;
9485     name = NULL;
9486
9487     while (next && *next)
9488       {
9489         decl = *next;
9490         switch (TREE_CODE (decl))
9491           {
9492           case TREE_LIST:
9493             /* For attributes.  */
9494             next = &TREE_VALUE (decl);
9495             break;
9496
9497           case COND_EXPR:
9498             ctype = NULL_TREE;
9499             next = &TREE_OPERAND (decl, 0);
9500             break;
9501
9502           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9503             {
9504               tree name = TREE_OPERAND (decl, 0);
9505               tree rename = NULL_TREE;
9506
9507               my_friendly_assert (flags == NO_SPECIAL, 152);
9508               flags = DTOR_FLAG;
9509               sfk = sfk_destructor;
9510               if (TREE_CODE (name) == TYPE_DECL)
9511                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9512               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9513               if (ctype == NULL_TREE)
9514                 {
9515                   if (current_class_type == NULL_TREE)
9516                     {
9517                       error ("destructors must be member functions");
9518                       flags = NO_SPECIAL;
9519                     }
9520                   else
9521                     {
9522                       tree t = constructor_name (current_class_name);
9523                       if (t != name)
9524                         rename = t;
9525                     }
9526                 }
9527               else
9528                 {
9529                   tree t = constructor_name (ctype);
9530                   if (t != name)
9531                     rename = t;
9532                 }
9533
9534               if (rename)
9535                 {
9536                   cp_error ("destructor `%T' must match class name `%T'",
9537                             name, rename);
9538                   TREE_OPERAND (decl, 0) = rename;
9539                 }
9540               next = &name;
9541             }
9542             break;
9543
9544           case ADDR_EXPR:       /* C++ reference declaration */
9545             /* Fall through. */
9546           case ARRAY_REF:
9547           case INDIRECT_REF:
9548             ctype = NULL_TREE;
9549             innermost_code = TREE_CODE (decl);
9550             next = &TREE_OPERAND (decl, 0);
9551             break;
9552
9553           case CALL_EXPR:
9554             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9555               {
9556                 /* This is actually a variable declaration using
9557                    constructor syntax.  We need to call start_decl and
9558                    cp_finish_decl so we can get the variable
9559                    initialized...  */
9560
9561                 tree attributes, prefix_attributes;
9562
9563                 *next = TREE_OPERAND (decl, 0);
9564                 init = CALL_DECLARATOR_PARMS (decl);
9565
9566                 if (attrlist)
9567                   {
9568                     attributes = TREE_PURPOSE (attrlist);
9569                     prefix_attributes = TREE_VALUE (attrlist);
9570                   }
9571                 else
9572                   {
9573                     attributes = NULL_TREE;
9574                     prefix_attributes = NULL_TREE;
9575                   }
9576
9577                 decl = start_decl (declarator, declspecs, 1,
9578                                    attributes, prefix_attributes);
9579                 decl_type_access_control (decl);
9580                 if (decl)
9581                   {
9582                     /* Look for __unused__ attribute */
9583                     if (TREE_USED (TREE_TYPE (decl)))
9584                       TREE_USED (decl) = 1;
9585                     finish_decl (decl, init, NULL_TREE);
9586                   }
9587                 else
9588                   cp_error ("invalid declarator");
9589                 return 0;
9590               }
9591             innermost_code = TREE_CODE (decl);
9592             if (decl_context == FIELD && ctype == NULL_TREE)
9593               ctype = current_class_type;
9594             if (ctype
9595                 && TREE_OPERAND (decl, 0)
9596                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9597                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9598                          == constructor_name_full (ctype))
9599                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9600                             == constructor_name (ctype)))))
9601               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9602             next = &TREE_OPERAND (decl, 0);
9603             decl = *next;
9604             if (ctype != NULL_TREE
9605                 && decl != NULL_TREE && flags != DTOR_FLAG
9606                 && decl == constructor_name (ctype))
9607               {
9608                 sfk = sfk_constructor;
9609                 ctor_return_type = ctype;
9610               }
9611             ctype = NULL_TREE;
9612             break;
9613
9614           case TEMPLATE_ID_EXPR:
9615               {
9616                 tree fns = TREE_OPERAND (decl, 0);
9617
9618                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9619                   fns = TREE_OPERAND (fns, 0);
9620
9621                 dname = fns;
9622                 if (TREE_CODE (dname) == COMPONENT_REF)
9623                   dname = TREE_OPERAND (dname, 1);
9624                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9625                   {
9626                     my_friendly_assert (is_overloaded_fn (dname),
9627                                         19990331);
9628                     dname = DECL_NAME (get_first_fn (dname));
9629                   }
9630               }
9631           /* Fall through. */
9632
9633           case IDENTIFIER_NODE:
9634             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9635               dname = decl;
9636
9637             next = 0;
9638
9639             if (is_rid (dname))
9640               {
9641                 cp_error ("declarator-id missing; using reserved word `%D'",
9642                           dname);
9643                 name = IDENTIFIER_POINTER (dname);
9644               }
9645             if (! IDENTIFIER_OPNAME_P (dname)
9646                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9647                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9648               name = IDENTIFIER_POINTER (dname);
9649             else
9650               {
9651                 if (IDENTIFIER_TYPENAME_P (dname))
9652                   {
9653                     my_friendly_assert (flags == NO_SPECIAL, 154);
9654                     flags = TYPENAME_FLAG;
9655                     ctor_return_type = TREE_TYPE (dname);
9656                     sfk = sfk_conversion;
9657                   }
9658                 name = operator_name_string (dname);
9659               }
9660             break;
9661
9662             /* C++ extension */
9663           case SCOPE_REF:
9664             {
9665               /* Perform error checking, and decide on a ctype.  */
9666               tree cname = TREE_OPERAND (decl, 0);
9667               if (cname == NULL_TREE)
9668                 ctype = NULL_TREE;
9669               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9670                 {
9671                   ctype = NULL_TREE;
9672                   in_namespace = TREE_OPERAND (decl, 0);
9673                   TREE_OPERAND (decl, 0) = NULL_TREE;
9674                 }
9675               else if (! is_aggr_type (cname, 1))
9676                 TREE_OPERAND (decl, 0) = NULL_TREE;
9677               /* Must test TREE_OPERAND (decl, 1), in case user gives
9678                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9679               else if (TREE_OPERAND (decl, 1)
9680                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9681                 ctype = cname;
9682               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9683                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9684                 {
9685                   cp_error ("`%T::%D' is not a valid declarator", cname,
9686                             TREE_OPERAND (decl, 1));
9687                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9688                             cname, TREE_OPERAND (decl, 1));
9689                   return void_type_node;
9690                 }
9691               else if (ctype == NULL_TREE)
9692                 ctype = cname;
9693               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9694                 TREE_OPERAND (decl, 0) = ctype;
9695               else
9696                 {
9697                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9698                     {
9699                       cp_error ("type `%T' is not derived from type `%T'",
9700                                 cname, ctype);
9701                       TREE_OPERAND (decl, 0) = NULL_TREE;
9702                     }
9703                   else
9704                     ctype = cname;
9705                 }
9706
9707               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9708                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9709                        == constructor_name_full (ctype))
9710                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9711                           == constructor_name (ctype))))
9712                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9713               next = &TREE_OPERAND (decl, 1);
9714               decl = *next;
9715               if (ctype)
9716                 {
9717                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9718                       && constructor_name (ctype) == decl)
9719                     {
9720                       sfk = sfk_constructor;
9721                       ctor_return_type = ctype;
9722                     }
9723                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9724                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9725                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9726                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9727                     {
9728                       sfk = sfk_destructor;
9729                       ctor_return_type = ctype;
9730                       flags = DTOR_FLAG;
9731                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9732                       next = &TREE_OPERAND (decl, 0);
9733                     }
9734                 }
9735             }
9736             break;
9737
9738           case ERROR_MARK:
9739             next = 0;
9740             break;
9741
9742           case TYPE_DECL:
9743             /* Parse error puts this typespec where
9744                a declarator should go.  */
9745             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9746             if (TREE_TYPE (decl) == current_class_type)
9747               cp_error ("  perhaps you want `%T' for a constructor",
9748                         current_class_name);
9749             dname = DECL_NAME (decl);
9750             name = IDENTIFIER_POINTER (dname);
9751
9752             /* Avoid giving two errors for this.  */
9753             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9754
9755             declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
9756             *next = dname;
9757             next = 0;
9758             break;
9759
9760           default:
9761             cp_compiler_error ("`%D' as declarator", decl);
9762             return 0; /* We used to do a 155 abort here.  */
9763           }
9764       }
9765   }
9766
9767   /* A function definition's declarator must have the form of
9768      a function declarator.  */
9769
9770   if (funcdef_flag && innermost_code != CALL_EXPR)
9771     return 0;
9772
9773   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9774       && innermost_code != CALL_EXPR
9775       && ! (ctype && declspecs == NULL_TREE))
9776     {
9777       cp_error ("declaration of `%D' as non-function", dname);
9778       return void_type_node;
9779     }
9780
9781   /* Anything declared one level down from the top level
9782      must be one of the parameters of a function
9783      (because the body is at least two levels down).  */
9784
9785   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9786      by not allowing C++ class definitions to specify their parameters
9787      with xdecls (must be spec.d in the parmlist).
9788
9789      Since we now wait to push a class scope until we are sure that
9790      we are in a legitimate method context, we must set oldcname
9791      explicitly (since current_class_name is not yet alive).
9792
9793      We also want to avoid calling this a PARM if it is in a namespace.  */
9794
9795   if (decl_context == NORMAL && !toplevel_bindings_p ())
9796     {
9797       struct binding_level *b = current_binding_level;
9798       current_binding_level = b->level_chain;
9799       if (current_binding_level != 0 && toplevel_bindings_p ())
9800         decl_context = PARM;
9801       current_binding_level = b;
9802     }
9803
9804   if (name == NULL)
9805     name = decl_context == PARM ? "parameter" : "type name";
9806
9807   /* Look through the decl specs and record which ones appear.
9808      Some typespecs are defined as built-in typenames.
9809      Others, the ones that are modifiers of other types,
9810      are represented by bits in SPECBITS: set the bits for
9811      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9812
9813      If there is a typedef name or a type, store the type in TYPE.
9814      This includes builtin typedefs such as `int'.
9815
9816      Set EXPLICIT_INT if the type is `int' or `char' and did not
9817      come from a user typedef.
9818
9819      Set LONGLONG if `long' is mentioned twice.
9820
9821      For C++, constructors and destructors have their own fast treatment.  */
9822
9823   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9824     {
9825       register int i;
9826       register tree id;
9827
9828       /* Certain parse errors slip through.  For example,
9829          `int class;' is not caught by the parser. Try
9830          weakly to recover here.  */
9831       if (TREE_CODE (spec) != TREE_LIST)
9832         return 0;
9833
9834       id = TREE_VALUE (spec);
9835
9836       if (TREE_CODE (id) == IDENTIFIER_NODE)
9837         {
9838           if (id == ridpointers[(int) RID_INT]
9839               || id == ridpointers[(int) RID_CHAR]
9840               || id == ridpointers[(int) RID_BOOL]
9841               || id == ridpointers[(int) RID_WCHAR])
9842             {
9843               if (type)
9844                 {
9845                   if (id == ridpointers[(int) RID_BOOL])
9846                     error ("`bool' is now a keyword");
9847                   else
9848                     cp_error ("extraneous `%T' ignored", id);
9849                 }
9850               else
9851                 {
9852                   if (id == ridpointers[(int) RID_INT])
9853                     explicit_int = 1;
9854                   else if (id == ridpointers[(int) RID_CHAR])
9855                     explicit_char = 1;
9856                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9857                 }
9858               goto found;
9859             }
9860           /* C++ aggregate types.  */
9861           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9862             {
9863               if (type)
9864                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9865               else
9866                 type = IDENTIFIER_TYPE_VALUE (id);
9867               goto found;
9868             }
9869
9870           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9871             {
9872               if (ridpointers[i] == id)
9873                 {
9874                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9875                     {
9876                       if (pedantic && ! in_system_header && warn_long_long)
9877                         pedwarn ("ISO C++ does not support `long long'");
9878                       if (longlong)
9879                         error ("`long long long' is too long for GCC");
9880                       else
9881                         longlong = 1;
9882                     }
9883                   else if (RIDBIT_SETP (i, specbits))
9884                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9885                   RIDBIT_SET (i, specbits);
9886                   goto found;
9887                 }
9888             }
9889         }
9890       /* C++ aggregate types.  */
9891       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9892         {
9893           if (type)
9894             cp_error ("multiple declarations `%T' and `%T'", type,
9895                       TREE_TYPE (id));
9896           else
9897             {
9898               type = TREE_TYPE (id);
9899               TREE_VALUE (spec) = type;
9900             }
9901           goto found;
9902         }
9903       if (type)
9904         error ("two or more data types in declaration of `%s'", name);
9905       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9906         {
9907           register tree t = lookup_name (id, 1);
9908           if (!t || TREE_CODE (t) != TYPE_DECL)
9909             error ("`%s' fails to be a typedef or built in type",
9910                    IDENTIFIER_POINTER (id));
9911           else
9912             {
9913               type = TREE_TYPE (t);
9914 #if 0
9915               /* See the code below that used this.  */
9916               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9917 #endif
9918               typedef_decl = t;
9919             }
9920         }
9921       else if (id != error_mark_node)
9922         /* Can't change CLASS nodes into RECORD nodes here!  */
9923         type = id;
9924
9925     found: ;
9926     }
9927
9928   typedef_type = type;
9929
9930   /* No type at all: default to `int', and set DEFAULTED_INT
9931      because it was not a user-defined typedef.  */
9932
9933   if (type == NULL_TREE
9934       && (RIDBIT_SETP (RID_SIGNED, specbits)
9935           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9936           || RIDBIT_SETP (RID_LONG, specbits)
9937           || RIDBIT_SETP (RID_SHORT, specbits)))
9938     {
9939       /* These imply 'int'.  */
9940       type = integer_type_node;
9941       defaulted_int = 1;
9942     }
9943
9944   if (sfk != sfk_none)
9945     type = check_special_function_return_type (sfk, type,
9946                                                ctor_return_type,
9947                                                ctor_return_type);
9948   else if (type == NULL_TREE)
9949     {
9950       int is_main;
9951
9952       explicit_int = -1;
9953
9954           /* We handle `main' specially here, because 'main () { }' is so
9955              common.  With no options, it is allowed.  With -Wreturn-type,
9956              it is a warning.  It is only an error with -pedantic-errors.  */
9957       is_main = (funcdef_flag
9958                  && MAIN_NAME_P (dname)
9959                  && ctype == NULL_TREE
9960                  && in_namespace == NULL_TREE
9961                  && current_namespace == global_namespace);
9962
9963       if (in_system_header || flag_ms_extensions)
9964         /* Allow it, sigh.  */;
9965       else if (pedantic || ! is_main)
9966         cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9967                     name);
9968       else if (warn_return_type)
9969         cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9970                     name);
9971
9972       type = integer_type_node;
9973     }
9974
9975   ctype = NULL_TREE;
9976
9977   /* Now process the modifiers that were specified
9978      and check for invalid combinations.  */
9979
9980   /* Long double is a special combination.  */
9981
9982   if (RIDBIT_SETP (RID_LONG, specbits)
9983       && TYPE_MAIN_VARIANT (type) == double_type_node)
9984     {
9985       RIDBIT_RESET (RID_LONG, specbits);
9986       type = build_qualified_type (long_double_type_node,
9987                                    CP_TYPE_QUALS (type));
9988     }
9989
9990   /* Check all other uses of type modifiers.  */
9991
9992   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9993       || RIDBIT_SETP (RID_SIGNED, specbits)
9994       || RIDBIT_SETP (RID_LONG, specbits)
9995       || RIDBIT_SETP (RID_SHORT, specbits))
9996     {
9997       int ok = 0;
9998
9999       if (TREE_CODE (type) == REAL_TYPE)
10000         error ("short, signed or unsigned invalid for `%s'", name);
10001       else if (TREE_CODE (type) != INTEGER_TYPE)
10002         error ("long, short, signed or unsigned invalid for `%s'", name);
10003       else if (RIDBIT_SETP (RID_LONG, specbits)
10004                && RIDBIT_SETP (RID_SHORT, specbits))
10005         error ("long and short specified together for `%s'", name);
10006       else if ((RIDBIT_SETP (RID_LONG, specbits)
10007                 || RIDBIT_SETP (RID_SHORT, specbits))
10008                && explicit_char)
10009         error ("long or short specified with char for `%s'", name);
10010       else if ((RIDBIT_SETP (RID_LONG, specbits)
10011                 || RIDBIT_SETP (RID_SHORT, specbits))
10012                && TREE_CODE (type) == REAL_TYPE)
10013         error ("long or short specified with floating type for `%s'", name);
10014       else if (RIDBIT_SETP (RID_SIGNED, specbits)
10015                && RIDBIT_SETP (RID_UNSIGNED, specbits))
10016         error ("signed and unsigned given together for `%s'", name);
10017       else
10018         {
10019           ok = 1;
10020           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10021             {
10022               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10023                        name);
10024               if (flag_pedantic_errors)
10025                 ok = 0;
10026             }
10027         }
10028
10029       /* Discard the type modifiers if they are invalid.  */
10030       if (! ok)
10031         {
10032           RIDBIT_RESET (RID_UNSIGNED, specbits);
10033           RIDBIT_RESET (RID_SIGNED, specbits);
10034           RIDBIT_RESET (RID_LONG, specbits);
10035           RIDBIT_RESET (RID_SHORT, specbits);
10036           longlong = 0;
10037         }
10038     }
10039
10040   if (RIDBIT_SETP (RID_COMPLEX, specbits)
10041       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10042     {
10043       error ("complex invalid for `%s'", name);
10044       RIDBIT_RESET (RID_COMPLEX, specbits);
10045     }
10046
10047   /* Decide whether an integer type is signed or not.
10048      Optionally treat bitfields as signed by default.  */
10049   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10050       /* [class.bit]
10051
10052          It is implementation-defined whether a plain (neither
10053          explicitly signed or unsigned) char, short, int, or long
10054          bit-field is signed or unsigned.
10055
10056          Naturally, we extend this to long long as well.  Note that
10057          this does not include wchar_t.  */
10058       || (bitfield && !flag_signed_bitfields
10059           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10060           /* A typedef for plain `int' without `signed' can be
10061              controlled just like plain `int', but a typedef for
10062              `signed int' cannot be so controlled.  */
10063           && !(typedef_decl
10064                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10065           && (TREE_CODE (type) == INTEGER_TYPE
10066               || TREE_CODE (type) == CHAR_TYPE)
10067           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10068     {
10069       if (longlong)
10070         type = long_long_unsigned_type_node;
10071       else if (RIDBIT_SETP (RID_LONG, specbits))
10072         type = long_unsigned_type_node;
10073       else if (RIDBIT_SETP (RID_SHORT, specbits))
10074         type = short_unsigned_type_node;
10075       else if (type == char_type_node)
10076         type = unsigned_char_type_node;
10077       else if (typedef_decl)
10078         type = unsigned_type (type);
10079       else
10080         type = unsigned_type_node;
10081     }
10082   else if (RIDBIT_SETP (RID_SIGNED, specbits)
10083            && type == char_type_node)
10084     type = signed_char_type_node;
10085   else if (longlong)
10086     type = long_long_integer_type_node;
10087   else if (RIDBIT_SETP (RID_LONG, specbits))
10088     type = long_integer_type_node;
10089   else if (RIDBIT_SETP (RID_SHORT, specbits))
10090     type = short_integer_type_node;
10091
10092   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10093     {
10094       /* If we just have "complex", it is equivalent to
10095          "complex double", but if any modifiers at all are specified it is
10096          the complex form of TYPE.  E.g, "complex short" is
10097          "complex short int".  */
10098
10099       if (defaulted_int && ! longlong
10100           && ! (RIDBIT_SETP (RID_LONG, specbits)
10101                 || RIDBIT_SETP (RID_SHORT, specbits)
10102                 || RIDBIT_SETP (RID_SIGNED, specbits)
10103                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10104         type = complex_double_type_node;
10105       else if (type == integer_type_node)
10106         type = complex_integer_type_node;
10107       else if (type == float_type_node)
10108         type = complex_float_type_node;
10109       else if (type == double_type_node)
10110         type = complex_double_type_node;
10111       else if (type == long_double_type_node)
10112         type = complex_long_double_type_node;
10113       else
10114         type = build_complex_type (type);
10115     }
10116
10117   if (sfk == sfk_conversion
10118       && (RIDBIT_SETP (RID_CONST, specbits)
10119           || RIDBIT_SETP (RID_VOLATILE, specbits)
10120           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10121     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10122               ctor_return_type);
10123
10124   /* Set CONSTP if this declaration is `const', whether by
10125      explicit specification or via a typedef.
10126      Likewise for VOLATILEP.  */
10127
10128   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10129   restrictp =
10130     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10131   volatilep =
10132     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10133   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10134                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10135                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10136   type = cp_build_qualified_type (type, type_quals);
10137   staticp = 0;
10138   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10139   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10140   RIDBIT_RESET (RID_VIRTUAL, specbits);
10141   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10142   RIDBIT_RESET (RID_EXPLICIT, specbits);
10143
10144   if (RIDBIT_SETP (RID_STATIC, specbits))
10145     staticp = 1 + (decl_context == FIELD);
10146
10147   if (virtualp && staticp == 2)
10148     {
10149       cp_error ("member `%D' cannot be declared both virtual and static",
10150                 dname);
10151       staticp = 0;
10152     }
10153   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10154   RIDBIT_RESET (RID_FRIEND, specbits);
10155
10156   /* Warn if two storage classes are given. Default to `auto'.  */
10157
10158   if (RIDBIT_ANY_SET (specbits))
10159     {
10160       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10161       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10162       if (decl_context == PARM && nclasses > 0)
10163         error ("storage class specifiers invalid in parameter declarations");
10164       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10165         {
10166           if (decl_context == PARM)
10167             error ("typedef declaration invalid in parameter declaration");
10168           nclasses++;
10169         }
10170       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10171       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10172     }
10173
10174   /* Give error if `virtual' is used outside of class declaration.  */
10175   if (virtualp
10176       && (current_class_name == NULL_TREE || decl_context != FIELD))
10177     {
10178       error ("virtual outside class declaration");
10179       virtualp = 0;
10180     }
10181
10182   /* Static anonymous unions are dealt with here.  */
10183   if (staticp && decl_context == TYPENAME
10184       && TREE_CODE (declspecs) == TREE_LIST
10185       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10186     decl_context = FIELD;
10187
10188   /* Warn about storage classes that are invalid for certain
10189      kinds of declarations (parameters, typenames, etc.).  */
10190
10191   if (nclasses > 1)
10192     error ("multiple storage classes in declaration of `%s'", name);
10193   else if (decl_context != NORMAL && nclasses > 0)
10194     {
10195       if ((decl_context == PARM || decl_context == CATCHPARM)
10196           && (RIDBIT_SETP (RID_REGISTER, specbits)
10197               || RIDBIT_SETP (RID_AUTO, specbits)))
10198         ;
10199       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10200         ;
10201       else if (decl_context == FIELD
10202                /* C++ allows static class elements  */
10203                && RIDBIT_SETP (RID_STATIC, specbits))
10204         /* C++ also allows inlines and signed and unsigned elements,
10205            but in those cases we don't come in here.  */
10206         ;
10207       else
10208         {
10209           if (decl_context == FIELD)
10210             {
10211               tree tmp = NULL_TREE;
10212               register int op = 0;
10213
10214               if (declarator)
10215                 {
10216                   /* Avoid trying to get an operand off an identifier node.  */
10217                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10218                     tmp = declarator;
10219                   else
10220                     tmp = TREE_OPERAND (declarator, 0);
10221                   op = IDENTIFIER_OPNAME_P (tmp);
10222                 }
10223               error ("storage class specified for %s `%s'",
10224                      op ? "member operator" : "field",
10225                      op ? operator_name_string (tmp) : name);
10226             }
10227           else
10228             {
10229               if (decl_context == PARM || decl_context == CATCHPARM)
10230                 error ("storage class specified for parameter `%s'", name);
10231               else
10232                 error ("storage class specified for typename");
10233             }
10234           RIDBIT_RESET (RID_REGISTER, specbits);
10235           RIDBIT_RESET (RID_AUTO, specbits);
10236           RIDBIT_RESET (RID_EXTERN, specbits);
10237         }
10238     }
10239   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10240     {
10241       if (toplevel_bindings_p ())
10242         {
10243           /* It's common practice (and completely valid) to have a const
10244              be initialized and declared extern.  */
10245           if (!(type_quals & TYPE_QUAL_CONST))
10246             warning ("`%s' initialized and declared `extern'", name);
10247         }
10248       else
10249         error ("`%s' has both `extern' and initializer", name);
10250     }
10251   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10252            && ! toplevel_bindings_p ())
10253     error ("nested function `%s' declared `extern'", name);
10254   else if (toplevel_bindings_p ())
10255     {
10256       if (RIDBIT_SETP (RID_AUTO, specbits))
10257         error ("top-level declaration of `%s' specifies `auto'", name);
10258     }
10259
10260   if (nclasses > 0 && friendp)
10261     error ("storage class specifiers invalid in friend function declarations");
10262
10263   /* Now figure out the structure of the declarator proper.
10264      Descend through it, creating more complex types, until we reach
10265      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10266
10267   inner_attrs = NULL_TREE;
10268   ignore_attrs = 0;
10269
10270   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10271          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10272     {
10273       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10274          an INDIRECT_REF (for *...),
10275          a CALL_EXPR (for ...(...)),
10276          an identifier (for the name being declared)
10277          or a null pointer (for the place in an absolute declarator
10278          where the name was omitted).
10279          For the last two cases, we have just exited the loop.
10280
10281          For C++ it could also be
10282          a SCOPE_REF (for class :: ...).  In this case, we have converted
10283          sensible names to types, and those are the values we use to
10284          qualify the member name.
10285          an ADDR_EXPR (for &...),
10286          a BIT_NOT_EXPR (for destructors)
10287
10288          At this point, TYPE is the type of elements of an array,
10289          or for a function to return, or for a pointer to point to.
10290          After this sequence of ifs, TYPE is the type of the
10291          array or function or pointer, and DECLARATOR has had its
10292          outermost layer removed.  */
10293
10294       if (type == error_mark_node)
10295         {
10296           if (TREE_CODE (declarator) == SCOPE_REF)
10297             declarator = TREE_OPERAND (declarator, 1);
10298           else
10299             declarator = TREE_OPERAND (declarator, 0);
10300           continue;
10301         }
10302       if (quals != NULL_TREE
10303           && (declarator == NULL_TREE
10304               || TREE_CODE (declarator) != SCOPE_REF))
10305         {
10306           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10307             ctype = TYPE_METHOD_BASETYPE (type);
10308           if (ctype != NULL_TREE)
10309             {
10310               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10311               grok_method_quals (ctype, dummy, quals);
10312               type = TREE_TYPE (dummy);
10313               ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
10314               quals = NULL_TREE;
10315             }
10316         }
10317
10318       /* See the comment for the TREE_LIST case, below.  */
10319       if (ignore_attrs)
10320         ignore_attrs = 0;
10321       else if (inner_attrs)
10322         {
10323           decl_attributes (type, inner_attrs, NULL_TREE);
10324           inner_attrs = NULL_TREE;
10325         }
10326
10327       switch (TREE_CODE (declarator))
10328         {
10329         case TREE_LIST:
10330           {
10331             /* We encode a declarator with embedded attributes using
10332                a TREE_LIST.  The attributes apply to the declarator
10333                directly inside them, so we have to skip an iteration
10334                before applying them to the type.  If the declarator just
10335                inside is the declarator-id, we apply the attrs to the
10336                decl itself.  */
10337             inner_attrs = TREE_PURPOSE (declarator);
10338             ignore_attrs = 1;
10339             declarator = TREE_VALUE (declarator);
10340           }
10341           break;
10342
10343         case ARRAY_REF:
10344           {
10345             register tree size;
10346
10347             size = TREE_OPERAND (declarator, 1);
10348
10349             /* VC++ spells a zero-sized array with [].  */
10350             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10351                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10352               size = integer_zero_node;
10353
10354             declarator = TREE_OPERAND (declarator, 0);
10355
10356             type = create_array_type_for_decl (dname, type, size);
10357
10358             /* VLAs never work as fields. */
10359             if (decl_context == FIELD && !processing_template_decl 
10360                 && TREE_CODE (type) == ARRAY_TYPE
10361                 && TYPE_DOMAIN (type) != NULL_TREE
10362                 && !TREE_CONSTANT (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
10363               {
10364                 cp_error ("size of member `%D' is not constant", dname);
10365                 /* Proceed with arbitrary constant size, so that offset
10366                    computations don't get confused. */
10367                 type = create_array_type_for_decl (dname, TREE_TYPE (type),
10368                                                    integer_one_node);
10369               }
10370
10371             ctype = NULL_TREE;
10372           }
10373           break;
10374
10375         case CALL_EXPR:
10376           {
10377             tree arg_types;
10378             int funcdecl_p;
10379             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10380             tree inner_decl = TREE_OPERAND (declarator, 0);
10381
10382             /* Declaring a function type.
10383                Make sure we have a valid type for the function to return.  */
10384
10385             /* We now know that the TYPE_QUALS don't apply to the
10386                decl, but to its return type.  */
10387             type_quals = TYPE_UNQUALIFIED;
10388
10389             /* Warn about some types functions can't return.  */
10390
10391             if (TREE_CODE (type) == FUNCTION_TYPE)
10392               {
10393                 error ("`%s' declared as function returning a function", name);
10394                 type = integer_type_node;
10395               }
10396             if (TREE_CODE (type) == ARRAY_TYPE)
10397               {
10398                 error ("`%s' declared as function returning an array", name);
10399                 type = integer_type_node;
10400               }
10401
10402             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10403               inner_decl = TREE_OPERAND (inner_decl, 1);
10404
10405             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10406               inner_decl = dname;
10407
10408             /* Pick up type qualifiers which should be applied to `this'.  */
10409             quals = CALL_DECLARATOR_QUALS (declarator);
10410
10411             /* Pick up the exception specifications.  */
10412             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10413
10414             /* Say it's a definition only for the CALL_EXPR
10415                closest to the identifier.  */
10416             funcdecl_p
10417               = inner_decl
10418               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10419                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10420                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10421
10422             if (ctype == NULL_TREE
10423                 && decl_context == FIELD
10424                 && funcdecl_p
10425                 && (friendp == 0 || dname == current_class_name))
10426               ctype = current_class_type;
10427
10428             if (ctype && sfk == sfk_conversion)
10429               TYPE_HAS_CONVERSION (ctype) = 1;
10430             if (ctype && constructor_name (ctype) == dname)
10431               {
10432                 /* We are within a class's scope. If our declarator name
10433                    is the same as the class name, and we are defining
10434                    a function, then it is a constructor/destructor, and
10435                    therefore returns a void type.  */
10436
10437                 if (flags == DTOR_FLAG)
10438                   {
10439                     /* ISO C++ 12.4/2.  A destructor may not be
10440                        declared const or volatile.  A destructor may
10441                        not be static.  */
10442                     if (staticp == 2)
10443                       error ("destructor cannot be static member function");
10444                     if (quals)
10445                       {
10446                         cp_error ("destructors may not be `%s'",
10447                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10448                         quals = NULL_TREE;
10449                       }
10450                     if (decl_context == FIELD)
10451                       {
10452                         if (! member_function_or_else (ctype,
10453                                                        current_class_type,
10454                                                        flags))
10455                           return void_type_node;
10456                       }
10457                   }
10458                 else            /* It's a constructor.  */
10459                   {
10460                     if (explicitp == 1)
10461                       explicitp = 2;
10462                     /* ISO C++ 12.1.  A constructor may not be
10463                        declared const or volatile.  A constructor may
10464                        not be virtual.  A constructor may not be
10465                        static.  */
10466                     if (staticp == 2)
10467                       error ("constructor cannot be static member function");
10468                     if (virtualp)
10469                       {
10470                         pedwarn ("constructors cannot be declared virtual");
10471                         virtualp = 0;
10472                       }
10473                     if (quals)
10474                       {
10475                         cp_error ("constructors may not be `%s'",
10476                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10477                         quals = NULL_TREE;
10478                       }
10479                     {
10480                       RID_BIT_TYPE tmp_bits;
10481                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10482                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10483                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10484                       if (RIDBIT_ANY_SET (tmp_bits))
10485                         error ("return value type specifier for constructor ignored");
10486                     }
10487                     if (decl_context == FIELD)
10488                       {
10489                         if (! member_function_or_else (ctype,
10490                                                        current_class_type,
10491                                                        flags))
10492                           return void_type_node;
10493                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10494                         if (sfk != sfk_constructor)
10495                           return NULL_TREE;
10496                       }
10497                   }
10498                 if (decl_context == FIELD)
10499                   staticp = 0;
10500               }
10501             else if (friendp)
10502               {
10503                 if (initialized)
10504                   error ("can't initialize friend function `%s'", name);
10505                 if (virtualp)
10506                   {
10507                     /* Cannot be both friend and virtual.  */
10508                     error ("virtual functions cannot be friends");
10509                     RIDBIT_RESET (RID_FRIEND, specbits);
10510                     friendp = 0;
10511                   }
10512                 if (decl_context == NORMAL)
10513                   error ("friend declaration not in class definition");
10514                 if (current_function_decl && funcdef_flag)
10515                   cp_error ("can't define friend function `%s' in a local class definition",
10516                             name);
10517               }
10518
10519             /* Construct the function type and go to the next
10520                inner layer of declarator.  */
10521
10522             declarator = TREE_OPERAND (declarator, 0);
10523
10524             /* FIXME: This is where default args should be fully
10525                processed.  */
10526
10527             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10528
10529             if (declarator && flags == DTOR_FLAG)
10530               {
10531                 /* A destructor declared in the body of a class will
10532                    be represented as a BIT_NOT_EXPR.  But, we just
10533                    want the underlying IDENTIFIER.  */
10534                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10535                   declarator = TREE_OPERAND (declarator, 0);
10536
10537                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10538                   arg_types = void_list_node;
10539                 else if (arg_types == NULL_TREE
10540                          || arg_types != void_list_node)
10541                   {
10542                     cp_error ("destructors may not have parameters");
10543                     arg_types = void_list_node;
10544                     last_function_parms = NULL_TREE;
10545                   }
10546               }
10547
10548             /* ANSI says that `const int foo ();'
10549                does not make the function foo const.  */
10550             type = build_function_type (type, arg_types);
10551
10552             {
10553               tree t;
10554               for (t = arg_types; t; t = TREE_CHAIN (t))
10555                 if (TREE_PURPOSE (t)
10556                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10557                   {
10558                     add_defarg_fn (type);
10559                     break;
10560                   }
10561             }
10562           }
10563           break;
10564
10565         case ADDR_EXPR:
10566         case INDIRECT_REF:
10567           /* Filter out pointers-to-references and references-to-references.
10568              We can get these if a TYPE_DECL is used.  */
10569
10570           if (TREE_CODE (type) == REFERENCE_TYPE)
10571             {
10572               error ("cannot declare %s to references",
10573                      TREE_CODE (declarator) == ADDR_EXPR
10574                      ? "references" : "pointers");
10575               declarator = TREE_OPERAND (declarator, 0);
10576               continue;
10577             }
10578
10579           if (TREE_CODE (type) == OFFSET_TYPE
10580               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10581                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10582             {
10583               cp_error ("cannot declare pointer to `%#T' member",
10584                         TREE_TYPE (type));
10585               type = TREE_TYPE (type);
10586             }
10587
10588           /* Merge any constancy or volatility into the target type
10589              for the pointer.  */
10590
10591           /* We now know that the TYPE_QUALS don't apply to the decl,
10592              but to the target of the pointer.  */
10593           type_quals = TYPE_UNQUALIFIED;
10594
10595           if (TREE_CODE (declarator) == ADDR_EXPR)
10596             {
10597               if (TREE_CODE (type) == VOID_TYPE)
10598                 error ("invalid type: `void &'");
10599               else
10600                 type = build_reference_type (type);
10601             }
10602           else if (TREE_CODE (type) == METHOD_TYPE)
10603             type = build_ptrmemfunc_type (build_pointer_type (type));
10604           else
10605             type = build_pointer_type (type);
10606
10607           /* Process a list of type modifier keywords (such as
10608              const or volatile) that were given inside the `*' or `&'.  */
10609
10610           if (TREE_TYPE (declarator))
10611             {
10612               register tree typemodlist;
10613               int erred = 0;
10614
10615               constp = 0;
10616               volatilep = 0;
10617               restrictp = 0;
10618               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10619                    typemodlist = TREE_CHAIN (typemodlist))
10620                 {
10621                   tree qualifier = TREE_VALUE (typemodlist);
10622
10623                   if (qualifier == ridpointers[(int) RID_CONST])
10624                     constp++;
10625                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10626                     volatilep++;
10627                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10628                     restrictp++;
10629                   else if (!erred)
10630                     {
10631                       erred = 1;
10632                       error ("invalid type modifier within pointer declarator");
10633                     }
10634                 }
10635               if (constp > 1)
10636                 pedwarn ("duplicate `const'");
10637               if (volatilep > 1)
10638                 pedwarn ("duplicate `volatile'");
10639               if (restrictp > 1)
10640                 pedwarn ("duplicate `restrict'");
10641
10642               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10643                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10644                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10645               if (TREE_CODE (declarator) == ADDR_EXPR
10646                   && (constp || volatilep))
10647                 {
10648                   if (constp)
10649                     pedwarn ("discarding `const' applied to a reference");
10650                   if (volatilep)
10651                     pedwarn ("discarding `volatile' applied to a reference");
10652                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10653                 }
10654               type = cp_build_qualified_type (type, type_quals);
10655             }
10656           declarator = TREE_OPERAND (declarator, 0);
10657           ctype = NULL_TREE;
10658           break;
10659
10660         case SCOPE_REF:
10661           {
10662             /* We have converted type names to NULL_TREE if the
10663                name was bogus, or to a _TYPE node, if not.
10664
10665                The variable CTYPE holds the type we will ultimately
10666                resolve to.  The code here just needs to build
10667                up appropriate member types.  */
10668             tree sname = TREE_OPERAND (declarator, 1);
10669             tree t;
10670
10671             /* Destructors can have their visibilities changed as well.  */
10672             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10673               sname = TREE_OPERAND (sname, 0);
10674
10675             if (TREE_COMPLEXITY (declarator) == 0)
10676               /* This needs to be here, in case we are called
10677                  multiple times.  */ ;
10678             else if (TREE_COMPLEXITY (declarator) == -1)
10679               /* Namespace member. */
10680               pop_decl_namespace ();
10681             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10682               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10683             else if (! IS_AGGR_TYPE_CODE
10684                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10685               ;
10686             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10687               {
10688                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10689                    that refer to ctype.  They couldn't be resolved earlier
10690                    because we hadn't pushed into the class yet.
10691                    Example: resolve 'B<T>::type' in
10692                    'B<typename B<T>::type> B<T>::f () { }'.  */
10693                 if (current_template_parms
10694                     && uses_template_parms (type)
10695                     && uses_template_parms (current_class_type))
10696                   {
10697                     tree args = current_template_args ();
10698                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10699                   }
10700
10701                 /* This pop_nested_class corresponds to the
10702                    push_nested_class used to push into class scope for
10703                    parsing the argument list of a function decl, in
10704                    qualified_id.  */
10705                 pop_nested_class ();
10706                 TREE_COMPLEXITY (declarator) = current_class_depth;
10707               }
10708             else
10709               my_friendly_abort (16);
10710
10711             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10712               {
10713                 /* We had a reference to a global decl, or
10714                    perhaps we were given a non-aggregate typedef,
10715                    in which case we cleared this out, and should just
10716                    keep going as though it wasn't there.  */
10717                 declarator = sname;
10718                 continue;
10719               }
10720             ctype = TREE_OPERAND (declarator, 0);
10721
10722             t = ctype;
10723             while (t != NULL_TREE && CLASS_TYPE_P (t))
10724               {
10725                 /* You're supposed to have one `template <...>' 
10726                    for every template class, but you don't need one
10727                    for a full specialization.  For example:
10728
10729                      template <class T> struct S{};
10730                      template <> struct S<int> { void f(); };
10731                      void S<int>::f () {}
10732
10733                    is correct; there shouldn't be a `template <>' for
10734                    the definition of `S<int>::f'.  */
10735                 if (CLASSTYPE_TEMPLATE_INFO (t)
10736                     && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10737                         || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
10738                   template_count += 1;
10739
10740                 t = TYPE_MAIN_DECL (t);
10741                 if (DECL_LANG_SPECIFIC (t))
10742                   t = DECL_CONTEXT (t);
10743                 else
10744                   t = NULL_TREE;
10745               }
10746
10747             if (sname == NULL_TREE)
10748               goto done_scoping;
10749
10750             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10751               {
10752                 /* This is the `standard' use of the scoping operator:
10753                    basetype :: member .  */
10754
10755                 if (ctype == current_class_type)
10756                   {
10757                     /* class A {
10758                          void A::f ();
10759                        };
10760
10761                        Is this ill-formed?  */
10762
10763                     if (pedantic)
10764                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10765                                   ctype, name);
10766                   }
10767                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10768                   {
10769                     if (current_class_type == NULL_TREE
10770                         || friendp)
10771                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10772                                                       TYPE_ARG_TYPES (type));
10773                     else
10774                       {
10775                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10776                                   ctype, name, current_class_type);
10777                         return void_type_node;
10778                       }
10779                   }
10780                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10781                          || COMPLETE_TYPE_P (complete_type (ctype)))
10782                   {
10783                     /* Have to move this code elsewhere in this function.
10784                        this code is used for i.e., typedef int A::M; M *pm;
10785
10786                        It is?  How? jason 10/2/94 */
10787
10788                     if (current_class_type)
10789                       {
10790                         cp_error ("cannot declare member `%T::%s' within `%T'",
10791                                   ctype, name, current_class_type);
10792                         return void_type_node;
10793                       }
10794                     type = build_offset_type (ctype, type);
10795                   }
10796                 else if (uses_template_parms (ctype))
10797                   {
10798                     if (TREE_CODE (type) == FUNCTION_TYPE)
10799                       type
10800                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10801                                                    TYPE_ARG_TYPES (type));
10802                   }
10803                 else
10804                   {
10805                     cp_error ("structure `%T' not yet defined", ctype);
10806                     return error_mark_node;
10807                   }
10808
10809                 declarator = sname;
10810               }
10811             else if (TREE_CODE (sname) == SCOPE_REF)
10812               my_friendly_abort (17);
10813             else
10814               {
10815               done_scoping:
10816                 declarator = TREE_OPERAND (declarator, 1);
10817                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10818                   /* In this case, we will deal with it later.  */
10819                   ;
10820                 else
10821                   {
10822                     if (TREE_CODE (type) == FUNCTION_TYPE)
10823                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10824                                                       TYPE_ARG_TYPES (type));
10825                     else
10826                       type = build_offset_type (ctype, type);
10827                   }
10828               }
10829           }
10830           break;
10831
10832         case BIT_NOT_EXPR:
10833           declarator = TREE_OPERAND (declarator, 0);
10834           break;
10835
10836         case RECORD_TYPE:
10837         case UNION_TYPE:
10838         case ENUMERAL_TYPE:
10839           declarator = NULL_TREE;
10840           break;
10841
10842         case ERROR_MARK:
10843           declarator = NULL_TREE;
10844           break;
10845
10846         default:
10847           my_friendly_abort (158);
10848         }
10849     }
10850
10851   /* See the comment for the TREE_LIST case, above.  */
10852   if (inner_attrs)
10853     {
10854       if (! ignore_attrs)
10855         decl_attributes (type, inner_attrs, NULL_TREE);
10856       else if (attrlist)
10857         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10858       else
10859         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10860     }
10861
10862   /* Now TYPE has the actual type.  */
10863
10864   if (explicitp == 1 || (explicitp && friendp))
10865     {
10866       /* [dcl.fct.spec] The explicit specifier shall only be used in
10867          declarations of constructors within a class definition.  */
10868       error ("only declarations of constructors can be `explicit'");
10869       explicitp = 0;
10870     }
10871
10872   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10873     {
10874       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10875         {
10876           error ("non-member `%s' cannot be declared `mutable'", name);
10877           RIDBIT_RESET (RID_MUTABLE, specbits);
10878         }
10879       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10880         {
10881           error ("non-object member `%s' cannot be declared `mutable'", name);
10882           RIDBIT_RESET (RID_MUTABLE, specbits);
10883         }
10884       else if (TREE_CODE (type) == FUNCTION_TYPE
10885                || TREE_CODE (type) == METHOD_TYPE)
10886         {
10887           error ("function `%s' cannot be declared `mutable'", name);
10888           RIDBIT_RESET (RID_MUTABLE, specbits);
10889         }
10890       else if (staticp)
10891         {
10892           error ("static `%s' cannot be declared `mutable'", name);
10893           RIDBIT_RESET (RID_MUTABLE, specbits);
10894         }
10895       else if (type_quals & TYPE_QUAL_CONST)
10896         {
10897           error ("const `%s' cannot be declared `mutable'", name);
10898           RIDBIT_RESET (RID_MUTABLE, specbits);
10899         }
10900     }
10901
10902   if (declarator == NULL_TREE
10903       || TREE_CODE (declarator) == IDENTIFIER_NODE
10904       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10905           && (TREE_CODE (type) == FUNCTION_TYPE
10906               || TREE_CODE (type) == METHOD_TYPE)))
10907     /* OK */;
10908   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10909     {
10910       cp_error ("template-id `%D' used as a declarator", declarator);
10911       declarator = dname;
10912     }
10913   else
10914     /* Unexpected declarator format.  */
10915     my_friendly_abort (990210);
10916
10917   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10918
10919   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10920     {
10921       tree decl;
10922
10923       /* Note that the grammar rejects storage classes
10924          in typenames, fields or parameters.  */
10925       if (current_lang_name == lang_name_java)
10926         TYPE_FOR_JAVA (type) = 1;
10927
10928       if (decl_context == FIELD)
10929         {
10930           if (declarator == constructor_name (current_class_type))
10931             cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
10932                         declarator);
10933           decl = build_lang_decl (TYPE_DECL, declarator, type);
10934         }
10935       else
10936         decl = build_decl (TYPE_DECL, declarator, type);
10937
10938       /* If the user declares "typedef struct {...} foo" then the
10939          struct will have an anonymous name.  Fill that name in now.
10940          Nothing can refer to it, so nothing needs know about the name
10941          change.  */
10942       if (type != error_mark_node
10943           && declarator
10944           && TYPE_NAME (type)
10945           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10946           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10947           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10948         {
10949           tree oldname = TYPE_NAME (type);
10950           tree t;
10951
10952           /* Replace the anonymous name with the real name everywhere.  */
10953           lookup_tag_reverse (type, declarator);
10954           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10955             if (TYPE_NAME (t) == oldname)
10956               TYPE_NAME (t) = decl;
10957
10958           if (TYPE_LANG_SPECIFIC (type))
10959             TYPE_WAS_ANONYMOUS (type) = 1;
10960
10961           /* If this is a typedef within a template class, the nested
10962              type is a (non-primary) template.  The name for the
10963              template needs updating as well.  */
10964           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10965             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10966               = TYPE_IDENTIFIER (type);
10967
10968           /* XXX Temporarily set the scope.
10969              When returning, start_decl expects it as NULL_TREE,
10970              and will then then set it using pushdecl. */
10971           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10972           if (current_class_type)
10973             DECL_CONTEXT (decl) = current_class_type;
10974           else
10975             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10976
10977           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10978           DECL_ASSEMBLER_NAME (decl)
10979             = get_identifier (build_overload_name (type, 1, 1));
10980           DECL_CONTEXT (decl) = NULL_TREE;
10981
10982           /* FIXME remangle member functions; member functions of a
10983              type with external linkage have external linkage.  */
10984         }
10985
10986       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10987         {
10988           cp_error_at ("typedef name may not be class-qualified", decl);
10989           return NULL_TREE;
10990         }
10991       else if (quals)
10992         {
10993           if (ctype == NULL_TREE)
10994             {
10995               if (TREE_CODE (type) != METHOD_TYPE)
10996                 cp_error_at ("invalid type qualifier for non-member function type", decl);
10997               else
10998                 ctype = TYPE_METHOD_BASETYPE (type);
10999             }
11000           if (ctype != NULL_TREE)
11001             grok_method_quals (ctype, decl, quals);
11002         }
11003
11004       if (RIDBIT_SETP (RID_SIGNED, specbits)
11005           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11006         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11007
11008       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
11009                       inlinep, friendp, raises != NULL_TREE);
11010
11011       if (initialized)
11012         error ("typedef declaration includes an initializer");
11013
11014       return decl;
11015     }
11016
11017   /* Detect the case of an array type of unspecified size
11018      which came, as such, direct from a typedef name.
11019      We must copy the type, so that each identifier gets
11020      a distinct type, so that each identifier's size can be
11021      controlled separately by its own initializer.  */
11022
11023   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11024       && TYPE_DOMAIN (type) == NULL_TREE)
11025     {
11026       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11027     }
11028
11029   /* If this is a type name (such as, in a cast or sizeof),
11030      compute the type and return it now.  */
11031
11032   if (decl_context == TYPENAME)
11033     {
11034       /* Note that the grammar rejects storage classes
11035          in typenames, fields or parameters.  */
11036       if (type_quals != TYPE_UNQUALIFIED)
11037         type_quals = TYPE_UNQUALIFIED;
11038
11039       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11040       if (friendp)
11041         {
11042           if (type_quals != TYPE_UNQUALIFIED)
11043             {
11044               cp_error ("type qualifiers specified for friend class declaration");
11045               type_quals = TYPE_UNQUALIFIED;
11046             }
11047           if (inlinep)
11048             {
11049               cp_error ("`inline' specified for friend class declaration");
11050               inlinep = 0;
11051             }
11052
11053           /* Only try to do this stuff if we didn't already give up.  */
11054           if (type != integer_type_node)
11055             {
11056               /* A friendly class?  */
11057               if (current_class_type)
11058                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11059               else
11060                 error ("trying to make class `%s' a friend of global scope",
11061                        TYPE_NAME_STRING (type));
11062               type = void_type_node;
11063             }
11064         }
11065       else if (quals)
11066         {
11067           if (ctype == NULL_TREE)
11068             {
11069               if (TREE_CODE (type) != METHOD_TYPE)
11070                 cp_error ("invalid qualifiers on non-member function type");
11071               else
11072                 ctype = TYPE_METHOD_BASETYPE (type);
11073             }
11074           if (ctype)
11075             {
11076               tree dummy = build_decl (TYPE_DECL, declarator, type);
11077               grok_method_quals (ctype, dummy, quals);
11078               type = TREE_TYPE (dummy);
11079             }
11080         }
11081
11082       return type;
11083     }
11084   else if (declarator == NULL_TREE && decl_context != PARM
11085            && decl_context != CATCHPARM
11086            && TREE_CODE (type) != UNION_TYPE
11087            && ! bitfield)
11088     {
11089       cp_error ("abstract declarator `%T' used as declaration", type);
11090       declarator = make_anon_name ();
11091     }
11092
11093   /* `void' at top level (not within pointer)
11094      is allowed only in typedefs or type names.
11095      We don't complain about parms either, but that is because
11096      a better error message can be made later.  */
11097
11098   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11099     {
11100       if (! declarator)
11101         error ("unnamed variable or field declared void");
11102       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11103         {
11104           if (IDENTIFIER_OPNAME_P (declarator))
11105             my_friendly_abort (356);
11106           else
11107             error ("variable or field `%s' declared void", name);
11108         }
11109       else
11110         error ("variable or field declared void");
11111       type = integer_type_node;
11112     }
11113
11114   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11115      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11116
11117   if (decl_context == PARM || decl_context == CATCHPARM)
11118     {
11119       if (ctype || in_namespace)
11120         error ("cannot use `::' in parameter declaration");
11121
11122       /* A parameter declared as an array of T is really a pointer to T.
11123          One declared as a function is really a pointer to a function.
11124          One declared as a member is really a pointer to member.  */
11125
11126       if (TREE_CODE (type) == ARRAY_TYPE)
11127         {
11128           /* Transfer const-ness of array into that of type pointed to.  */
11129           type = build_pointer_type (TREE_TYPE (type));
11130           type_quals = TYPE_UNQUALIFIED;
11131         }
11132       else if (TREE_CODE (type) == FUNCTION_TYPE)
11133         type = build_pointer_type (type);
11134       else if (TREE_CODE (type) == OFFSET_TYPE)
11135         type = build_pointer_type (type);
11136       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11137         {
11138           error ("declaration of `%s' as void", name);
11139           return NULL_TREE;
11140         }
11141     }
11142
11143   {
11144     register tree decl;
11145
11146     if (decl_context == PARM)
11147       {
11148         decl = build_decl (PARM_DECL, declarator, type);
11149
11150         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11151                         inlinep, friendp, raises != NULL_TREE);
11152
11153         /* Compute the type actually passed in the parmlist,
11154            for the case where there is no prototype.
11155            (For example, shorts and chars are passed as ints.)
11156            When there is a prototype, this is overridden later.  */
11157
11158         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11159       }
11160     else if (decl_context == FIELD)
11161       {
11162         if (type == error_mark_node)
11163           {
11164             /* Happens when declaring arrays of sizes which
11165                are error_mark_node, for example.  */
11166             decl = NULL_TREE;
11167           }
11168         else if (in_namespace && !friendp)
11169           {
11170             /* Something like struct S { int N::j; };  */
11171             cp_error ("invalid use of `::'");
11172             decl = NULL_TREE;
11173           }
11174         else if (TREE_CODE (type) == FUNCTION_TYPE)
11175           {
11176             int publicp = 0;
11177             tree function_context;
11178
11179             /* We catch the others as conflicts with the builtin
11180                typedefs.  */
11181             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11182               {
11183                 cp_error ("function `%D' cannot be declared friend",
11184                           declarator);
11185                 friendp = 0;
11186               }
11187
11188             if (friendp == 0)
11189               {
11190                 if (ctype == NULL_TREE)
11191                   ctype = current_class_type;
11192
11193                 if (ctype == NULL_TREE)
11194                   {
11195                     cp_error ("can't make `%D' into a method -- not in a class",
11196                               declarator);
11197                     return void_type_node;
11198                   }
11199
11200                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11201                    ARM 9.5 */
11202                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11203                   {
11204                     cp_error ("function `%D' declared virtual inside a union",
11205                               declarator);
11206                     return void_type_node;
11207                   }
11208
11209                 if (declarator == ansi_opname[(int) NEW_EXPR]
11210                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11211                     || declarator == ansi_opname[(int) DELETE_EXPR]
11212                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11213                   {
11214                     if (virtualp)
11215                       {
11216                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11217                                   declarator);
11218                         virtualp = 0;
11219                       }
11220                   }
11221                 else if (staticp < 2)
11222                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11223                                                   TYPE_ARG_TYPES (type));
11224               }
11225
11226             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11227             function_context = (ctype != NULL_TREE) ?
11228               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11229             publicp = (! friendp || ! staticp)
11230               && function_context == NULL_TREE;
11231             decl = grokfndecl (ctype, type,
11232                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11233                                ? declarator : dname,
11234                                declarator,
11235                                virtualp, flags, quals, raises,
11236                                friendp ? -1 : 0, friendp, publicp, inlinep,
11237                                funcdef_flag, template_count, in_namespace);
11238             if (decl == NULL_TREE)
11239               return decl;
11240 #if 0
11241             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11242             /* The decl and setting of decl_machine_attr is also turned off.  */
11243             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11244 #endif
11245
11246             /* [class.conv.ctor]
11247
11248                A constructor declared without the function-specifier
11249                explicit that can be called with a single parameter
11250                specifies a conversion from the type of its first
11251                parameter to the type of its class.  Such a constructor
11252                is called a converting constructor.  */
11253             if (explicitp == 2)
11254               DECL_NONCONVERTING_P (decl) = 1;
11255             else if (DECL_CONSTRUCTOR_P (decl))
11256               {
11257                 /* The constructor can be called with exactly one
11258                    parameter if there is at least one parameter, and
11259                    any subsequent parameters have default arguments.
11260                    We don't look at the first parameter, which is
11261                    really just the `this' parameter for the new
11262                    object.  */
11263                 tree arg_types =
11264                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11265
11266                 /* Skip the `in_chrg' argument too, if present.  */
11267                 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
11268                   arg_types = TREE_CHAIN (arg_types);
11269
11270                 if (arg_types == void_list_node
11271                     || (arg_types
11272                         && TREE_CHAIN (arg_types)
11273                         && TREE_CHAIN (arg_types) != void_list_node
11274                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11275                   DECL_NONCONVERTING_P (decl) = 1;
11276               }
11277           }
11278         else if (TREE_CODE (type) == METHOD_TYPE)
11279           {
11280             /* We only get here for friend declarations of
11281                members of other classes.  */
11282             /* All method decls are public, so tell grokfndecl to set
11283                TREE_PUBLIC, also.  */
11284             decl = grokfndecl (ctype, type, declarator, declarator,
11285                                virtualp, flags, quals, raises,
11286                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11287                                template_count, in_namespace);
11288             if (decl == NULL_TREE)
11289               return NULL_TREE;
11290           }
11291         else if (!staticp && ! processing_template_decl
11292                  && !COMPLETE_TYPE_P (complete_type (type))
11293                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11294           {
11295             if (declarator)
11296               cp_error ("field `%D' has incomplete type", declarator);
11297             else
11298               cp_error ("name `%T' has incomplete type", type);
11299
11300             /* If we're instantiating a template, tell them which
11301                instantiation made the field's type be incomplete.  */
11302             if (current_class_type
11303                 && TYPE_NAME (current_class_type)
11304                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11305                 && declspecs && TREE_VALUE (declspecs)
11306                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11307               cp_error ("  in instantiation of template `%T'",
11308                         current_class_type);
11309
11310             type = error_mark_node;
11311             decl = NULL_TREE;
11312           }
11313         else
11314           {
11315             if (friendp)
11316               {
11317                 error ("`%s' is neither function nor member function; cannot be declared friend",
11318                        IDENTIFIER_POINTER (declarator));
11319                 friendp = 0;
11320               }
11321             decl = NULL_TREE;
11322           }
11323
11324         if (friendp)
11325           {
11326             /* Friends are treated specially.  */
11327             if (ctype == current_class_type)
11328               warning ("member functions are implicitly friends of their class");
11329             else
11330               {
11331                 tree t = NULL_TREE;
11332                 if (decl && DECL_NAME (decl))
11333                   {
11334                     if (template_class_depth (current_class_type) == 0)
11335                       {
11336                         decl
11337                           = check_explicit_specialization
11338                           (declarator, decl,
11339                            template_count, 2 * (funcdef_flag != 0) + 4);
11340                         if (decl == error_mark_node)
11341                           return error_mark_node;
11342                       }
11343
11344                     t = do_friend (ctype, declarator, decl,
11345                                    last_function_parms, attrlist, flags, quals,
11346                                    funcdef_flag);
11347                   }
11348                 if (t && funcdef_flag)
11349                   return t;
11350
11351                 return void_type_node;
11352               }
11353           }
11354
11355         /* Structure field.  It may not be a function, except for C++ */
11356
11357         if (decl == NULL_TREE)
11358           {
11359             if (initialized)
11360               {
11361                 if (!staticp)
11362                   {
11363                     /* An attempt is being made to initialize a non-static
11364                        member.  But, from [class.mem]:
11365
11366                        4 A member-declarator can contain a
11367                        constant-initializer only if it declares a static
11368                        member (_class.static_) of integral or enumeration
11369                        type, see _class.static.data_.
11370
11371                        This used to be relatively common practice, but
11372                        the rest of the compiler does not correctly
11373                        handle the initialization unless the member is
11374                        static so we make it static below.  */
11375                     cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
11376                                 declarator);
11377                     cp_pedwarn ("making `%D' static", declarator);
11378                     staticp = 1;
11379                   }
11380
11381                 if (uses_template_parms (type))
11382                   /* We'll check at instantiation time.  */
11383                   ;
11384                 else if (check_static_variable_definition (declarator,
11385                                                            type))
11386                   /* If we just return the declaration, crashes
11387                      will sometimes occur.  We therefore return
11388                      void_type_node, as if this was a friend
11389                      declaration, to cause callers to completely
11390                      ignore this declaration.  */
11391                   return void_type_node;
11392               }
11393
11394             /* 9.2p13 [class.mem] */
11395             if (declarator == constructor_name (current_class_type)
11396                 /* Divergence from the standard:  In extern "C", we
11397                    allow non-static data members here, because C does
11398                    and /usr/include/netinet/in.h uses that.  */
11399                 && (staticp || ! in_system_header))
11400               cp_pedwarn ("ISO C++ forbids data member `%D' with same name as enclosing class",
11401                           declarator);
11402
11403             if (staticp)
11404               {
11405                 /* C++ allows static class members.  All other work
11406                    for this is done by grokfield.  */
11407                 decl = build_lang_decl (VAR_DECL, declarator, type);
11408                 TREE_STATIC (decl) = 1;
11409                 /* In class context, 'static' means public access.  */
11410                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11411               }
11412             else
11413               {
11414                 decl = build_lang_decl (FIELD_DECL, declarator, type);
11415                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11416                   {
11417                     DECL_MUTABLE_P (decl) = 1;
11418                     RIDBIT_RESET (RID_MUTABLE, specbits);
11419                   }
11420               }
11421
11422             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11423                             inlinep, friendp, raises != NULL_TREE);
11424           }
11425       }
11426     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11427       {
11428         tree original_name;
11429         int publicp = 0;
11430
11431         if (! declarator)
11432           return NULL_TREE;
11433
11434         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11435           original_name = dname;
11436         else
11437           original_name = declarator;
11438
11439         if (RIDBIT_SETP (RID_AUTO, specbits))
11440           error ("storage class `auto' invalid for function `%s'", name);
11441         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11442           error ("storage class `register' invalid for function `%s'", name);
11443
11444         /* Function declaration not at top level.
11445            Storage classes other than `extern' are not allowed
11446            and `extern' makes no difference.  */
11447         if (! toplevel_bindings_p ()
11448             && (RIDBIT_SETP (RID_STATIC, specbits)
11449                 || RIDBIT_SETP (RID_INLINE, specbits))
11450             && pedantic)
11451           {
11452             if (RIDBIT_SETP (RID_STATIC, specbits))
11453               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11454             else
11455               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11456           }
11457
11458         if (ctype == NULL_TREE)
11459           {
11460             if (virtualp)
11461               {
11462                 error ("virtual non-class function `%s'", name);
11463                 virtualp = 0;
11464               }
11465           }
11466         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11467           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11468                                           TYPE_ARG_TYPES (type));
11469
11470         /* Record presence of `static'.  */
11471         publicp = (ctype != NULL_TREE
11472                    || RIDBIT_SETP (RID_EXTERN, specbits)
11473                    || !RIDBIT_SETP (RID_STATIC, specbits));
11474
11475         decl = grokfndecl (ctype, type, original_name, declarator,
11476                            virtualp, flags, quals, raises,
11477                            1, friendp,
11478                            publicp, inlinep, funcdef_flag,
11479                            template_count, in_namespace);
11480         if (decl == NULL_TREE)
11481           return NULL_TREE;
11482
11483         if (staticp == 1)
11484           {
11485             int illegal_static = 0;
11486
11487             /* Don't allow a static member function in a class, and forbid
11488                declaring main to be static.  */
11489             if (TREE_CODE (type) == METHOD_TYPE)
11490               {
11491                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11492                 illegal_static = 1;
11493               }
11494             else if (current_function_decl)
11495               {
11496                 /* FIXME need arm citation */
11497                 error ("cannot declare static function inside another function");
11498                 illegal_static = 1;
11499               }
11500
11501             if (illegal_static)
11502               {
11503                 staticp = 0;
11504                 RIDBIT_RESET (RID_STATIC, specbits);
11505               }
11506           }
11507       }
11508     else
11509       {
11510         /* It's a variable.  */
11511
11512         /* An uninitialized decl with `extern' is a reference.  */
11513         decl = grokvardecl (type, declarator, &specbits,
11514                             initialized,
11515                             (type_quals & TYPE_QUAL_CONST) != 0,
11516                             in_namespace);
11517         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11518                         inlinep, friendp, raises != NULL_TREE);
11519
11520         if (ctype)
11521           {
11522             DECL_CONTEXT (decl) = ctype;
11523             if (staticp == 1)
11524               {
11525                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11526                 staticp = 0;
11527                 RIDBIT_RESET (RID_STATIC, specbits);
11528               }
11529             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11530               {
11531                 cp_error ("static member `%D' declared `register'", decl);
11532                 RIDBIT_RESET (RID_REGISTER, specbits);
11533               }
11534             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11535               {
11536                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11537                             decl);
11538                 RIDBIT_RESET (RID_EXTERN, specbits);
11539               }
11540           }
11541       }
11542
11543     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11544
11545     /* Record `register' declaration for warnings on &
11546        and in case doing stupid register allocation.  */
11547
11548     if (RIDBIT_SETP (RID_REGISTER, specbits))
11549       DECL_REGISTER (decl) = 1;
11550
11551     if (RIDBIT_SETP (RID_EXTERN, specbits))
11552       DECL_THIS_EXTERN (decl) = 1;
11553
11554     if (RIDBIT_SETP (RID_STATIC, specbits))
11555       DECL_THIS_STATIC (decl) = 1;
11556
11557     /* Record constancy and volatility.  There's no need to do this
11558        when processing a template; we'll do this for the instantiated
11559        declaration based on the type of DECL.  */
11560     if (!processing_template_decl)
11561       c_apply_type_quals_to_decl (type_quals, decl);
11562
11563     return decl;
11564   }
11565 }
11566 \f
11567 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11568    An empty exprlist is a parmlist.  An exprlist which
11569    contains only identifiers at the global level
11570    is a parmlist.  Otherwise, it is an exprlist.  */
11571
11572 int
11573 parmlist_is_exprlist (exprs)
11574      tree exprs;
11575 {
11576   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11577     return 0;
11578
11579   if (toplevel_bindings_p ())
11580     {
11581       /* At the global level, if these are all identifiers,
11582          then it is a parmlist.  */
11583       while (exprs)
11584         {
11585           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11586             return 1;
11587           exprs = TREE_CHAIN (exprs);
11588         }
11589       return 0;
11590     }
11591   return 1;
11592 }
11593
11594 /* Subroutine of start_function.  Ensure that each of the parameter
11595    types (as listed in PARMS) is complete, as is required for a
11596    function definition.  */
11597
11598 static void
11599 require_complete_types_for_parms (parms)
11600      tree parms;
11601 {
11602   for (; parms; parms = TREE_CHAIN (parms))
11603     {
11604       tree type = TREE_TYPE (parms);
11605
11606       /* Try to complete the TYPE.  */
11607       type = complete_type (type);
11608
11609       if (type == error_mark_node)
11610         continue;
11611
11612       if (!COMPLETE_TYPE_P (type))
11613         {
11614           if (DECL_NAME (parms))
11615             error ("parameter `%s' has incomplete type",
11616                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11617           else
11618             error ("parameter has incomplete type");
11619           TREE_TYPE (parms) = error_mark_node;
11620         }
11621       else
11622         layout_decl (parms, 0);
11623     }
11624 }
11625
11626 /* Returns non-zero if T is a local variable.  */
11627
11628 int
11629 local_variable_p (t)
11630      tree t;
11631 {
11632   if ((TREE_CODE (t) == VAR_DECL
11633        /* A VAR_DECL with a context that is a _TYPE is a static data
11634           member.  */
11635        && !TYPE_P (CP_DECL_CONTEXT (t))
11636        /* Any other non-local variable must be at namespace scope.  */
11637        && !DECL_NAMESPACE_SCOPE_P (t))
11638       || (TREE_CODE (t) == PARM_DECL))
11639     return 1;
11640
11641   return 0;
11642 }
11643
11644 /* Returns non-zero if T is an automatic local variable or a label.
11645    (These are the declarations that need to be remapped when the code
11646    containing them is duplicated.)  */
11647
11648 int
11649 nonstatic_local_decl_p (t)
11650      tree t;
11651 {
11652   return ((local_variable_p (t) && !TREE_STATIC (t))
11653           || TREE_CODE (t) == LABEL_DECL
11654           || TREE_CODE (t) == RESULT_DECL);
11655 }
11656
11657 /* Like local_variable_p, but suitable for use as a tree-walking
11658    function.  */
11659
11660 static tree
11661 local_variable_p_walkfn (tp, walk_subtrees, data)
11662      tree *tp;
11663      int *walk_subtrees ATTRIBUTE_UNUSED;
11664      void *data ATTRIBUTE_UNUSED;
11665 {
11666   return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
11667           ? *tp : NULL_TREE);
11668 }
11669
11670 /* Check that ARG, which is a default-argument expression for a
11671    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11672    something goes wrong.  DECL may also be a _TYPE node, rather than a
11673    DECL, if there is no DECL available.  */
11674
11675 tree
11676 check_default_argument (decl, arg)
11677      tree decl;
11678      tree arg;
11679 {
11680   tree var;
11681   tree decl_type;
11682
11683   if (TREE_CODE (arg) == DEFAULT_ARG)
11684     /* We get a DEFAULT_ARG when looking at an in-class declaration
11685        with a default argument.  Ignore the argument for now; we'll
11686        deal with it after the class is complete.  */
11687     return arg;
11688
11689   if (processing_template_decl || uses_template_parms (arg))
11690     /* We don't do anything checking until instantiation-time.  Note
11691        that there may be uninstantiated arguments even for an
11692        instantiated function, since default arguments are not
11693        instantiated until they are needed.  */
11694     return arg;
11695
11696   if (TYPE_P (decl))
11697     {
11698       decl_type = decl;
11699       decl = NULL_TREE;
11700     }
11701   else
11702     decl_type = TREE_TYPE (decl);
11703
11704   if (arg == error_mark_node
11705       || decl == error_mark_node
11706       || TREE_TYPE (arg) == error_mark_node
11707       || decl_type == error_mark_node)
11708     /* Something already went wrong.  There's no need to check
11709        further.  */
11710     return error_mark_node;
11711
11712   /* [dcl.fct.default]
11713
11714      A default argument expression is implicitly converted to the
11715      parameter type.  */
11716   if (!TREE_TYPE (arg)
11717       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11718     {
11719       if (decl)
11720         cp_error ("default argument for `%#D' has type `%T'",
11721                   decl, TREE_TYPE (arg));
11722       else
11723         cp_error ("default argument for parameter of type `%T' has type `%T'",
11724                   decl_type, TREE_TYPE (arg));
11725
11726       return error_mark_node;
11727     }
11728
11729   /* [dcl.fct.default]
11730
11731      Local variables shall not be used in default argument
11732      expressions.
11733
11734      The keyword `this' shall not be used in a default argument of a
11735      member function.  */
11736   var = walk_tree (&arg, local_variable_p_walkfn, NULL);
11737   if (var)
11738     {
11739       cp_error ("default argument `%E' uses local variable `%D'",
11740                 arg, var);
11741       return error_mark_node;
11742     }
11743
11744   /* All is well.  */
11745   return arg;
11746 }
11747
11748 /* Decode the list of parameter types for a function type.
11749    Given the list of things declared inside the parens,
11750    return a list of types.
11751
11752    The list we receive can have three kinds of elements:
11753    an IDENTIFIER_NODE for names given without types,
11754    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11755    or void_type_node, to mark the end of an argument list
11756    when additional arguments are not permitted (... was not used).
11757
11758    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11759    a mere declaration.  A nonempty identifier-list gets an error message
11760    when FUNCDEF_FLAG is zero.
11761    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11762    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11763
11764    If all elements of the input list contain types,
11765    we return a list of the types.
11766    If all elements contain no type (except perhaps a void_type_node
11767    at the end), we return a null list.
11768    If some have types and some do not, it is an error, and we
11769    return a null list.
11770
11771    Also set last_function_parms to either
11772    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11773    A list of names is converted to a chain of PARM_DECLs
11774    by store_parm_decls so that ultimately it is always a chain of decls.
11775
11776    Note that in C++, parameters can take default values.  These default
11777    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11778    an error to specify default values which are followed by parameters
11779    that have no default values, or an ELLIPSES.  For simplicities sake,
11780    only parameters which are specified with their types can take on
11781    default values.  */
11782
11783 static tree
11784 grokparms (first_parm, funcdef_flag)
11785      tree first_parm;
11786      int funcdef_flag;
11787 {
11788   tree result = NULL_TREE;
11789   tree decls = NULL_TREE;
11790
11791   if (first_parm != NULL_TREE
11792       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11793     {
11794       if (! funcdef_flag)
11795         pedwarn ("parameter names (without types) in function declaration");
11796       last_function_parms = first_parm;
11797       return NULL_TREE;
11798     }
11799   else if (first_parm != NULL_TREE
11800            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11801            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11802     my_friendly_abort (145);
11803   else
11804     {
11805       /* Types were specified.  This is a list of declarators
11806          each represented as a TREE_LIST node.  */
11807       register tree parm, chain;
11808       int any_init = 0, any_error = 0;
11809
11810       if (first_parm != NULL_TREE)
11811         {
11812           tree last_result = NULL_TREE;
11813           tree last_decl = NULL_TREE;
11814
11815           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11816             {
11817               tree type = NULL_TREE, list_node = parm;
11818               register tree decl = TREE_VALUE (parm);
11819               tree init = TREE_PURPOSE (parm);
11820
11821               chain = TREE_CHAIN (parm);
11822               /* @@ weak defense against parse errors.  */
11823               if (TREE_CODE (decl) != VOID_TYPE
11824                   && TREE_CODE (decl) != TREE_LIST)
11825                 {
11826                   /* Give various messages as the need arises.  */
11827                   if (TREE_CODE (decl) == STRING_CST)
11828                     cp_error ("invalid string constant `%E'", decl);
11829                   else if (TREE_CODE (decl) == INTEGER_CST)
11830                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11831                   continue;
11832                 }
11833
11834               if (TREE_CODE (decl) != VOID_TYPE)
11835                 {
11836                   decl = grokdeclarator (TREE_VALUE (decl),
11837                                          TREE_PURPOSE (decl),
11838                                          PARM, init != NULL_TREE,
11839                                          NULL_TREE);
11840                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11841                     continue;
11842
11843                   /* Top-level qualifiers on the parameters are
11844                      ignored for function types.  */
11845                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11846
11847                   if (TREE_CODE (type) == VOID_TYPE)
11848                     decl = void_type_node;
11849                   else if (TREE_CODE (type) == METHOD_TYPE)
11850                     {
11851                       if (DECL_NAME (decl))
11852                         /* Cannot use the decl here because
11853                            we don't have DECL_CONTEXT set up yet.  */
11854                         cp_error ("parameter `%D' invalidly declared method type",
11855                                   DECL_NAME (decl));
11856                       else
11857                         error ("parameter invalidly declared method type");
11858                       type = build_pointer_type (type);
11859                       TREE_TYPE (decl) = type;
11860                     }
11861                   else if (TREE_CODE (type) == OFFSET_TYPE)
11862                     {
11863                       if (DECL_NAME (decl))
11864                         cp_error ("parameter `%D' invalidly declared offset type",
11865                                   DECL_NAME (decl));
11866                       else
11867                         error ("parameter invalidly declared offset type");
11868                       type = build_pointer_type (type);
11869                       TREE_TYPE (decl) = type;
11870                     }
11871                   else if (abstract_virtuals_error (decl, type))
11872                     any_error = 1;  /* Seems like a good idea. */
11873                   else if (POINTER_TYPE_P (type))
11874                     {
11875                       tree t = type;
11876                       while (POINTER_TYPE_P (t)
11877                              || (TREE_CODE (t) == ARRAY_TYPE
11878                                  && TYPE_DOMAIN (t) != NULL_TREE))
11879                         t = TREE_TYPE (t);
11880                       if (TREE_CODE (t) == ARRAY_TYPE)
11881                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11882                                   type,
11883                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11884                     }
11885                 }
11886
11887               if (TREE_CODE (decl) == VOID_TYPE)
11888                 {
11889                   if (result == NULL_TREE)
11890                     {
11891                       result = void_list_node;
11892                       last_result = result;
11893                     }
11894                   else
11895                     {
11896                       TREE_CHAIN (last_result) = void_list_node;
11897                       last_result = void_list_node;
11898                     }
11899                   if (chain
11900                       && (chain != void_list_node || TREE_CHAIN (chain)))
11901                     error ("`void' in parameter list must be entire list");
11902                   break;
11903                 }
11904
11905               /* Since there is a prototype, args are passed in their own types.  */
11906               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11907               if (PROMOTE_PROTOTYPES
11908                   && (TREE_CODE (type) == INTEGER_TYPE
11909                       || TREE_CODE (type) == ENUMERAL_TYPE)
11910                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11911                 DECL_ARG_TYPE (decl) = integer_type_node;
11912               if (!any_error && init)
11913                 {
11914                   any_init++;
11915                   init = check_default_argument (decl, init);
11916                 }
11917               else
11918                 init = NULL_TREE;
11919
11920               if (decls == NULL_TREE)
11921                 {
11922                   decls = decl;
11923                   last_decl = decls;
11924                 }
11925               else
11926                 {
11927                   TREE_CHAIN (last_decl) = decl;
11928                   last_decl = decl;
11929                 }
11930               list_node = tree_cons (init, type, NULL_TREE);
11931               if (result == NULL_TREE)
11932                 {
11933                   result = list_node;
11934                   last_result = result;
11935                 }
11936               else
11937                 {
11938                   TREE_CHAIN (last_result) = list_node;
11939                   last_result = list_node;
11940                 }
11941             }
11942           if (last_result)
11943             TREE_CHAIN (last_result) = NULL_TREE;
11944           /* If there are no parameters, and the function does not end
11945              with `...', then last_decl will be NULL_TREE.  */
11946           if (last_decl != NULL_TREE)
11947             TREE_CHAIN (last_decl) = NULL_TREE;
11948         }
11949     }
11950
11951   last_function_parms = decls;
11952
11953   return result;
11954 }
11955
11956 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11957    FUNCTION_TYPE with the newly parsed version of its default argument, which
11958    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11959
11960 void
11961 replace_defarg (arg, init)
11962      tree arg, init;
11963 {
11964   if (! processing_template_decl
11965       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11966     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11967                 TREE_TYPE (init), TREE_VALUE (arg));
11968   TREE_PURPOSE (arg) = init;
11969 }
11970 \f
11971 /* D is a constructor or overloaded `operator='.  Returns non-zero if
11972    D's arguments allow it to be a copy constructor, or copy assignment
11973    operator.  */
11974
11975 int
11976 copy_args_p (d)
11977      tree d;
11978 {
11979   tree t;
11980
11981   if (!DECL_FUNCTION_MEMBER_P (d))
11982     return 0;
11983
11984   t = FUNCTION_ARG_CHAIN (d);
11985   if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
11986     t = TREE_CHAIN (t);
11987   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11988       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11989           == DECL_CONTEXT (d))
11990       && (TREE_CHAIN (t) == NULL_TREE
11991           || TREE_CHAIN (t) == void_list_node
11992           || TREE_PURPOSE (TREE_CHAIN (t))))
11993     return 1;
11994   return 0;
11995 }
11996
11997 /* These memoizing functions keep track of special properties which
11998    a class may have.  `grok_ctor_properties' notices whether a class
11999    has a constructor of the form X(X&), and also complains
12000    if the class has a constructor of the form X(X).
12001    `grok_op_properties' takes notice of the various forms of
12002    operator= which are defined, as well as what sorts of type conversion
12003    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
12004
12005 int
12006 grok_ctor_properties (ctype, decl)
12007      tree ctype, decl;
12008 {
12009   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
12010   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
12011
12012   /* When a type has virtual baseclasses, a magical first int argument is
12013      added to any ctor so we can tell if the class has been initialized
12014      yet.  This could screw things up in this function, so we deliberately
12015      ignore the leading int if we're in that situation.  */
12016   if (DECL_HAS_IN_CHARGE_PARM_P (decl))
12017     {
12018       my_friendly_assert (parmtypes
12019                           && TREE_VALUE (parmtypes) == integer_type_node,
12020                           980529);
12021       parmtypes = TREE_CHAIN (parmtypes);
12022       parmtype = TREE_VALUE (parmtypes);
12023     }
12024
12025   /* [class.copy]
12026
12027      A non-template constructor for class X is a copy constructor if
12028      its first parameter is of type X&, const X&, volatile X& or const
12029      volatile X&, and either there are no other parameters or else all
12030      other parameters have default arguments.  */
12031   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12032       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12033       && (TREE_CHAIN (parmtypes) == NULL_TREE
12034           || TREE_CHAIN (parmtypes) == void_list_node
12035           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12036       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12037            && is_member_template (DECL_TI_TEMPLATE (decl))))
12038     {
12039       TYPE_HAS_INIT_REF (ctype) = 1;
12040       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12041         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12042     }
12043   /* [class.copy]
12044
12045      A declaration of a constructor for a class X is ill-formed if its
12046      first parameter is of type (optionally cv-qualified) X and either
12047      there are no other parameters or else all other parameters have
12048      default arguments.
12049
12050      We *don't* complain about member template instantiations that
12051      have this form, though; they can occur as we try to decide what
12052      constructor to use during overload resolution.  Since overload
12053      resolution will never prefer such a constructor to the
12054      non-template copy constructor (which is either explicitly or
12055      implicitly defined), there's no need to worry about their
12056      existence.  Theoretically, they should never even be
12057      instantiated, but that's hard to forestall.  */
12058   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12059            && (TREE_CHAIN (parmtypes) == NULL_TREE
12060                || TREE_CHAIN (parmtypes) == void_list_node
12061                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12062            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12063                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12064     {
12065       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12066                 ctype, ctype);
12067       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12068       return 0;
12069     }
12070   else if (TREE_CODE (parmtype) == VOID_TYPE
12071            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12072     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12073
12074   return 1;
12075 }
12076
12077 /* An operator with this name can be either unary or binary.  */
12078
12079 static int
12080 ambi_op_p (name)
12081      tree name;
12082 {
12083   return (name == ansi_opname [(int) INDIRECT_REF]
12084           || name == ansi_opname [(int) ADDR_EXPR]
12085           || name == ansi_opname [(int) NEGATE_EXPR]
12086           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12087           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12088           || name == ansi_opname [(int) CONVERT_EXPR]);
12089 }
12090
12091 /* An operator with this name can only be unary.  */
12092
12093 static int
12094 unary_op_p (name)
12095      tree name;
12096 {
12097   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12098           || name == ansi_opname [(int) BIT_NOT_EXPR]
12099           || name == ansi_opname [(int) COMPONENT_REF]
12100           || IDENTIFIER_TYPENAME_P (name));
12101 }
12102
12103 /* Do a little sanity-checking on how they declared their operator.  */
12104
12105 void
12106 grok_op_properties (decl, virtualp, friendp)
12107      tree decl;
12108      int virtualp, friendp;
12109 {
12110   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12111   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12112   tree name = DECL_NAME (decl);
12113
12114   if (current_class_type == NULL_TREE)
12115     friendp = 1;
12116
12117   if (! friendp)
12118     {
12119       /* [class.copy]
12120
12121          A user-declared copy assignment operator X::operator= is a
12122          non-static non-template member function of class X with
12123          exactly one parameter of type X, X&, const X&, volatile X& or
12124          const volatile X&.  */
12125       if (name == ansi_opname[(int) MODIFY_EXPR]
12126           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12127                && is_member_template (DECL_TI_TEMPLATE (decl))))
12128         ;
12129       else if (name == ansi_opname[(int) CALL_EXPR])
12130         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12131       else if (name == ansi_opname[(int) ARRAY_REF])
12132         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12133       else if (name == ansi_opname[(int) COMPONENT_REF]
12134                || name == ansi_opname[(int) MEMBER_REF])
12135         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12136       else if (name == ansi_opname[(int) NEW_EXPR])
12137         TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12138       else if (name == ansi_opname[(int) DELETE_EXPR])
12139         TYPE_GETS_DELETE (current_class_type) |= 1;
12140       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12141         TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12142       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12143         TYPE_GETS_DELETE (current_class_type) |= 2;
12144     }
12145
12146   if (name == ansi_opname[(int) NEW_EXPR]
12147       || name == ansi_opname[(int) VEC_NEW_EXPR])
12148     {
12149       /* When the compiler encounters the definition of A::operator new, it
12150          doesn't look at the class declaration to find out if it's static.  */
12151       if (methodp)
12152         revert_static_member_fn (decl);
12153
12154       /* Take care of function decl if we had syntax errors.  */
12155       if (argtypes == NULL_TREE)
12156         TREE_TYPE (decl)
12157           = build_function_type (ptr_type_node,
12158                                  hash_tree_chain (integer_type_node,
12159                                                   void_list_node));
12160       else
12161         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12162     }
12163   else if (name == ansi_opname[(int) DELETE_EXPR]
12164            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12165     {
12166       if (methodp)
12167         revert_static_member_fn (decl);
12168
12169       if (argtypes == NULL_TREE)
12170         TREE_TYPE (decl)
12171           = build_function_type (void_type_node,
12172                                  hash_tree_chain (ptr_type_node,
12173                                                   void_list_node));
12174       else
12175         TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12176     }
12177   else
12178     {
12179       /* An operator function must either be a non-static member function
12180          or have at least one parameter of a class, a reference to a class,
12181          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12182       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12183         {
12184           if (IDENTIFIER_TYPENAME_P (name)
12185               || name == ansi_opname[(int) CALL_EXPR]
12186               || name == ansi_opname[(int) MODIFY_EXPR]
12187               || name == ansi_opname[(int) COMPONENT_REF]
12188               || name == ansi_opname[(int) ARRAY_REF])
12189             cp_error ("`%D' must be a nonstatic member function", decl);
12190           else
12191             {
12192               tree p = argtypes;
12193
12194               if (DECL_STATIC_FUNCTION_P (decl))
12195                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12196
12197               if (p)
12198                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12199                   {
12200                     tree arg = TREE_VALUE (p);
12201                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12202                       arg = TREE_TYPE (arg);
12203
12204                     /* This lets bad template code slip through.  */
12205                     if (IS_AGGR_TYPE (arg)
12206                         || TREE_CODE (arg) == ENUMERAL_TYPE
12207                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12208                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12209                       goto foundaggr;
12210                   }
12211               cp_error
12212                 ("`%D' must have an argument of class or enumerated type",
12213                  decl);
12214             foundaggr:
12215               ;
12216             }
12217         }
12218
12219       if (name == ansi_opname[(int) CALL_EXPR])
12220         return;                 /* No restrictions on args. */
12221
12222       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12223         {
12224           tree t = TREE_TYPE (name);
12225           if (! friendp)
12226             {
12227               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12228               const char *what = 0;
12229               
12230               if (ref)
12231                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12232
12233               if (TREE_CODE (t) == VOID_TYPE)
12234                 what = "void";
12235               else if (t == current_class_type)
12236                 what = "the same type";
12237               /* Don't force t to be complete here.  */
12238               else if (IS_AGGR_TYPE (t)
12239                        && COMPLETE_TYPE_P (t)
12240                        && DERIVED_FROM_P (t, current_class_type))
12241                 what = "a base class";
12242
12243               if (what)
12244                 warning ("conversion to %s%s will never use a type conversion operator",
12245                          ref ? "a reference to " : "", what);
12246             }
12247         }
12248
12249       if (name == ansi_opname[(int) MODIFY_EXPR])
12250         {
12251           tree parmtype;
12252
12253           if (list_length (argtypes) != 3 && methodp)
12254             {
12255               cp_error ("`%D' must take exactly one argument", decl);
12256               return;
12257             }
12258           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12259
12260           if (copy_assignment_arg_p (parmtype, virtualp)
12261               && ! friendp)
12262             {
12263               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12264               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12265                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12266                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12267             }
12268         }
12269       else if (name == ansi_opname[(int) COND_EXPR])
12270         {
12271           /* 13.4.0.3 */
12272           cp_error ("ISO C++ prohibits overloading operator ?:");
12273         }
12274       else if (ambi_op_p (name))
12275         {
12276           if (list_length (argtypes) == 2)
12277             /* prefix */;
12278           else if (list_length (argtypes) == 3)
12279             {
12280               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12281                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12282                   && ! processing_template_decl
12283                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12284                 {
12285                   if (methodp)
12286                     cp_error ("postfix `%D' must take `int' as its argument",
12287                               decl);
12288                   else
12289                     cp_error
12290                       ("postfix `%D' must take `int' as its second argument",
12291                        decl);
12292                 }
12293             }
12294           else
12295             {
12296               if (methodp)
12297                 cp_error ("`%D' must take either zero or one argument", decl);
12298               else
12299                 cp_error ("`%D' must take either one or two arguments", decl);
12300             }
12301
12302           /* More Effective C++ rule 6.  */
12303           if (warn_ecpp
12304               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12305                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12306             {
12307               tree arg = TREE_VALUE (argtypes);
12308               tree ret = TREE_TYPE (TREE_TYPE (decl));
12309               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12310                 arg = TREE_TYPE (arg);
12311               arg = TYPE_MAIN_VARIANT (arg);
12312               if (list_length (argtypes) == 2)
12313                 {
12314                   if (TREE_CODE (ret) != REFERENCE_TYPE
12315                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12316                                        arg))
12317                     cp_warning ("prefix `%D' should return `%T'", decl,
12318                                 build_reference_type (arg));
12319                 }
12320               else
12321                 {
12322                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12323                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12324                 }
12325             }
12326         }
12327       else if (unary_op_p (name))
12328         {
12329           if (list_length (argtypes) != 2)
12330             {
12331               if (methodp)
12332                 cp_error ("`%D' must take `void'", decl);
12333               else
12334                 cp_error ("`%D' must take exactly one argument", decl);
12335             }
12336         }
12337       else /* if (binary_op_p (name)) */
12338         {
12339           if (list_length (argtypes) != 3)
12340             {
12341               if (methodp)
12342                 cp_error ("`%D' must take exactly one argument", decl);
12343               else
12344                 cp_error ("`%D' must take exactly two arguments", decl);
12345             }
12346
12347           /* More Effective C++ rule 7.  */
12348           if (warn_ecpp
12349               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12350                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12351                   || name == ansi_opname [COMPOUND_EXPR]))
12352             cp_warning ("user-defined `%D' always evaluates both arguments",
12353                         decl);
12354         }
12355
12356       /* Effective C++ rule 23.  */
12357       if (warn_ecpp
12358           && list_length (argtypes) == 3
12359           && (name == ansi_opname [PLUS_EXPR]
12360               || name == ansi_opname [MINUS_EXPR]
12361               || name == ansi_opname [TRUNC_DIV_EXPR]
12362               || name == ansi_opname [MULT_EXPR])
12363           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12364         cp_warning ("`%D' should return by value", decl);
12365
12366       /* 13.4.0.8 */
12367       for (; argtypes && argtypes != void_list_node;
12368           argtypes = TREE_CHAIN (argtypes))
12369         if (TREE_PURPOSE (argtypes))
12370           {
12371             TREE_PURPOSE (argtypes) = NULL_TREE;
12372             if (name == ansi_opname[(int) POSTINCREMENT_EXPR] 
12373                 || name == ansi_opname[(int) POSTDECREMENT_EXPR])   
12374               {
12375                 if (pedantic)
12376                   cp_pedwarn ("`%D' cannot have default arguments", decl);
12377               }
12378             else
12379               cp_error ("`%D' cannot have default arguments", decl);
12380           }
12381
12382     }
12383 }
12384 \f
12385 static const char *
12386 tag_name (code)
12387      enum tag_types code;
12388 {
12389   switch (code)
12390     {
12391     case record_type:
12392       return "struct";
12393     case class_type:
12394       return "class";
12395     case union_type:
12396       return "union ";
12397     case enum_type:
12398       return "enum";
12399     default:
12400       my_friendly_abort (981122);
12401     }
12402 }
12403
12404 /* Get the struct, enum or union (CODE says which) with tag NAME.
12405    Define the tag as a forward-reference if it is not defined.
12406
12407    C++: If a class derivation is given, process it here, and report
12408    an error if multiple derivation declarations are not identical.
12409
12410    If this is a definition, come in through xref_tag and only look in
12411    the current frame for the name (since C++ allows new names in any
12412    scope.)  */
12413
12414 tree
12415 xref_tag (code_type_node, name, globalize)
12416      tree code_type_node;
12417      tree name;
12418      int globalize;
12419 {
12420   enum tag_types tag_code;
12421   enum tree_code code;
12422   register tree ref, t;
12423   struct binding_level *b = current_binding_level;
12424   int got_type = 0;
12425   tree attributes = NULL_TREE;
12426   tree context = NULL_TREE;
12427
12428   /* If we are called from the parser, code_type_node will sometimes be a
12429      TREE_LIST.  This indicates that the user wrote
12430      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12431      use them later.  */
12432   if (TREE_CODE (code_type_node) == TREE_LIST)
12433     {
12434       attributes = TREE_PURPOSE (code_type_node);
12435       code_type_node = TREE_VALUE (code_type_node);
12436     }
12437
12438   tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12439   switch (tag_code)
12440     {
12441     case record_type:
12442     case class_type:
12443       code = RECORD_TYPE;
12444       break;
12445     case union_type:
12446       code = UNION_TYPE;
12447       break;
12448     case enum_type:
12449       code = ENUMERAL_TYPE;
12450       break;
12451     default:
12452       my_friendly_abort (18);
12453     }
12454
12455   /* If a cross reference is requested, look up the type
12456      already defined for this tag and return it.  */
12457   if (TYPE_P (name))
12458     {
12459       t = name;
12460       name = TYPE_IDENTIFIER (t);
12461       got_type = 1;
12462     }
12463   else
12464     t = IDENTIFIER_TYPE_VALUE (name);
12465
12466   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12467       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12468     t = NULL_TREE;
12469
12470   if (! globalize)
12471     {
12472       /* If we know we are defining this tag, only look it up in
12473          this scope and don't try to find it as a type.  */
12474       ref = lookup_tag (code, name, b, 1);
12475     }
12476   else
12477     {
12478       if (t)
12479         {
12480           /* [dcl.type.elab] If the identifier resolves to a
12481              typedef-name or a template type-parameter, the
12482              elaborated-type-specifier is ill-formed.  */
12483           if (t != TYPE_MAIN_VARIANT (t)
12484               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12485             cp_pedwarn ("using typedef-name `%D' after `%s'",
12486                         TYPE_NAME (t), tag_name (tag_code));
12487           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12488             cp_error ("using template type parameter `%T' after `%s'",
12489                       t, tag_name (tag_code));
12490
12491           ref = t;
12492         }
12493       else
12494         ref = lookup_tag (code, name, b, 0);
12495
12496       if (! ref)
12497         {
12498           /* Try finding it as a type declaration.  If that wins,
12499              use it.  */
12500           ref = lookup_name (name, 1);
12501
12502           if (ref != NULL_TREE
12503               && processing_template_decl
12504               && DECL_CLASS_TEMPLATE_P (ref)
12505               && template_class_depth (current_class_type) == 0)
12506             /* Since GLOBALIZE is true, we're declaring a global
12507                template, so we want this type.  */
12508             ref = DECL_TEMPLATE_RESULT (ref);
12509
12510           if (ref && TREE_CODE (ref) == TYPE_DECL
12511               && TREE_CODE (TREE_TYPE (ref)) == code)
12512             ref = TREE_TYPE (ref);
12513           else
12514             ref = NULL_TREE;
12515         }
12516
12517       if (ref && current_class_type
12518           && template_class_depth (current_class_type)
12519           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12520         {
12521           /* Since GLOBALIZE is non-zero, we are not looking at a
12522              definition of this tag.  Since, in addition, we are currently
12523              processing a (member) template declaration of a template
12524              class, we must be very careful; consider:
12525
12526                template <class X>
12527                struct S1
12528
12529                template <class U>
12530                struct S2
12531                { template <class V>
12532                friend struct S1; };
12533
12534              Here, the S2::S1 declaration should not be confused with the
12535              outer declaration.  In particular, the inner version should
12536              have a template parameter of level 2, not level 1.  This
12537              would be particularly important if the member declaration
12538              were instead:
12539
12540                template <class V = U> friend struct S1;
12541
12542              say, when we should tsubst into `U' when instantiating
12543              S2.  On the other hand, when presented with:
12544
12545                  template <class T>
12546                  struct S1 {
12547                    template <class U>
12548                    struct S2 {};
12549                    template <class U>
12550                    friend struct S2;
12551                  };
12552
12553               we must find the inner binding eventually.  We
12554               accomplish this by making sure that the new type we
12555               create to represent this declaration has the right
12556               TYPE_CONTEXT.  */
12557           context = TYPE_CONTEXT (ref);
12558           ref = NULL_TREE;
12559         }
12560     }
12561
12562   if (! ref)
12563     {
12564       /* If no such tag is yet defined, create a forward-reference node
12565          and record it as the "definition".
12566          When a real declaration of this type is found,
12567          the forward-reference will be altered into a real type.  */
12568       if (code == ENUMERAL_TYPE)
12569         {
12570           cp_error ("use of enum `%#D' without previous declaration", name);
12571
12572           ref = make_node (ENUMERAL_TYPE);
12573
12574           /* Give the type a default layout like unsigned int
12575              to avoid crashing if it does not get defined.  */
12576           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12577           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12578           TREE_UNSIGNED (ref) = 1;
12579           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12580           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12581           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12582
12583           /* Enable us to recognize when a type is created in class context.
12584              To do nested classes correctly, this should probably be cleared
12585              out when we leave this classes scope.  Currently this in only
12586              done in `start_enum'.  */
12587
12588           pushtag (name, ref, globalize);
12589         }
12590       else
12591         {
12592           struct binding_level *old_b = class_binding_level;
12593
12594           ref = make_aggr_type (code);
12595           TYPE_CONTEXT (ref) = context;
12596
12597 #ifdef NONNESTED_CLASSES
12598           /* Class types don't nest the way enums do.  */
12599           class_binding_level = (struct binding_level *)0;
12600 #endif
12601           pushtag (name, ref, globalize);
12602           class_binding_level = old_b;
12603         }
12604     }
12605   else
12606     {
12607       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12608         redeclare_class_template (ref, current_template_parms);
12609     }
12610
12611   /* Until the type is defined, tentatively accept whatever
12612      structure tag the user hands us.  */
12613   if (!COMPLETE_TYPE_P (ref)
12614       && ref != current_class_type
12615       /* Have to check this, in case we have contradictory tag info.  */
12616       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12617     {
12618       if (tag_code == class_type)
12619         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12620       else if (tag_code == record_type)
12621         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12622     }
12623
12624   TREE_TYPE (ref) = attributes;
12625
12626   return ref;
12627 }
12628
12629 tree
12630 xref_tag_from_type (old, id, globalize)
12631      tree old, id;
12632      int globalize;
12633 {
12634   tree code_type_node;
12635
12636   if (TREE_CODE (old) == RECORD_TYPE)
12637     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12638                       ? class_type_node : record_type_node);
12639   else
12640     code_type_node = union_type_node;
12641
12642   if (id == NULL_TREE)
12643     id = TYPE_IDENTIFIER (old);
12644
12645   return xref_tag (code_type_node, id, globalize);
12646 }
12647
12648 /* REF is a type (named NAME), for which we have just seen some
12649    baseclasses.  BINFO is a list of those baseclasses; the
12650    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12651    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12652    struct, or union.  */
12653
12654 void
12655 xref_basetypes (code_type_node, name, ref, binfo)
12656      tree code_type_node;
12657      tree name, ref;
12658      tree binfo;
12659 {
12660   /* In the declaration `A : X, Y, ... Z' we mark all the types
12661      (A, X, Y, ..., Z) so we can check for duplicates.  */
12662   tree binfos;
12663   tree base;
12664
12665   int i, len;
12666   enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12667
12668   if (tag_code == union_type)
12669     {
12670       cp_error ("derived union `%T' invalid", ref);
12671       return;
12672     }
12673
12674   len = list_length (binfo);
12675
12676   /* First, make sure that any templates in base-classes are
12677      instantiated.  This ensures that if we call ourselves recursively
12678      we do not get confused about which classes are marked and which
12679      are not.  */
12680   for (base = binfo; base; base = TREE_CHAIN (base))
12681     complete_type (TREE_VALUE (base));
12682
12683   SET_CLASSTYPE_MARKED (ref);
12684   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12685
12686   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12687     {
12688       /* The base of a derived struct is public by default.  */
12689       int via_public
12690         = (TREE_PURPOSE (binfo) == access_public_node
12691            || TREE_PURPOSE (binfo) == access_public_virtual_node
12692            || (tag_code != class_type
12693                && (TREE_PURPOSE (binfo) == access_default_node
12694                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12695       int via_protected
12696         = (TREE_PURPOSE (binfo) == access_protected_node
12697            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12698       int via_virtual
12699         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12700            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12701            || TREE_PURPOSE (binfo) == access_public_virtual_node
12702            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12703       tree basetype = TREE_VALUE (binfo);
12704       tree base_binfo;
12705
12706       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12707         basetype = TREE_TYPE (basetype);
12708       if (!basetype
12709           || (TREE_CODE (basetype) != RECORD_TYPE
12710               && TREE_CODE (basetype) != TYPENAME_TYPE
12711               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12712               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12713         {
12714           cp_error ("base type `%T' fails to be a struct or class type",
12715                     TREE_VALUE (binfo));
12716           continue;
12717         }
12718
12719       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12720
12721       /* This code replaces similar code in layout_basetypes.
12722          We put the complete_type first for implicit `typename'.  */
12723       if (!COMPLETE_TYPE_P (basetype)
12724           && ! (current_template_parms && uses_template_parms (basetype)))
12725         {
12726           cp_error ("base class `%T' has incomplete type", basetype);
12727           continue;
12728         }
12729       else
12730         {
12731           if (CLASSTYPE_MARKED (basetype))
12732             {
12733               if (basetype == ref)
12734                 cp_error ("recursive type `%T' undefined", basetype);
12735               else
12736                 cp_error ("duplicate base type `%T' invalid", basetype);
12737               continue;
12738             }
12739
12740           if (TYPE_FOR_JAVA (basetype)
12741               && (current_lang_stack
12742                   == &VARRAY_TREE (current_lang_base, 0)))
12743             TYPE_FOR_JAVA (ref) = 1;
12744
12745           /* Note that the BINFO records which describe individual
12746              inheritances are *not* shared in the lattice!  They
12747              cannot be shared because a given baseclass may be
12748              inherited with different `accessibility' by different
12749              derived classes.  (Each BINFO record describing an
12750              individual inheritance contains flags which say what
12751              the `accessibility' of that particular inheritance is.)  */
12752
12753           base_binfo
12754             = make_binfo (size_zero_node, basetype,
12755                           CLASS_TYPE_P (basetype)
12756                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12757                           CLASS_TYPE_P (basetype)
12758                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12759
12760           TREE_VEC_ELT (binfos, i) = base_binfo;
12761           TREE_VIA_PUBLIC (base_binfo) = via_public;
12762           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12763           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12764           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12765
12766           /* We need to unshare the binfos now so that lookups during class
12767              definition work.  */
12768           unshare_base_binfos (base_binfo);
12769
12770           SET_CLASSTYPE_MARKED (basetype);
12771
12772           /* We are free to modify these bits because they are meaningless
12773              at top level, and BASETYPE is a top-level type.  */
12774           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12775             {
12776               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12777               /* Converting to a virtual base class requires looking
12778                  up the offset of the virtual base.  */
12779               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12780             }
12781
12782           if (CLASS_TYPE_P (basetype))
12783             {
12784               TYPE_HAS_NEW_OPERATOR (ref) 
12785                 |= TYPE_HAS_NEW_OPERATOR (basetype);
12786               TYPE_HAS_ARRAY_NEW_OPERATOR (ref) 
12787                 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12788               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12789               /* If the base-class uses multiple inheritance, so do we.  */
12790               TYPE_USES_MULTIPLE_INHERITANCE (ref)
12791                 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12792               /* Likewise, if converting to a base of the base may require
12793                  code, then we may need to generate code to convert to a
12794                  base as well.  */
12795               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
12796                 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
12797             }
12798
12799           i += 1;
12800         }
12801     }
12802   if (i)
12803     TREE_VEC_LENGTH (binfos) = i;
12804   else
12805     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12806
12807   if (i > 1)
12808     {
12809       TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12810       /* If there is more than one non-empty they cannot be at the same
12811          address.  */
12812       TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12813     }
12814
12815   /* Unmark all the types.  */
12816   while (--i >= 0)
12817     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12818   CLEAR_CLASSTYPE_MARKED (ref);
12819
12820   /* Now that we know all the base-classes, set up the list of virtual
12821      bases.  */
12822   get_vbase_types (ref);
12823 }
12824
12825 \f
12826 /* Begin compiling the definition of an enumeration type.
12827    NAME is its name (or null if anonymous).
12828    Returns the type object, as yet incomplete.
12829    Also records info about it so that build_enumerator
12830    may be used to declare the individual values as they are read.  */
12831
12832 tree
12833 start_enum (name)
12834      tree name;
12835 {
12836   register tree enumtype = NULL_TREE;
12837   struct binding_level *b = current_binding_level;
12838
12839   /* If this is the real definition for a previous forward reference,
12840      fill in the contents in the same object that used to be the
12841      forward reference.  */
12842
12843   if (name != NULL_TREE)
12844     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12845
12846   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12847     {
12848       cp_error ("multiple definition of `%#T'", enumtype);
12849       cp_error_at ("previous definition here", enumtype);
12850       /* Clear out TYPE_VALUES, and start again.  */
12851       TYPE_VALUES (enumtype) = NULL_TREE;
12852     }
12853   else
12854     {
12855       enumtype = make_node (ENUMERAL_TYPE);
12856       pushtag (name, enumtype, 0);
12857     }
12858
12859   if (current_class_type)
12860     TREE_ADDRESSABLE (b->tags) = 1;
12861
12862   GNU_xref_decl (current_function_decl, enumtype);
12863   return enumtype;
12864 }
12865
12866 /* After processing and defining all the values of an enumeration type,
12867    install their decls in the enumeration type and finish it off.
12868    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12869    Returns ENUMTYPE.  */
12870
12871 tree
12872 finish_enum (enumtype)
12873      tree enumtype;
12874 {
12875   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12876   /* Calculate the maximum value of any enumerator in this type.  */
12877
12878   tree values = TYPE_VALUES (enumtype);
12879   if (values)
12880     {
12881       tree pair;
12882
12883       for (pair = values; pair; pair = TREE_CHAIN (pair))
12884         {
12885           tree decl;
12886           tree value;
12887
12888           /* The TREE_VALUE is a CONST_DECL for this enumeration
12889              constant.  */
12890           decl = TREE_VALUE (pair);
12891
12892           /* [dcl.enum]
12893
12894              Following the closing brace of an enum-specifier, each
12895              enumerator has the type of its enumeration.  Prior to the
12896              closing brace, the type of each enumerator is the type of
12897              its initializing value.  */
12898           TREE_TYPE (decl) = enumtype;
12899
12900           /* The DECL_INITIAL will be NULL if we are processing a
12901              template declaration and this enumeration constant had no
12902              explicit initializer.  */
12903           value = DECL_INITIAL (decl);
12904           if (value && !processing_template_decl)
12905             {
12906               /* Set the TREE_TYPE for the VALUE as well.  That's so
12907                  that when we call decl_constant_value we get an
12908                  entity of the right type (but with the constant
12909                  value).  Since we shouldn't ever call
12910                  decl_constant_value on a template type, there's no
12911                  reason to do that when processing_template_decl.
12912                  And, if the expression is something like a
12913                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12914                  wreak havoc on the intended type of the expression.
12915
12916                  Of course, there's also no point in trying to compute
12917                  minimum or maximum values if we're in a template.  */
12918               TREE_TYPE (value) = enumtype;
12919
12920               if (!minnode)
12921                 minnode = maxnode = value;
12922               else if (tree_int_cst_lt (maxnode, value))
12923                 maxnode = value;
12924               else if (tree_int_cst_lt (value, minnode))
12925                 minnode = value;
12926             }
12927
12928           if (processing_template_decl)
12929             /* If this is just a template, leave the CONST_DECL
12930                alone.  That way tsubst_copy will find CONST_DECLs for
12931                CONST_DECLs, and not INTEGER_CSTs.  */
12932             ;
12933           else
12934             /* In the list we're building up, we want the enumeration
12935                values, not the CONST_DECLs.  */
12936             TREE_VALUE (pair) = value;
12937         }
12938     }
12939   else
12940     maxnode = minnode = integer_zero_node;
12941
12942   TYPE_VALUES (enumtype) = nreverse (values);
12943
12944   if (processing_template_decl)
12945     {
12946       tree scope = current_scope ();
12947       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12948         add_tree (build_min (TAG_DEFN, enumtype));
12949     }
12950   else
12951     {
12952       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12953       int lowprec = min_precision (minnode, unsignedp);
12954       int highprec = min_precision (maxnode, unsignedp);
12955       int precision = MAX (lowprec, highprec);
12956       tree tem;
12957
12958       TYPE_SIZE (enumtype) = NULL_TREE;
12959
12960       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12961
12962       TYPE_PRECISION (enumtype) = precision;
12963       if (unsignedp)
12964         fixup_unsigned_type (enumtype);
12965       else
12966         fixup_signed_type (enumtype);
12967
12968       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12969         /* Use the width of the narrowest normal C type which is wide
12970            enough.  */
12971         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12972                                                     (precision, 1));
12973       else
12974         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12975
12976       TYPE_SIZE (enumtype) = 0;
12977       layout_type (enumtype);
12978
12979       /* Fix up all variant types of this enum type.  */
12980       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12981            tem = TYPE_NEXT_VARIANT (tem))
12982         {
12983           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12984           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12985           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12986           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12987           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12988           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12989           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12990           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12991           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12992         }
12993
12994       /* Finish debugging output for this type.  */
12995       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12996     }
12997
12998   return enumtype;
12999 }
13000
13001 /* Build and install a CONST_DECL for an enumeration constant of the
13002    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13003    Assignment of sequential values by default is handled here.  */
13004
13005 void
13006 build_enumerator (name, value, enumtype)
13007      tree name;
13008      tree value;
13009      tree enumtype;
13010 {
13011   tree decl;
13012   tree context;
13013   tree type;
13014   tree values;
13015
13016   /* Remove no-op casts from the value.  */
13017   if (value)
13018     STRIP_TYPE_NOPS (value);
13019
13020   if (! processing_template_decl)
13021     {
13022       /* Validate and default VALUE.  */
13023       if (value != NULL_TREE)
13024         {
13025           value = decl_constant_value (value);
13026
13027           if (TREE_CODE (value) == INTEGER_CST)
13028             {
13029               value = default_conversion (value);
13030               constant_expression_warning (value);
13031             }
13032           else
13033             {
13034               cp_error ("enumerator value for `%D' not integer constant", name);
13035               value = NULL_TREE;
13036             }
13037         }
13038
13039       /* Default based on previous value.  */
13040       if (value == NULL_TREE && ! processing_template_decl)
13041         {
13042           tree prev_value;
13043
13044           if (TYPE_VALUES (enumtype))
13045             {
13046               /* The next value is the previous value ... */
13047               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13048               /* ... plus one.  */
13049               value = build_binary_op (PLUS_EXPR,
13050                                        prev_value,
13051                                        integer_one_node);
13052
13053               if (tree_int_cst_lt (value, prev_value))
13054                 cp_error ("overflow in enumeration values at `%D'", name);
13055             }
13056           else
13057             value = integer_zero_node;
13058         }
13059
13060       /* Remove no-op casts from the value.  */
13061       if (value)
13062         STRIP_TYPE_NOPS (value);
13063 #if 0
13064       /* To fix MAX_VAL enum consts. (bkoz)  */
13065       TREE_TYPE (value) = integer_type_node;
13066 #endif
13067     }
13068
13069   /* We always have to copy here; not all INTEGER_CSTs are unshared.
13070      Even in other cases, we will later (in finish_enum) be setting
13071      the type of VALUE.  But, we don't need to make a copy if this
13072      VALUE is one of the enumeration constants for this same
13073      enumeration type.  */
13074   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13075     if (TREE_VALUE (values) == value)
13076       break;
13077   /* If we didn't break out of the loop, then we do need a copy.  */
13078   if (!values && value)
13079     value = copy_node (value);
13080
13081   /* C++ associates enums with global, function, or class declarations.  */
13082   context = current_scope ();
13083
13084   /* Build the actual enumeration constant.  Note that the enumeration
13085     constants have the type of their initializers until the
13086     enumeration is complete:
13087
13088       [ dcl.enum ]
13089
13090       Following the closing brace of an enum-specifier, each enumer-
13091       ator has the type of its enumeration.  Prior to the closing
13092       brace, the type of each enumerator is the type of its
13093       initializing value.
13094
13095     In finish_enum we will reset the type.  Of course, if we're
13096     processing a template, there may be no value.   */
13097   type = value ? TREE_TYPE (value) : NULL_TREE;
13098
13099   if (context && context == current_class_type)
13100     /* This enum declaration is local to the class.  We need the full
13101       lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
13102     decl = build_lang_decl (CONST_DECL, name, type);
13103   else
13104     /* It's a global enum, or it's local to a function.  (Note local to
13105       a function could mean local to a class method.  */
13106     decl = build_decl (CONST_DECL, name, type);
13107
13108   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13109   DECL_INITIAL (decl) = value;
13110   TREE_READONLY (decl) = 1;
13111
13112   if (context && context == current_class_type)
13113     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13114       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13115       things like `S::i' later.)  */
13116     finish_member_declaration (decl);
13117   else
13118     {
13119       pushdecl (decl);
13120       GNU_xref_decl (current_function_decl, decl);
13121     }
13122
13123   /* Add this enumeration constant to the list for this type.  */
13124   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13125 }
13126
13127 \f
13128 static int function_depth;
13129
13130 /* We're defining DECL.  Make sure that it's type is OK.  */
13131
13132 static void
13133 check_function_type (decl)
13134      tree decl;
13135 {
13136   tree fntype = TREE_TYPE (decl);
13137   tree return_type = complete_type (TREE_TYPE (fntype));
13138
13139   /* In a function definition, arg types must be complete.  */
13140   require_complete_types_for_parms (current_function_parms);
13141
13142   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13143     {
13144       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13145
13146       /* Make it return void instead, but don't change the
13147          type of the DECL_RESULT, in case we have a named return value.  */
13148       if (TREE_CODE (fntype) == METHOD_TYPE)
13149         {
13150           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13151           TREE_TYPE (decl)
13152             = build_cplus_method_type (ctype,
13153                                        void_type_node,
13154                                        FUNCTION_ARG_CHAIN (decl));
13155         }
13156       else
13157         TREE_TYPE (decl)
13158           = build_function_type (void_type_node,
13159                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
13160       TREE_TYPE (decl)
13161         = build_exception_variant (fntype,
13162                                    TYPE_RAISES_EXCEPTIONS (fntype));
13163     }
13164   else
13165     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13166 }
13167
13168 /* Create the FUNCTION_DECL for a function definition.
13169    DECLSPECS and DECLARATOR are the parts of the declaration;
13170    they describe the function's name and the type it returns,
13171    but twisted together in a fashion that parallels the syntax of C.
13172
13173    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13174    DECLARATOR is really the DECL for the function we are about to
13175    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13176    indicating that the function is an inline defined in-class, and
13177    SF_EXPAND indicating that we should generate RTL for this
13178    function.
13179
13180    This function creates a binding context for the function body
13181    as well as setting up the FUNCTION_DECL in current_function_decl.
13182
13183    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13184    (it defines a datum instead), we return 0, which tells
13185    yyparse to report a parse error.
13186
13187    For C++, we must first check whether that datum makes any sense.
13188    For example, "class A local_a(1,2);" means that variable local_a
13189    is an aggregate of type A, which should have a constructor
13190    applied to it with the argument list [1, 2].  */
13191
13192 int
13193 start_function (declspecs, declarator, attrs, flags)
13194      tree declspecs, declarator, attrs;
13195      int flags;
13196 {
13197   tree decl1;
13198   tree ctype = NULL_TREE;
13199   tree fntype;
13200   tree restype;
13201   extern int have_extern_spec;
13202   extern int used_extern_spec;
13203   int doing_friend = 0;
13204   struct binding_level *bl;
13205
13206   /* Sanity check.  */
13207   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13208   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13209
13210   /* This should only be done once on the top most decl.  */
13211   if (have_extern_spec && !used_extern_spec)
13212     {
13213       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13214       used_extern_spec = 1;
13215     }
13216
13217   if (flags & SF_PRE_PARSED)
13218     {
13219       decl1 = declarator;
13220
13221       fntype = TREE_TYPE (decl1);
13222       if (TREE_CODE (fntype) == METHOD_TYPE)
13223         ctype = TYPE_METHOD_BASETYPE (fntype);
13224
13225       /* ISO C++ 11.4/5.  A friend function defined in a class is in
13226          the (lexical) scope of the class in which it is defined.  */
13227       if (!ctype && DECL_FRIEND_P (decl1))
13228         {
13229           ctype = DECL_FRIEND_CONTEXT (decl1);
13230
13231           /* CTYPE could be null here if we're dealing with a template;
13232              for example, `inline friend float foo()' inside a template
13233              will have no CTYPE set.  */
13234           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13235             ctype = NULL_TREE;
13236           else
13237             doing_friend = 1;
13238         }
13239
13240       last_function_parms = DECL_ARGUMENTS (decl1);
13241       last_function_parm_tags = NULL_TREE;
13242     }
13243   else
13244     {
13245       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13246       /* If the declarator is not suitable for a function definition,
13247          cause a syntax error.  */
13248       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13249
13250       fntype = TREE_TYPE (decl1);
13251
13252       restype = TREE_TYPE (fntype);
13253       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13254         {
13255           cp_error ("semicolon missing after declaration of `%#T'", restype);
13256           shadow_tag (build_tree_list (NULL_TREE, restype));
13257           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13258           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13259             fntype = build_function_type (integer_type_node,
13260                                           TYPE_ARG_TYPES (fntype));
13261           else
13262             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13263                                               integer_type_node,
13264                                               TYPE_ARG_TYPES (fntype));
13265           TREE_TYPE (decl1) = fntype;
13266         }
13267
13268       if (TREE_CODE (fntype) == METHOD_TYPE)
13269         ctype = TYPE_METHOD_BASETYPE (fntype);
13270       else if (DECL_MAIN_P (decl1))
13271         {
13272           /* If this doesn't return integer_type, complain.  */
13273           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13274             {
13275               if (pedantic || warn_return_type)
13276                 pedwarn ("return type for `main' changed to `int'");
13277               TREE_TYPE (decl1) = fntype = default_function_type;
13278             }
13279         }
13280     }
13281
13282   /* Sometimes we don't notice that a function is a static member, and
13283      build a METHOD_TYPE for it.  Fix that up now.  */
13284   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13285       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13286     {
13287       revert_static_member_fn (decl1);
13288       last_function_parms = TREE_CHAIN (last_function_parms);
13289       ctype = NULL_TREE;
13290     }
13291
13292   /* Warn if function was previously implicitly declared
13293      (but not if we warned then).  */
13294   if (! warn_implicit
13295       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13296     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13297
13298   /* Set up current_class_type, and enter the scope of the class, if
13299      appropriate.  */
13300   if (ctype)
13301     push_nested_class (ctype, 1);
13302   else if (DECL_STATIC_FUNCTION_P (decl1))
13303     push_nested_class (DECL_CONTEXT (decl1), 2);
13304
13305   /* Now that we have entered the scope of the class, we must restore
13306      the bindings for any template parameters surrounding DECL1, if it
13307      is an inline member template.  (Order is important; consider the
13308      case where a template parameter has the same name as a field of
13309      the class.)  It is not until after this point that
13310      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13311   if (flags & SF_INCLASS_INLINE)
13312     maybe_begin_member_template_processing (decl1);
13313
13314   /* Effective C++ rule 15.  See also c_expand_return.  */
13315   if (warn_ecpp
13316       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13317       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13318     cp_warning ("`operator=' should return a reference to `*this'");
13319
13320   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13321      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13322   if (!DECL_INITIAL (decl1))
13323     DECL_INITIAL (decl1) = error_mark_node;
13324
13325 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13326   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13327 #endif
13328
13329   /* This function exists in static storage.
13330      (This does not mean `static' in the C sense!)  */
13331   TREE_STATIC (decl1) = 1;
13332
13333   /* We must call push_template_decl after current_class_type is set
13334      up.  (If we are processing inline definitions after exiting a
13335      class scope, current_class_type will be NULL_TREE until set above
13336      by push_nested_class.)  */
13337   if (processing_template_decl)
13338     decl1 = push_template_decl (decl1);
13339
13340   /* We are now in the scope of the function being defined.  */
13341   current_function_decl = decl1;
13342
13343   /* Save the parm names or decls from this function's declarator
13344      where store_parm_decls will find them.  */
13345   current_function_parms = last_function_parms;
13346   current_function_parm_tags = last_function_parm_tags;
13347
13348   /* Make sure the parameter and return types are reasonable.  When
13349      you declare a function, these types can be incomplete, but they
13350      must be complete when you define the function.  */
13351   if (! processing_template_decl)
13352     check_function_type (decl1);
13353
13354   /* Build the return declaration for the function.  */
13355   restype = TREE_TYPE (fntype);
13356   if (!processing_template_decl)
13357     {
13358       if (!DECL_RESULT (decl1))
13359         {
13360           DECL_RESULT (decl1)
13361             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13362           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13363                                       DECL_RESULT (decl1));
13364         }
13365     }
13366   else
13367     /* Just use `void'.  Nobody will ever look at this anyhow.  */
13368     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13369
13370   /* Initialize RTL machinery.  We cannot do this until
13371      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13372      even when processing a template; this is how we get
13373      CFUN set up, and our per-function variables initialized.  */
13374   bl = current_binding_level;
13375   init_function_start (decl1, input_filename, lineno);
13376   current_binding_level = bl;
13377   expanding_p = (flags & SF_EXPAND) != 0;
13378
13379   /* Even though we're inside a function body, we still don't want to
13380      call expand_expr to calculate the size of a variable-sized array.
13381      We haven't necessarily assigned RTL to all variables yet, so it's
13382      not safe to try to expand expressions involving them.  */
13383   immediate_size_expand = 0;
13384   cfun->x_dont_save_pending_sizes_p = 1;
13385
13386   /* If we're building a statement-tree, start the tree now.  */
13387   if (processing_template_decl || !expanding_p)
13388     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13389
13390   /* Let the user know we're compiling this function.  */
13391   if (processing_template_decl || !building_stmt_tree ())
13392     announce_function (decl1);
13393
13394   /* Record the decl so that the function name is defined.
13395      If we already have a decl for this name, and it is a FUNCTION_DECL,
13396      use the old decl.  */
13397   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13398     {
13399       /* A specialization is not used to guide overload resolution.  */
13400       if ((flag_guiding_decls
13401            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13402           && ! DECL_FUNCTION_MEMBER_P (decl1))
13403         decl1 = pushdecl (decl1);
13404       else
13405         {
13406           /* We need to set the DECL_CONTEXT. */
13407           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13408             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13409           /* And make sure we have enough default args.  */
13410           check_default_args (decl1);
13411         }
13412       fntype = TREE_TYPE (decl1);
13413     }
13414
13415   /* Reset these in case the call to pushdecl changed them.  */
13416   current_function_decl = decl1;
13417   cfun->decl = decl1;
13418
13419   /* Initialize the per-function data.  */
13420   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13421     {
13422       /* If we already parsed this function, and we're just expanding it
13423          now, restore saved state.  */
13424       struct binding_level *bl = current_binding_level;
13425       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13426       current_binding_level = bl;
13427
13428       /* This function is being processed in whole-function mode; we
13429          already did semantic analysis.  */
13430       cfun->x_whole_function_mode_p = 1;
13431
13432       /* If we decided that we didn't want to inline this function,
13433          make sure the back-end knows that.  */
13434       if (!current_function_cannot_inline)
13435         current_function_cannot_inline = cp_function_chain->cannot_inline;
13436
13437       /* We don't need the saved data anymore.  */
13438       free (DECL_SAVED_FUNCTION_DATA (decl1));
13439       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13440     }
13441   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13442     {
13443       /* We know that this was set up by `grokclassfn'.  We do not
13444          wait until `store_parm_decls', since evil parse errors may
13445          never get us to that point.  Here we keep the consistency
13446          between `current_class_type' and `current_class_ptr'.  */
13447       tree t = DECL_ARGUMENTS (decl1);
13448
13449       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13450                           162);
13451       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13452                           19990811);
13453
13454       cp_function_chain->x_current_class_ref
13455         = build_indirect_ref (t, NULL_PTR);
13456       cp_function_chain->x_current_class_ptr = t;
13457
13458       /* Constructors and destructors need to know whether they're "in
13459          charge" of initializing virtual base classes.  */
13460       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13461         current_in_charge_parm = TREE_CHAIN (t);
13462     }
13463
13464   if (DECL_INTERFACE_KNOWN (decl1))
13465     {
13466       tree ctx = decl_function_context (decl1);
13467
13468       if (DECL_NOT_REALLY_EXTERN (decl1))
13469         DECL_EXTERNAL (decl1) = 0;
13470
13471       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13472           && TREE_PUBLIC (ctx))
13473         /* This is a function in a local class in an extern inline
13474            function.  */
13475         comdat_linkage (decl1);
13476     }
13477   /* If this function belongs to an interface, it is public.
13478      If it belongs to someone else's interface, it is also external.
13479      This only affects inlines and template instantiations.  */
13480   else if (interface_unknown == 0
13481            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13482                || flag_alt_external_templates))
13483     {
13484       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13485           || processing_template_decl)
13486         {
13487           DECL_EXTERNAL (decl1)
13488             = (interface_only
13489                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13490                    && !DECL_VINDEX (decl1)));
13491
13492           /* For WIN32 we also want to put these in linkonce sections.  */
13493           maybe_make_one_only (decl1);
13494         }
13495       else
13496         DECL_EXTERNAL (decl1) = 0;
13497       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13498       DECL_INTERFACE_KNOWN (decl1) = 1;
13499     }
13500   else if (interface_unknown && interface_only
13501            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13502                || flag_alt_external_templates))
13503     {
13504       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13505          interface, we will have interface_only set but not
13506          interface_known.  In that case, we don't want to use the normal
13507          heuristics because someone will supply a #pragma implementation
13508          elsewhere, and deducing it here would produce a conflict.  */
13509       comdat_linkage (decl1);
13510       DECL_EXTERNAL (decl1) = 0;
13511       DECL_INTERFACE_KNOWN (decl1) = 1;
13512       DECL_DEFER_OUTPUT (decl1) = 1;
13513     }
13514   else
13515     {
13516       /* This is a definition, not a reference.
13517          So clear DECL_EXTERNAL.  */
13518       DECL_EXTERNAL (decl1) = 0;
13519
13520       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13521           && ! DECL_INTERFACE_KNOWN (decl1)
13522           /* Don't try to defer nested functions for now.  */
13523           && ! decl_function_context (decl1))
13524         DECL_DEFER_OUTPUT (decl1) = 1;
13525       else
13526         DECL_INTERFACE_KNOWN (decl1) = 1;
13527     }
13528
13529   if (doing_semantic_analysis_p ())
13530     {
13531       pushlevel (0);
13532       current_binding_level->parm_flag = 1;
13533     }
13534
13535   if (attrs)
13536     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13537
13538   if (!building_stmt_tree ())
13539     {
13540       GNU_xref_function (decl1, current_function_parms);
13541       make_function_rtl (decl1);
13542     }
13543
13544   /* Promote the value to int before returning it.  */
13545   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13546     restype = type_promotes_to (restype);
13547
13548   /* If this fcn was already referenced via a block-scope `extern' decl
13549      (or an implicit decl), propagate certain information about the usage.  */
13550   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13551     TREE_ADDRESSABLE (decl1) = 1;
13552
13553   if (DECL_RESULT (decl1) == NULL_TREE)
13554     {
13555       DECL_RESULT (decl1)
13556         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13557       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13558       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13559     }
13560
13561   ++function_depth;
13562
13563   if (DECL_DESTRUCTOR_P (decl1))
13564     {
13565       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13566       DECL_CONTEXT (dtor_label) = current_function_decl;
13567     }
13568   /* Under the old ABI we return `this' from constructors, so we make
13569      ordinary `return' statements in constructors jump to CTOR_LABEL;
13570      from there we return `this'.  Under the new ABI, we don't bother
13571      with any of this.  By not setting CTOR_LABEL the remainder of the
13572      machinery is automatically disabled.  */
13573   else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
13574     {
13575       ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13576       DECL_CONTEXT (ctor_label) = current_function_decl;
13577     }
13578
13579   return 1;
13580 }
13581 \f
13582 /* Called after store_parm_decls for a function-try-block.  */
13583
13584 void
13585 expand_start_early_try_stmts ()
13586 {
13587   expand_start_try_stmts ();
13588 }
13589
13590 /* Store the parameter declarations into the current function declaration.
13591    This is called after parsing the parameter declarations, before
13592    digesting the body of the function.
13593
13594    Also install to binding contour return value identifier, if any.  */
13595
13596 void
13597 store_parm_decls ()
13598 {
13599   register tree fndecl = current_function_decl;
13600   register tree parm;
13601   int parms_have_cleanups = 0;
13602   tree cleanups = NULL_TREE;
13603
13604   /* This is a list of types declared among parms in a prototype.  */
13605   tree parmtags = current_function_parm_tags;
13606
13607   /* This is a chain of any other decls that came in among the parm
13608      declarations.  If a parm is declared with  enum {foo, bar} x;
13609      then CONST_DECLs for foo and bar are put here.  */
13610   tree nonparms = NULL_TREE;
13611
13612   /* Create a binding level for the parms.  */
13613   if (!building_stmt_tree ())
13614     expand_start_bindings (2);
13615
13616   if (current_function_parms)
13617     {
13618       /* This case is when the function was defined with an ANSI prototype.
13619          The parms already have decls, so we need not do anything here
13620          except record them as in effect
13621          and complain if any redundant old-style parm decls were written.  */
13622
13623       tree specparms = current_function_parms;
13624       tree next;
13625
13626       if (doing_semantic_analysis_p ())
13627         {
13628           /* Must clear this because it might contain TYPE_DECLs declared
13629              at class level.  */
13630           storedecls (NULL_TREE);
13631
13632           /* If we're doing semantic analysis, then we'll call pushdecl
13633              for each of these.  We must do them in reverse order so that
13634              they end in the correct forward order.  */
13635           specparms = nreverse (specparms);
13636         }
13637
13638       for (parm = specparms; parm; parm = next)
13639         {
13640           next = TREE_CHAIN (parm);
13641           if (TREE_CODE (parm) == PARM_DECL)
13642             {
13643               tree type = TREE_TYPE (parm);
13644
13645               if (doing_semantic_analysis_p ())
13646                 {
13647                   tree cleanup;
13648
13649                   if (DECL_NAME (parm) == NULL_TREE
13650                       || TREE_CODE (parm) != VOID_TYPE)
13651                     pushdecl (parm);
13652                   else
13653                     cp_error ("parameter `%D' declared void", parm);
13654
13655                   cleanup = (processing_template_decl 
13656                              ? NULL_TREE
13657                              : maybe_build_cleanup (parm));
13658
13659                   if (cleanup)
13660                     cleanups = tree_cons (parm, cleanup, cleanups);
13661                 }
13662               else if (type != error_mark_node
13663                        && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13664                 parms_have_cleanups = 1;
13665             }
13666           else
13667             {
13668               /* If we find an enum constant or a type tag,
13669                  put it aside for the moment.  */
13670               TREE_CHAIN (parm) = NULL_TREE;
13671               nonparms = chainon (nonparms, parm);
13672             }
13673         }
13674
13675       if (doing_semantic_analysis_p ())
13676         {
13677           /* Get the decls in their original chain order
13678              and record in the function.  This is all and only the
13679              PARM_DECLs that were pushed into scope by the loop above.  */
13680           DECL_ARGUMENTS (fndecl) = getdecls ();
13681           storetags (chainon (parmtags, gettags ()));
13682         }
13683     }
13684   else
13685     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13686
13687   /* Now store the final chain of decls for the arguments
13688      as the decl-chain of the current lexical scope.
13689      Put the enumerators in as well, at the front so that
13690      DECL_ARGUMENTS is not modified.  */
13691   if (doing_semantic_analysis_p ())
13692     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13693
13694   /* Initialize the RTL code for the function.  */
13695   DECL_SAVED_INSNS (fndecl) = 0;
13696   if (! building_stmt_tree ())
13697     expand_function_start (fndecl, parms_have_cleanups);
13698
13699   current_function_parms_stored = 1;
13700
13701   /* If this function is `main', emit a call to `__main'
13702      to run global initializers, etc.  */
13703   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13704     expand_main_function ();
13705
13706   /* Now that we have initialized the parms, we can start their
13707      cleanups.  We cannot do this before, since expand_decl_cleanup
13708      should not be called before the parm can be used.  */
13709   while (cleanups)
13710     {
13711       finish_decl_cleanup (TREE_PURPOSE (cleanups),
13712                            TREE_VALUE (cleanups));
13713       cleanups = TREE_CHAIN (cleanups);
13714     }
13715
13716   /* Create a binding contour which can be used to catch
13717      cleanup-generated temporaries.  Also, if the return value needs or
13718      has initialization, deal with that now.  */
13719   if (parms_have_cleanups)
13720     {
13721       pushlevel (0);
13722       if (!building_stmt_tree ())
13723         expand_start_bindings (2);
13724     }
13725
13726   /* Do the starting of the exception specifications, if we have any.  */
13727   if (flag_exceptions && !processing_template_decl
13728       && flag_enforce_eh_specs
13729       && building_stmt_tree ()
13730       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13731     current_eh_spec_try_block = expand_start_eh_spec ();
13732 }
13733
13734 /* Bind a name and initialization to the return value of
13735    the current function.  */
13736
13737 void
13738 store_return_init (decl)
13739      tree decl;
13740 {
13741   /* If this named return value comes in a register, put it in a
13742      pseudo-register.  */
13743   if (DECL_REGISTER (decl))
13744     {
13745       original_result_rtx = DECL_RTL (decl);
13746       /* Note that the mode of the old DECL_RTL may be wider than the
13747          mode of DECL_RESULT, depending on the calling conventions for
13748          the processor.  For example, on the Alpha, a 32-bit integer
13749          is returned in a DImode register -- the DECL_RESULT has
13750          SImode but the DECL_RTL for the DECL_RESULT has DImode.  So,
13751          here, we use the mode the back-end has already assigned for
13752          the return value.  */
13753       DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
13754     }
13755 }
13756
13757 \f
13758 /* We have finished doing semantic analysis on DECL, but have not yet
13759    generated RTL for its body.  Save away our current state, so that
13760    when we want to generate RTL later we know what to do.  */
13761
13762 static void
13763 save_function_data (decl)
13764      tree decl;
13765 {
13766   struct language_function *f;
13767
13768   /* Save the language-specific per-function data so that we can
13769      get it back when we really expand this function.  */
13770   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13771                       19990908);
13772
13773   /* Make a copy.  */
13774   f = ((struct language_function *)
13775        xmalloc (sizeof (struct language_function)));
13776   bcopy ((char *) cp_function_chain, (char *) f,
13777          sizeof (struct language_function));
13778   DECL_SAVED_FUNCTION_DATA (decl) = f;
13779
13780   /* Clear out the bits we don't need.  */
13781   f->x_base_init_list = NULL_TREE;
13782   f->x_member_init_list = NULL_TREE;
13783   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13784   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13785   f->x_result_rtx = NULL_RTX;
13786   f->x_named_label_uses = NULL;
13787   f->bindings = NULL;
13788
13789   /* When we get back here again, we will be expanding.  */
13790   f->x_expanding_p = 1;
13791
13792   /* If we've already decided that we cannot inline this function, we
13793      must remember that fact when we actually go to expand the
13794      function.  */
13795   f->cannot_inline = current_function_cannot_inline;
13796 }
13797
13798 /* At the end of every constructor we generate to code to return
13799    `this'.  Do that now.  */
13800
13801 static void
13802 finish_constructor_body ()
13803 {
13804   /* Any return from a constructor will end up here.  */
13805   if (ctor_label)
13806     add_tree (build_min_nt (LABEL_STMT, ctor_label));
13807
13808   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13809      generate the return, rather than a goto to CTOR_LABEL.  */
13810   ctor_label = NULL_TREE;
13811   /* In check_return_expr we translate an empty return from a
13812      constructor to a return of `this'.  */
13813   finish_return_stmt (NULL_TREE);
13814   /* Mark the end of the constructor.  */
13815   add_tree (build_min_nt (CTOR_STMT));
13816 }
13817
13818 /* At the end of every destructor we generate code to restore virtual
13819    function tables to the values desired by base classes and to call
13820    to base class destructors.  Do that now.  */
13821
13822 static void
13823 finish_destructor_body ()
13824 {
13825   tree compound_stmt;
13826   tree virtual_size;
13827   tree exprstmt;
13828   tree if_stmt;
13829
13830   /* Create a block to contain all the extra code.  */
13831   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13832
13833   /* Any return from a destructor will end up here.  */
13834   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13835
13836   /* Generate the code to call destructor on base class.  If this
13837      destructor belongs to a class with virtual functions, then set
13838      the virtual function table pointer to represent the type of our
13839      base class.  */
13840
13841   /* This side-effect makes call to `build_delete' generate the code
13842      we have to have at the end of this destructor.  `build_delete'
13843      will set the flag again.  */
13844   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13845
13846   exprstmt = build_delete (current_class_type,
13847                            current_class_ref,
13848                            integer_zero_node,
13849                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13850                            0);
13851
13852   if (exprstmt != error_mark_node
13853       && (TREE_CODE (exprstmt) != NOP_EXPR
13854           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13855           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13856     {
13857       if (exprstmt != void_zero_node)
13858         /* Don't call `expand_expr_stmt' if we're not going to do
13859            anything, since -Wall will give a diagnostic.  */
13860         finish_expr_stmt (exprstmt);
13861
13862       /* Run destructors for all virtual baseclasses.  */
13863       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13864         {
13865           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13866           tree if_stmt = begin_if_stmt ();
13867           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13868                                       current_in_charge_parm,
13869                                       integer_two_node),
13870                                if_stmt);
13871
13872           while (vbases)
13873             {
13874               if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbases)))
13875                 {
13876                   tree vb = get_vbase
13877                     (BINFO_TYPE (vbases),
13878                      TYPE_BINFO (current_class_type));
13879                   finish_expr_stmt
13880                     (build_scoped_method_call
13881                      (current_class_ref, vb, base_dtor_identifier,
13882                       NULL_TREE));
13883                 }
13884               vbases = TREE_CHAIN (vbases);
13885             }
13886
13887           finish_then_clause (if_stmt);
13888           finish_if_stmt ();
13889         }
13890     }
13891
13892   virtual_size = c_sizeof (current_class_type);
13893
13894   /* At the end, call delete if that's what's requested.  */
13895
13896   /* FDIS sez: At the point of definition of a virtual destructor
13897      (including an implicit definition), non-placement operator delete
13898      shall be looked up in the scope of the destructor's class and if
13899      found shall be accessible and unambiguous.
13900
13901      This is somewhat unclear, but I take it to mean that if the class
13902      only defines placement deletes we don't do anything here.  So we
13903      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13904      they ever try to delete one of these.  */
13905   exprstmt = build_op_delete_call
13906     (DELETE_EXPR, current_class_ptr, virtual_size,
13907      LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13908
13909   if_stmt = begin_if_stmt ();
13910   finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13911                               current_in_charge_parm,
13912                               integer_one_node),
13913                        if_stmt);
13914   finish_expr_stmt (exprstmt);
13915   finish_then_clause (if_stmt);
13916   finish_if_stmt ();
13917
13918   /* Close the block we started above.  */
13919   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13920 }
13921
13922 /* Finish up a function declaration and compile that function
13923    all the way to assembler language output.  The free the storage
13924    for the function definition.
13925
13926    FLAGS is a bitwise or of the following values:
13927      1 - CALL_POPLEVEL
13928        An extra call to poplevel (and expand_end_bindings) must be
13929        made to take care of the binding contour for the base
13930        initializers.  This is only relevant for constructors.
13931      2 - INCLASS_INLINE
13932        We just finished processing the body of an in-class inline
13933        function definition.  (This processing will have taken place
13934        after the class definition is complete.)  */
13935
13936 tree
13937 finish_function (flags)
13938      int flags;
13939 {
13940   register tree fndecl = current_function_decl;
13941   tree fntype, ctype = NULL_TREE;
13942   /* Label to use if this function is supposed to return a value.  */
13943   tree no_return_label = NULL_TREE;
13944   int call_poplevel = (flags & 1) != 0;
13945   int inclass_inline = (flags & 2) != 0;
13946   int expand_p;
13947   int nested;
13948   int current_line = lineno;
13949
13950   /* When we get some parse errors, we can end up without a
13951      current_function_decl, so cope.  */
13952   if (fndecl == NULL_TREE)
13953     return error_mark_node;
13954
13955   nested = function_depth > 1;
13956   fntype = TREE_TYPE (fndecl);
13957
13958   /*  TREE_READONLY (fndecl) = 1;
13959       This caused &foo to be of type ptr-to-const-function
13960       which then got a warning when stored in a ptr-to-function variable.  */
13961
13962   /* This happens on strange parse errors.  */
13963   if (! current_function_parms_stored)
13964     {
13965       call_poplevel = 0;
13966       store_parm_decls ();
13967     }
13968
13969   /* For a cloned function, we've already got all the code we need;
13970      there's no need to add any extra bits.  */
13971   if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13972     ;
13973   else if (building_stmt_tree ())
13974     {
13975       if (DECL_CONSTRUCTOR_P (fndecl))
13976         {
13977           finish_constructor_body ();
13978           if (call_poplevel)
13979             do_poplevel ();
13980         }
13981       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13982         finish_destructor_body ();
13983       else if (DECL_MAIN_P (fndecl))
13984         {
13985           /* Make it so that `main' always returns 0 by default.  */
13986 #ifdef VMS
13987           finish_return_stmt (integer_one_node);
13988 #else
13989           finish_return_stmt (integer_zero_node);
13990 #endif
13991         }
13992
13993       /* Finish dealing with exception specifiers.  */
13994       if (flag_exceptions && !processing_template_decl
13995           && flag_enforce_eh_specs
13996           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13997         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
13998                             (TREE_TYPE (current_function_decl)),
13999                             current_eh_spec_try_block);
14000     }
14001   else
14002     {
14003 #if 0
14004       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
14005         {
14006           /* Keep this code around in case we later want to control debug info
14007              based on whether a type is "used".  (jason 1999-11-11) */
14008
14009           tree ttype = target_type (fntype);
14010           tree parmdecl;
14011
14012           if (IS_AGGR_TYPE (ttype))
14013             /* Let debugger know it should output info for this type.  */
14014             note_debug_info_needed (ttype);
14015
14016           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14017             {
14018               ttype = target_type (TREE_TYPE (parmdecl));
14019               if (IS_AGGR_TYPE (ttype))
14020                 /* Let debugger know it should output info for this type.  */
14021                 note_debug_info_needed (ttype);
14022             }
14023         }
14024 #endif
14025
14026       /* Clean house because we will need to reorder insns here.  */
14027       do_pending_stack_adjust ();
14028
14029       if (dtor_label)
14030         ;
14031       else if (DECL_CONSTRUCTOR_P (fndecl))
14032         {
14033           if (call_poplevel)
14034             do_poplevel ();
14035         }
14036       else if (return_label != NULL_RTX
14037                && flag_this_is_variable <= 0
14038                && current_function_return_value == NULL_TREE
14039                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14040         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14041
14042       if (flag_exceptions)
14043         expand_exception_blocks ();
14044
14045       /* If this function is supposed to return a value, ensure that
14046          we do not fall into the cleanups by mistake.  The end of our
14047          function will look like this:
14048
14049          user code (may have return stmt somewhere)
14050          goto no_return_label
14051          cleanup_label:
14052          cleanups
14053          goto return_label
14054          no_return_label:
14055          NOTE_INSN_FUNCTION_END
14056          return_label:
14057          things for return
14058
14059          If the user omits a return stmt in the USER CODE section, we
14060          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14061          Otherwise, we won't.  */
14062       if (no_return_label)
14063         {
14064           DECL_CONTEXT (no_return_label) = fndecl;
14065           DECL_INITIAL (no_return_label) = error_mark_node;
14066           DECL_SOURCE_FILE (no_return_label) = input_filename;
14067           DECL_SOURCE_LINE (no_return_label) = current_line;
14068           expand_goto (no_return_label);
14069         }
14070
14071       if (cleanup_label)
14072         {
14073           /* Remove the binding contour which is used
14074              to catch cleanup-generated temporaries.  */
14075           expand_end_bindings (0, 0, 0);
14076           poplevel (0, 0, 0);
14077
14078           /* Emit label at beginning of cleanup code for parameters.  */
14079           emit_label (cleanup_label);
14080         }
14081
14082       /* Get return value into register if that's where it's supposed
14083          to be.  */
14084       if (original_result_rtx)
14085         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14086
14087       /* Finish building code that will trigger warnings if users forget
14088          to make their functions return values.  */
14089       if (no_return_label || cleanup_label)
14090         emit_jump (return_label);
14091       if (no_return_label)
14092         {
14093           /* We don't need to call `expand_*_return' here because we
14094              don't need any cleanups here--this path of code is only
14095              for error checking purposes.  */
14096           expand_label (no_return_label);
14097         }
14098
14099       /* We hard-wired immediate_size_expand to zero in
14100          start_function.  Expand_function_end will decrement this
14101          variable.  So, we set the variable to one here, so that after
14102          the decrement it will remain zero.  */
14103       immediate_size_expand = 1;
14104
14105       /* Generate rtl for function exit.  */
14106       expand_function_end (input_filename, current_line, 1);
14107     }
14108
14109   /* We have to save this value here in case
14110      maybe_end_member_template_processing decides to pop all the
14111      template parameters.  */
14112   expand_p = !building_stmt_tree ();
14113
14114   /* If we're saving up tree structure, tie off the function now.  */
14115   if (!expand_p)
14116     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14117
14118   /* This must come after expand_function_end because cleanups might
14119      have declarations (from inline functions) that need to go into
14120      this function's blocks.  */
14121   if (doing_semantic_analysis_p ())
14122     {
14123       if (current_binding_level->parm_flag != 1)
14124         my_friendly_abort (122);
14125       poplevel (1, 0, 1);
14126     }
14127
14128   /* Remember that we were in class scope.  */
14129   if (current_class_name)
14130     ctype = current_class_type;
14131
14132   /* Must mark the RESULT_DECL as being in this function.  */
14133   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14134
14135   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14136      to the FUNCTION_DECL node itself.  */
14137   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14138
14139   /* Save away current state, if appropriate.  */
14140   if (!expanding_p && !processing_template_decl)
14141     save_function_data (fndecl);
14142
14143   /* If this function calls `setjmp' it cannot be inlined.  When
14144      `longjmp' is called it is not guaranteed to restore the value of
14145      local variables that have been modified since the call to
14146      `setjmp'.  So, if were to inline this function into some caller
14147      `c', then when we `longjmp', we might not restore all variables
14148      in `c'.  (It might seem, at first blush, that there's no way for
14149      this function to modify local variables in `c', but their
14150      addresses may have been stored somewhere accessible to this
14151      function.)  */
14152   if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14153     DECL_UNINLINABLE (fndecl) = 1;
14154
14155   if (expand_p)
14156     {
14157       int returns_null;
14158       int returns_value;
14159
14160       /* So we can tell if jump_optimize sets it to 1.  */
14161       can_reach_end = 0;
14162
14163       /* Before we call rest_of_compilation (which will pop the
14164          CURRENT_FUNCTION), we must save these values.  */
14165       returns_null = current_function_returns_null;
14166       returns_value = current_function_returns_value;
14167
14168       /* If this is a nested function (like a template instantiation
14169          that we're compiling in the midst of compiling something
14170          else), push a new GC context.  That will keep local variables
14171          on the stack from being collected while we're doing the
14172          compilation of this function.  */
14173       if (function_depth > 1)
14174         ggc_push_context ();
14175
14176       /* Run the optimizers and output the assembler code for this
14177          function.  */
14178       rest_of_compilation (fndecl);
14179
14180       /* Undo the call to ggc_push_context above.  */
14181       if (function_depth > 1)
14182         ggc_pop_context ();
14183
14184       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14185         {
14186           /* Set DECL_EXTERNAL so that assemble_external will be called as
14187              necessary.  We'll clear it again in finish_file.  */
14188           if (! DECL_EXTERNAL (fndecl))
14189             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14190           DECL_EXTERNAL (fndecl) = 1;
14191           defer_fn (fndecl);
14192         }
14193
14194 #if 0
14195       /* Keep this code around in case we later want to control debug info
14196          based on whether a type is "used".  (jason 1999-11-11) */
14197
14198       if (ctype && TREE_ASM_WRITTEN (fndecl))
14199         note_debug_info_needed (ctype);
14200 #endif
14201
14202       returns_null |= can_reach_end;
14203
14204       /* Since we don't normally go through c_expand_return for constructors,
14205          this normally gets the wrong value.
14206          Also, named return values have their return codes emitted after
14207          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14208       if (DECL_CONSTRUCTOR_P (fndecl)
14209           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14210         returns_null = 0;
14211
14212       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
14213         cp_warning ("`noreturn' function `%D' does return", fndecl);
14214       else if ((warn_return_type || pedantic)
14215                && returns_null
14216                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14217         {
14218           /* If this function returns non-void and control can drop through,
14219              complain.  */
14220           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14221         }
14222       /* With just -W, complain only if function returns both with
14223          and without a value.  */
14224       else if (extra_warnings && returns_value && returns_null)
14225         warning ("this function may return with or without a value");
14226     }
14227   else
14228     {
14229       /* Clear out memory we no longer need.  */
14230       free_after_parsing (cfun);
14231       /* Since we never call rest_of_compilation, we never clear
14232          CFUN.  Do so explicitly.  */
14233       free_after_compilation (cfun);
14234       cfun = NULL;
14235     }
14236
14237   /* If this is a in-class inline definition, we may have to pop the
14238      bindings for the template parameters that we added in
14239      maybe_begin_member_template_processing when start_function was
14240      called.  */
14241   if (inclass_inline)
14242     maybe_end_member_template_processing ();
14243
14244   /* Leave the scope of the class.  */
14245   if (ctype)
14246     pop_nested_class ();
14247
14248   --function_depth;
14249
14250   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14251       && !(flag_inline_trees && DECL_INLINE (fndecl)))
14252     {
14253       tree t;
14254
14255       /* Stop pointing to the local nodes about to be freed.  */
14256       /* But DECL_INITIAL must remain nonzero so we know this
14257          was an actual function definition.  */
14258       DECL_INITIAL (fndecl) = error_mark_node;
14259       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14260         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14261     }
14262
14263   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14264     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14265   if (DECL_STATIC_DESTRUCTOR (fndecl))
14266     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14267
14268   /* Clean up.  */
14269   if (! nested)
14270     {
14271       /* Let the error reporting routines know that we're outside a
14272          function.  For a nested function, this value is used in
14273          pop_cp_function_context and then reset via pop_function_context.  */
14274       current_function_decl = NULL_TREE;
14275       /* We don't really care about obstacks, but the middle-end
14276          sometimes cares on what obstck things are located.  */
14277       permanent_allocation (1);
14278     }
14279
14280   return fndecl;
14281 }
14282 \f
14283 /* Create the FUNCTION_DECL for a function definition.
14284    DECLSPECS and DECLARATOR are the parts of the declaration;
14285    they describe the return type and the name of the function,
14286    but twisted together in a fashion that parallels the syntax of C.
14287
14288    This function creates a binding context for the function body
14289    as well as setting up the FUNCTION_DECL in current_function_decl.
14290
14291    Returns a FUNCTION_DECL on success.
14292
14293    If the DECLARATOR is not suitable for a function (it defines a datum
14294    instead), we return 0, which tells yyparse to report a parse error.
14295
14296    May return void_type_node indicating that this method is actually
14297    a friend.  See grokfield for more details.
14298
14299    Came here with a `.pushlevel' .
14300
14301    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14302    CHANGES TO CODE IN `grokfield'.  */
14303
14304 tree
14305 start_method (declspecs, declarator, attrlist)
14306      tree declarator, declspecs, attrlist;
14307 {
14308   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14309                                 attrlist);
14310
14311   /* Something too ugly to handle.  */
14312   if (fndecl == NULL_TREE)
14313     return NULL_TREE;
14314
14315   /* Pass friends other than inline friend functions back.  */
14316   if (fndecl == void_type_node)
14317     return fndecl;
14318
14319   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14320     /* Not a function, tell parser to report parse error.  */
14321     return NULL_TREE;
14322
14323   if (DECL_IN_AGGR_P (fndecl))
14324     {
14325       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14326         {
14327           if (DECL_CONTEXT (fndecl)
14328               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14329             cp_error ("`%D' is already defined in class %s", fndecl,
14330                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14331         }
14332       return void_type_node;
14333     }
14334
14335   check_template_shadow (fndecl);
14336
14337   DECL_THIS_INLINE (fndecl) = 1;
14338
14339   if (flag_default_inline)
14340     DECL_INLINE (fndecl) = 1;
14341
14342   /* We process method specializations in finish_struct_1.  */
14343   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14344     fndecl = push_template_decl (fndecl);
14345
14346   if (! DECL_FRIEND_P (fndecl))
14347     {
14348       if (TREE_CHAIN (fndecl))
14349         {
14350           fndecl = copy_node (fndecl);
14351           TREE_CHAIN (fndecl) = NULL_TREE;
14352         }
14353
14354       if (DECL_CONSTRUCTOR_P (fndecl))
14355         {
14356           if (! grok_ctor_properties (current_class_type, fndecl))
14357             return void_type_node;
14358         }
14359       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14360         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14361     }
14362
14363   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14364
14365   /* Make a place for the parms */
14366   pushlevel (0);
14367   current_binding_level->parm_flag = 1;
14368
14369   DECL_IN_AGGR_P (fndecl) = 1;
14370   return fndecl;
14371 }
14372
14373 /* Go through the motions of finishing a function definition.
14374    We don't compile this method until after the whole class has
14375    been processed.
14376
14377    FINISH_METHOD must return something that looks as though it
14378    came from GROKFIELD (since we are defining a method, after all).
14379
14380    This is called after parsing the body of the function definition.
14381    STMTS is the chain of statements that makes up the function body.
14382
14383    DECL is the ..._DECL that `start_method' provided.  */
14384
14385 tree
14386 finish_method (decl)
14387      tree decl;
14388 {
14389   register tree fndecl = decl;
14390   tree old_initial;
14391
14392   register tree link;
14393
14394   if (decl == void_type_node)
14395     return decl;
14396
14397   old_initial = DECL_INITIAL (fndecl);
14398
14399   /* Undo the level for the parms (from start_method).
14400      This is like poplevel, but it causes nothing to be
14401      saved.  Saving information here confuses symbol-table
14402      output routines.  Besides, this information will
14403      be correctly output when this method is actually
14404      compiled.  */
14405
14406   /* Clear out the meanings of the local variables of this level;
14407      also record in each decl which block it belongs to.  */
14408
14409   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14410     {
14411       if (DECL_NAME (link) != NULL_TREE)
14412         pop_binding (DECL_NAME (link), link);
14413       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14414       DECL_CONTEXT (link) = NULL_TREE;
14415     }
14416
14417   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14418                       (HOST_WIDE_INT) current_binding_level->level_chain,
14419                       current_binding_level->parm_flag,
14420                       current_binding_level->keep);
14421
14422   poplevel (0, 0, 0);
14423
14424   DECL_INITIAL (fndecl) = old_initial;
14425
14426   /* We used to check if the context of FNDECL was different from
14427      current_class_type as another way to get inside here.  This didn't work
14428      for String.cc in libg++.  */
14429   if (DECL_FRIEND_P (fndecl))
14430     {
14431       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14432         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14433       decl = void_type_node;
14434     }
14435
14436   return decl;
14437 }
14438 \f
14439 /* Called when a new struct TYPE is defined.
14440    If this structure or union completes the type of any previous
14441    variable declaration, lay it out and output its rtl.  */
14442
14443 void
14444 hack_incomplete_structures (type)
14445      tree type;
14446 {
14447   tree *list;
14448   struct binding_level *level;
14449
14450   if (!type) /* Don't do this for class templates.  */
14451     return;
14452
14453   if (namespace_bindings_p ())
14454     {
14455       level = 0;
14456       list = &namespace_scope_incomplete;
14457     }
14458   else
14459     {
14460       level = innermost_nonclass_level ();
14461       list = &level->incomplete;
14462     }
14463
14464   while (1)
14465     {
14466       while (*list)
14467         {
14468           tree decl = TREE_VALUE (*list);
14469           if ((decl && TREE_TYPE (decl) == type)
14470               || (TREE_TYPE (decl)
14471                   && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14472                   && TREE_TYPE (TREE_TYPE (decl)) == type))
14473             {
14474               int toplevel = toplevel_bindings_p ();
14475               if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14476                   && TREE_TYPE (TREE_TYPE (decl)) == type)
14477                 layout_type (TREE_TYPE (decl));
14478               layout_decl (decl, 0);
14479               rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14480               if (! toplevel)
14481                 {
14482                   tree cleanup;
14483                   expand_decl (decl);
14484                   cleanup = maybe_build_cleanup (decl);
14485                   expand_decl_init (decl);
14486                   if (! expand_decl_cleanup (decl, cleanup))
14487                     cp_error ("parser lost in parsing declaration of `%D'",
14488                               decl);
14489                 }
14490               *list = TREE_CHAIN (*list);
14491             }
14492           else
14493             list = &TREE_CHAIN (*list);
14494         }
14495
14496       /* Keep looking through artificial binding levels generated
14497          for local variables.  */
14498       if (level && level->keep == 2)
14499         {
14500           level = level->level_chain;
14501           list = &level->incomplete;
14502         }
14503       else
14504         break;
14505     }
14506 }
14507
14508 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14509    See build_delete for information about AUTO_DELETE.  */
14510
14511 static tree
14512 maybe_build_cleanup_1 (decl, auto_delete)
14513      tree decl, auto_delete;
14514 {
14515   tree type = TREE_TYPE (decl);
14516   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14517     {
14518       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14519       tree rval;
14520
14521       if (TREE_CODE (type) == ARRAY_TYPE)
14522         rval = decl;
14523       else
14524         {
14525           mark_addressable (decl);
14526           rval = build_unary_op (ADDR_EXPR, decl, 0);
14527         }
14528
14529       /* Optimize for space over speed here.  */
14530       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14531           || flag_expensive_optimizations)
14532         flags |= LOOKUP_NONVIRTUAL;
14533
14534       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14535
14536       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14537           && ! TYPE_HAS_DESTRUCTOR (type))
14538         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14539                                                build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14540
14541       return rval;
14542     }
14543   return 0;
14544 }
14545
14546 /* If DECL is of a type which needs a cleanup, build that cleanup
14547    here.  The cleanup does not free the storage with a call a delete.  */
14548
14549 tree
14550 maybe_build_cleanup (decl)
14551      tree decl;
14552 {
14553   return maybe_build_cleanup_1 (decl, integer_two_node);
14554 }
14555 \f
14556 /* Expand a C++ expression at the statement level.
14557    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14558    The C++ type checker should get all of these out when
14559    expressions are combined with other, type-providing, expressions,
14560    leaving only orphan expressions, such as:
14561
14562    &class::bar;         / / takes its address, but does nothing with it.  */
14563
14564 void
14565 cplus_expand_expr_stmt (exp)
14566      tree exp;
14567 {
14568 #if 0
14569   /* We should do this eventually, but right now this causes regex.o from
14570      libg++ to miscompile, and tString to core dump.  */
14571   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14572 #endif
14573
14574   /* If we don't do this, we end up down inside expand_expr
14575      trying to do TYPE_MODE on the ERROR_MARK, and really
14576      go outside the bounds of the type.  */
14577   if (exp != error_mark_node)
14578     expand_expr_stmt (exp);
14579 }
14580
14581 /* When a stmt has been parsed, this function is called.  */
14582
14583 void
14584 finish_stmt ()
14585 {
14586   /* Always assume this statement was not an expression statement.  If
14587      it actually was an expression statement, its our callers
14588      responsibility to fix this up.  */
14589   last_expr_type = NULL_TREE;
14590 }
14591
14592 /* DECL was originally constructed as a non-static member function,
14593    but turned out to be static.  Update it accordingly.  */
14594
14595 void
14596 revert_static_member_fn (decl)
14597      tree decl;
14598 {
14599   tree tmp;
14600   tree function = TREE_TYPE (decl);
14601   tree args = TYPE_ARG_TYPES (function);
14602
14603   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14604       != TYPE_UNQUALIFIED)
14605     cp_error ("static member function `%#D' declared with type qualifiers",
14606               *decl);
14607
14608   args = TREE_CHAIN (args);
14609   tmp = build_function_type (TREE_TYPE (function), args);
14610   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14611   tmp = build_exception_variant (tmp,
14612                                  TYPE_RAISES_EXCEPTIONS (function));
14613   TREE_TYPE (decl) = tmp;
14614   if (DECL_ARGUMENTS (decl))
14615     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14616   DECL_STATIC_FUNCTION_P (decl) = 1;
14617 }
14618
14619 /* Initialize the variables used during compilation of a C++
14620    function.  */
14621
14622 static void
14623 push_cp_function_context (f)
14624      struct function *f;
14625 {
14626   struct language_function *p
14627     = ((struct language_function *)
14628        xcalloc (1, sizeof (struct language_function)));
14629   f->language = p;
14630
14631   /* It takes an explicit call to expand_body to generate RTL for a
14632      function.  */
14633   expanding_p = 0;
14634
14635   /* Whenever we start a new function, we destroy temporaries in the
14636      usual way.  */
14637   stmts_are_full_exprs_p = 1;
14638 }
14639
14640 /* Free the language-specific parts of F, now that we've finished
14641    compiling the function.  */
14642
14643 static void
14644 pop_cp_function_context (f)
14645      struct function *f;
14646 {
14647   if (f->language)
14648     free (f->language);
14649   f->language = 0;
14650 }
14651
14652 /* Mark P for GC.  */
14653
14654 static void
14655 mark_lang_function (p)
14656      struct language_function *p;
14657 {
14658   if (!p)
14659     return;
14660
14661   ggc_mark_tree (p->x_named_labels);
14662   ggc_mark_tree (p->x_ctor_label);
14663   ggc_mark_tree (p->x_dtor_label);
14664   ggc_mark_tree (p->x_base_init_list);
14665   ggc_mark_tree (p->x_member_init_list);
14666   ggc_mark_tree (p->x_current_class_ptr);
14667   ggc_mark_tree (p->x_current_class_ref);
14668   ggc_mark_tree (p->x_eh_spec_try_block);
14669   ggc_mark_tree (p->x_scope_stmt_stack);
14670
14671   ggc_mark_rtx (p->x_result_rtx);
14672
14673   mark_stmt_tree (&p->x_stmt_tree);
14674   mark_binding_level (&p->bindings);
14675 }
14676
14677 /* Mark the language-specific data in F for GC.  */
14678
14679 static void
14680 mark_cp_function_context (f)
14681      struct function *f;
14682 {
14683   mark_lang_function (f->language);
14684 }
14685
14686 void
14687 lang_mark_false_label_stack (l)
14688      struct label_node *l;
14689 {
14690   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14691   my_friendly_assert (l == NULL, 19990904);
14692 }
14693
14694 void
14695 lang_mark_tree (t)
14696      tree t;
14697 {
14698   enum tree_code code = TREE_CODE (t);
14699   if (code == IDENTIFIER_NODE)
14700     {
14701       struct lang_identifier *li = (struct lang_identifier *) t;
14702       struct lang_id2 *li2 = li->x;
14703       ggc_mark_tree (li->namespace_bindings);
14704       ggc_mark_tree (li->bindings);
14705       ggc_mark_tree (li->class_value);
14706       ggc_mark_tree (li->class_template_info);
14707
14708       if (li2)
14709         {
14710           ggc_mark_tree (li2->label_value);
14711           ggc_mark_tree (li2->implicit_decl);
14712           ggc_mark_tree (li2->error_locus);
14713         }
14714     }
14715   else if (code == CPLUS_BINDING)
14716     {
14717       if (BINDING_HAS_LEVEL_P (t))
14718         mark_binding_level (&BINDING_LEVEL (t));
14719       else
14720         ggc_mark_tree (BINDING_SCOPE (t));
14721       ggc_mark_tree (BINDING_VALUE (t));
14722     }
14723   else if (code == OVERLOAD)
14724     ggc_mark_tree (OVL_FUNCTION (t));
14725   else if (code == TEMPLATE_PARM_INDEX)
14726     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14727   else if (TREE_CODE_CLASS (code) == 'd')
14728     {
14729       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14730
14731       if (ld)
14732         {
14733           ggc_mark (ld);
14734           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14735             ggc_mark_tree (ld->decl_flags.u2.access);
14736           ggc_mark_tree (ld->decl_flags.context);
14737           if (TREE_CODE (t) != NAMESPACE_DECL)
14738             ggc_mark_tree (ld->decl_flags.u.template_info);
14739           else
14740             mark_binding_level (&NAMESPACE_LEVEL (t));
14741           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14742             {
14743               ggc_mark_tree (ld->befriending_classes);
14744               ggc_mark_tree (ld->saved_tree);
14745               ggc_mark_tree (ld->cloned_function);
14746               if (TREE_CODE (t) == TYPE_DECL)
14747                 ggc_mark_tree (ld->u.sorted_fields);
14748               else if (TREE_CODE (t) == FUNCTION_DECL
14749                        && !DECL_PENDING_INLINE_P (t))
14750                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14751             }
14752         }
14753     }
14754   else if (TREE_CODE_CLASS (code) == 't')
14755     {
14756       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14757
14758       if (lt && !(TREE_CODE (t) == POINTER_TYPE
14759                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14760         {
14761           ggc_mark (lt);
14762           ggc_mark_tree (lt->vfields);
14763           ggc_mark_tree (lt->vbases);
14764           ggc_mark_tree (lt->tags);
14765           ggc_mark_tree (lt->search_slot);
14766           ggc_mark_tree (lt->size);
14767           ggc_mark_tree (lt->pure_virtuals);
14768           ggc_mark_tree (lt->friend_classes);
14769           ggc_mark_tree (lt->rtti);
14770           ggc_mark_tree (lt->methods);
14771           ggc_mark_tree (lt->template_info);
14772           ggc_mark_tree (lt->befriending_classes);
14773         }
14774       else if (lt)
14775         /* In the case of pointer-to-member function types, the
14776            TYPE_LANG_SPECIFIC is really just a tree.  */
14777         ggc_mark_tree ((tree) lt);
14778     }
14779 }