OSDN Git Service

* cp-tree.h (lang_decl): Remove pretty_function_p.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3    Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23
24 /* Process declarations and symbol lookup for C front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "tree.h"
34 #include "rtl.h"
35 #include "flags.h"
36 #include "cp-tree.h"
37 #include "decl.h"
38 #include "lex.h"
39 #include <signal.h>
40 #include "defaults.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "../hash.h"
45 #include "defaults.h"
46 #include "ggc.h"
47
48 extern int current_class_depth;
49
50 extern tree static_ctors, static_dtors;
51
52 extern tree global_namespace;
53
54 extern int (*valid_lang_attribute) PARAMS ((tree, tree, tree, tree));
55
56 /* Use garbage collection.  */
57
58 int ggc_p = 1;
59
60 #ifndef WCHAR_UNSIGNED
61 #define WCHAR_UNSIGNED 0
62 #endif
63
64 #ifndef CHAR_TYPE_SIZE
65 #define CHAR_TYPE_SIZE BITS_PER_UNIT
66 #endif
67
68 #ifndef BOOL_TYPE_SIZE
69 #ifdef SLOW_BYTE_ACCESS
70 /* In the new ABI, `bool' has size and alignment `1', on all
71    platforms.  */
72 #define BOOL_TYPE_SIZE \
73   ((SLOW_BYTE_ACCESS && !flag_new_abi) ? (POINTER_SIZE) : (CHAR_TYPE_SIZE))
74 #else
75 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
76 #endif
77 #endif
78
79 /* We let tm.h override the types used here, to handle trivial differences
80    such as the choice of unsigned int or long unsigned int for size_t.
81    When machines start needing nontrivial differences in the size type,
82    it would be best to do something here to figure out automatically
83    from other information what type to use.  */
84
85 #ifndef SIZE_TYPE
86 #define SIZE_TYPE "long unsigned int"
87 #endif
88
89 #ifndef PTRDIFF_TYPE
90 #define PTRDIFF_TYPE "long int"
91 #endif
92
93 #ifndef WCHAR_TYPE
94 #define WCHAR_TYPE "int"
95 #endif
96
97 static tree grokparms                           PARAMS ((tree, int));
98 static const char *redeclaration_error_message  PARAMS ((tree, tree));
99
100 static void push_binding_level PARAMS ((struct binding_level *, int,
101                                       int));
102 static void pop_binding_level PARAMS ((void));
103 static void suspend_binding_level PARAMS ((void));
104 static void resume_binding_level PARAMS ((struct binding_level *));
105 static struct binding_level *make_binding_level PARAMS ((void));
106 static void declare_namespace_level PARAMS ((void));
107 static void signal_catch PARAMS ((int)) ATTRIBUTE_NORETURN;
108 static void storedecls PARAMS ((tree));
109 static void require_complete_types_for_parms PARAMS ((tree));
110 static int ambi_op_p PARAMS ((tree));
111 static int unary_op_p PARAMS ((tree));
112 static tree store_bindings PARAMS ((tree, tree));
113 static tree lookup_tag_reverse PARAMS ((tree, tree));
114 static tree obscure_complex_init PARAMS ((tree, tree));
115 static tree maybe_build_cleanup_1 PARAMS ((tree, tree));
116 static tree lookup_name_real PARAMS ((tree, int, int, int));
117 static void warn_extern_redeclared_static PARAMS ((tree, tree));
118 static void grok_reference_init PARAMS ((tree, tree, tree));
119 static tree grokfndecl PARAMS ((tree, tree, tree, tree, int,
120                               enum overload_flags, tree,
121                               tree, int, int, int, int, int, int, tree));
122 static tree grokvardecl PARAMS ((tree, tree, RID_BIT_TYPE *, int, int, tree));
123 static tree lookup_tag PARAMS ((enum tree_code, tree,
124                               struct binding_level *, int));
125 static void set_identifier_type_value_with_scope
126         PARAMS ((tree, tree, struct binding_level *));
127 static void record_builtin_type PARAMS ((enum rid, const char *, tree));
128 static void record_unknown_type PARAMS ((tree, const char *));
129 static tree build_library_fn_1                  PARAMS ((tree, tree));
130 static int member_function_or_else PARAMS ((tree, tree, enum overload_flags));
131 static void bad_specifiers PARAMS ((tree, const char *, int, int, int, int,
132                                   int));
133 static void lang_print_error_function PARAMS ((const char *));
134 static tree maybe_process_template_type_declaration PARAMS ((tree, int, struct binding_level*));
135 static void check_for_uninitialized_const_var PARAMS ((tree));
136 static unsigned long typename_hash PARAMS ((hash_table_key));
137 static boolean typename_compare PARAMS ((hash_table_key, hash_table_key));
138 static void push_binding PARAMS ((tree, tree, struct binding_level*));
139 static int add_binding PARAMS ((tree, tree));
140 static void pop_binding PARAMS ((tree, tree));
141 static tree local_variable_p_walkfn PARAMS ((tree *, int *, void *));
142 static tree find_binding PARAMS ((tree, tree));
143 static tree select_decl PARAMS ((tree, int));
144 static int lookup_flags PARAMS ((int, int));
145 static tree qualify_lookup PARAMS ((tree, int));
146 static tree record_builtin_java_type PARAMS ((const char *, int));
147 static const char *tag_name PARAMS ((enum tag_types code));
148 static void find_class_binding_level PARAMS ((void));
149 static struct binding_level *innermost_nonclass_level PARAMS ((void));
150 static void warn_about_implicit_typename_lookup PARAMS ((tree, tree));
151 static int walk_namespaces_r PARAMS ((tree, walk_namespaces_fn, void *));
152 static int walk_globals_r PARAMS ((tree, void *));
153 static void add_decl_to_level PARAMS ((tree, struct binding_level *));
154 static tree make_label_decl PARAMS ((tree, int));
155 static void pop_label PARAMS ((tree));
156 static void pop_labels PARAMS ((tree));
157 static void maybe_deduce_size_from_array_init PARAMS ((tree, tree));
158 static void layout_var_decl PARAMS ((tree));
159 static void maybe_commonize_var PARAMS ((tree));
160 static tree check_initializer PARAMS ((tree, tree));
161 static void make_rtl_for_nonlocal_decl PARAMS ((tree, tree, const char *));
162 static void push_cp_function_context PARAMS ((struct function *));
163 static void pop_cp_function_context PARAMS ((struct function *));
164 static void mark_binding_level PARAMS ((void *));
165 static void mark_cp_function_context PARAMS ((struct function *));
166 static void mark_saved_scope PARAMS ((void *));
167 static void mark_lang_function PARAMS ((struct language_function *));
168 static void mark_stmt_tree PARAMS ((struct stmt_tree *));
169 static void save_function_data PARAMS ((tree));
170 static void check_function_type PARAMS ((tree));
171 static void destroy_local_var PARAMS ((tree));
172 static void finish_constructor_body PARAMS ((void));
173 static void finish_destructor_body PARAMS ((void));
174 static tree create_array_type_for_decl PARAMS ((tree, tree, tree));
175 static tree get_atexit_node PARAMS ((void));
176 static tree get_dso_handle_node PARAMS ((void));
177 static tree start_cleanup_fn PARAMS ((void));
178 static void end_cleanup_fn PARAMS ((void));
179 static tree cp_make_fname_decl PARAMS ((tree, const char *, int));
180 static void initialize_predefined_identifiers PARAMS ((void));
181 static tree check_special_function_return_type 
182   PARAMS ((special_function_kind, tree, tree, tree));
183
184 #if defined (DEBUG_CP_BINDING_LEVELS)
185 static void indent PARAMS ((void));
186 #endif
187
188 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
189 tree error_mark_list;
190
191 /* The following symbols are subsumed in the cp_global_trees array, and
192    listed here individually for documentation purposes.
193
194    C++ extensions
195         tree wchar_decl_node;
196         tree void_zero_node;
197
198         tree vtable_entry_type;
199         tree delta_type_node;
200 #if 0
201    Old rtti stuff.
202         tree __baselist_desc_type_node;
203         tree __i_desc_type_node, __m_desc_type_node;
204         tree __t_desc_array_type, __i_desc_array_type, __m_desc_array_type;
205 #endif
206         tree __t_desc_type_node;
207 #if 0
208         tree __tp_desc_type_node;
209 #endif
210         tree ti_desc_type_node;
211         tree bltn_desc_type_node, ptr_desc_type_node;
212         tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
213         tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
214         tree ptmd_desc_type_node;
215         tree base_desc_type_node;
216 #if 0
217    Not needed yet?  May be needed one day?
218         tree __bltn_desc_array_type, __user_desc_array_type, __class_desc_array_type;
219         tree __ptr_desc_array_type, __attr_dec_array_type, __func_desc_array_type;
220         tree __ptmf_desc_array_type, __ptmd_desc_array_type;
221 #endif
222
223         tree class_type_node, record_type_node, union_type_node, enum_type_node;
224         tree unknown_type_node;
225
226    Array type `vtable_entry_type[]'
227
228         tree vtbl_type_node;
229         tree vtbl_ptr_type_node;
230
231    Namespaces,
232
233         tree std_node;
234         tree abi_node;
235
236    A FUNCTION_DECL which can call `abort'.  Not necessarily the
237    one that the user will declare, but sufficient to be called
238    by routines that want to abort the program.
239
240         tree abort_fndecl;
241
242    The FUNCTION_DECL for the default `::operator delete'.
243
244         tree global_delete_fndecl;
245
246    Used by RTTI
247         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
248         tree tinfo_var_id;
249
250 */
251
252 tree cp_global_trees[CPTI_MAX];
253
254 /* Indicates that there is a type value in some namespace, although
255    that is not necessarily in scope at the moment.  */
256
257 static tree global_type_node;
258
259 /* Namespace std.  */
260 int in_std;
261
262 /* Expect only namespace names now. */
263 static int only_namespace_names;
264
265 /* If original DECL_RESULT of current function was a register,
266    but due to being an addressable named return value, would up
267    on the stack, this variable holds the named return value's
268    original location.  */
269
270 #define original_result_rtx cp_function_chain->x_result_rtx
271
272 struct named_label_list
273 {
274   struct binding_level *binding_level;
275   tree names_in_scope;
276   tree label_decl;
277   const char *filename_o_goto;
278   int lineno_o_goto;
279   struct named_label_list *next;
280 };
281
282 /* Used only for jumps to as-yet undefined labels, since jumps to
283    defined labels can have their validity checked by stmt.c.  */
284
285 #define named_label_uses cp_function_chain->x_named_label_uses
286
287 /* A list of objects which have constructors or destructors
288    which reside in the global scope.  The decl is stored in
289    the TREE_VALUE slot and the initializer is stored
290    in the TREE_PURPOSE slot.  */
291 tree static_aggregates;
292
293 /* -- end of C++ */
294
295 /* A node for the integer constants 2, and 3.  */
296
297 tree integer_two_node, integer_three_node;
298
299 /* Parsing a function declarator leaves here a chain of structure
300    and enum types declared in the parmlist.  */
301
302 static tree last_function_parm_tags;
303
304 /* Similar, for last_function_parm_tags.  */
305 tree last_function_parms;
306 static tree current_function_parm_tags;
307
308 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
309    that have names.  Here so we can clear out their names' definitions
310    at the end of the function.  The TREE_VALUE is a LABEL_DECL; the
311    TREE_PURPOSE is the previous binding of the label.  */
312
313 #define named_labels cp_function_chain->x_named_labels
314
315 /* Set to 0 at beginning of a function definition, and whenever
316    a label (case or named) is defined.  Set to value of expression
317    returned from function when that value can be transformed into
318    a named return value.  */
319
320 tree current_function_return_value;
321
322 /* Nonzero means use the ISO C99 dialect of C.  */
323
324 int flag_isoc99;
325
326 /* Nonzero means give `double' the same size as `float'.  */
327
328 extern int flag_short_double;
329
330 /* Nonzero means don't recognize any builtin functions.  */
331
332 extern int flag_no_builtin;
333
334 /* Nonzero means don't recognize the non-ANSI builtin functions.
335    -ansi sets this.  */
336
337 extern int flag_no_nonansi_builtin;
338
339 /* Nonzero if we want to conserve space in the .o files.  We do this
340    by putting uninitialized data and runtime initialized data into
341    .common instead of .data at the expense of not flagging multiple
342    definitions.  */
343 extern int flag_conserve_space;
344 \f
345 /* C and C++ flags are in decl2.c.  */
346
347 /* Flag used when debugging spew.c */
348
349 extern int spew_debug;
350
351 /* A expression of value 0 with the same precision as a sizetype
352    node, but signed.  */
353 tree signed_size_zero_node;
354
355 /* The name of the anonymous namespace, throughout this translation
356    unit.  */
357 tree anonymous_namespace_name;
358
359 \f
360 /* For each binding contour we allocate a binding_level structure
361    which records the names defined in that contour.
362    Contours include:
363     0) the global one
364     1) one for each function definition,
365        where internal declarations of the parameters appear.
366     2) one for each compound statement,
367        to record its declarations.
368
369    The current meaning of a name can be found by searching the levels
370    from the current one out to the global one.
371
372    Off to the side, may be the class_binding_level.  This exists only
373    to catch class-local declarations.  It is otherwise nonexistent.
374
375    Also there may be binding levels that catch cleanups that must be
376    run when exceptions occur.  Thus, to see whether a name is bound in
377    the current scope, it is not enough to look in the
378    CURRENT_BINDING_LEVEL.  You should use lookup_name_current_level
379    instead.  */
380
381 /* Note that the information in the `names' component of the global contour
382    is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers.  */
383
384 struct binding_level
385   {
386     /* A chain of _DECL nodes for all variables, constants, functions,
387        and typedef types.  These are in the reverse of the order
388        supplied.  There may be OVERLOADs on this list, too, but they
389        are wrapped in TREE_LISTs; the TREE_VALUE is the OVERLOAD.  */
390     tree names;
391
392     /* A list of structure, union and enum definitions, for looking up
393        tag names.
394        It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
395        or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
396        or ENUMERAL_TYPE node.
397
398        C++: the TREE_VALUE nodes can be simple types for
399        component_bindings.  */
400     tree tags;
401
402     /* A list of USING_DECL nodes. */
403     tree usings;
404
405     /* A list of used namespaces. PURPOSE is the namespace,
406        VALUE the common ancestor with this binding_level's namespace. */
407     tree using_directives;
408
409     /* If this binding level is the binding level for a class, then
410        class_shadowed is a TREE_LIST.  The TREE_PURPOSE of each node
411        is the name of an entity bound in the class; the TREE_VALUE is
412        the IDENTIFIER_CLASS_VALUE before we entered the class.  Thus,
413        when leaving class scope, we can restore the
414        IDENTIFIER_CLASS_VALUE by walking this list.  The TREE_TYPE is
415        the DECL bound by this name in the class.  */
416     tree class_shadowed;
417
418     /* Similar to class_shadowed, but for IDENTIFIER_TYPE_VALUE, and
419        is used for all binding levels.  */
420     tree type_shadowed;
421
422     /* A TREE_LIST.  Each TREE_VALUE is the LABEL_DECL for a local
423        label in this scope.  The TREE_PURPOSE is the previous value of
424        the IDENTIFIER_LABEL VALUE.  */
425     tree shadowed_labels;
426
427     /* For each level (except not the global one),
428        a chain of BLOCK nodes for all the levels
429        that were entered and exited one level down.  */
430     tree blocks;
431
432     /* The BLOCK node for this level, if one has been preallocated.
433        If 0, the BLOCK is allocated (if needed) when the level is popped.  */
434     tree this_block;
435
436     /* The _TYPE node for this level, if parm_flag == 2.  */
437     tree this_class;
438
439     /* The binding level which this one is contained in (inherits from).  */
440     struct binding_level *level_chain;
441
442     /* List of decls in `names' that have incomplete
443        structure or union types.  */
444     tree incomplete;
445
446     /* List of VAR_DECLS saved from a previous for statement.
447        These would be dead in ISO-conforming code, but might
448        be referenced in ARM-era code.  These are stored in a
449        TREE_LIST; the TREE_VALUE is the actual declaration.  */
450     tree dead_vars_from_for;
451
452     /* 1 for the level that holds the parameters of a function.
453        2 for the level that holds a class declaration.  */
454     unsigned parm_flag : 2;
455
456     /* 1 means make a BLOCK for this level regardless of all else.
457        2 for temporary binding contours created by the compiler.  */
458     unsigned keep : 2;
459
460     /* Nonzero if this level "doesn't exist" for tags.  */
461     unsigned tag_transparent : 1;
462
463     /* Nonzero if this level can safely have additional
464        cleanup-needing variables added to it.  */
465     unsigned more_cleanups_ok : 1;
466     unsigned have_cleanups : 1;
467
468     /* Nonzero if this scope is for storing the decls for template
469        parameters and generic decls; these decls will be discarded and
470        replaced with a TEMPLATE_DECL.  */
471     unsigned template_parms_p : 1;
472
473     /* Nonzero if this scope corresponds to the `<>' in a 
474        `template <>' clause.  Whenever this flag is set,
475        TEMPLATE_PARMS_P will be set as well.  */
476     unsigned template_spec_p : 1;
477
478     /* This is set for a namespace binding level.  */
479     unsigned namespace_p : 1;
480
481     /* True if this level is that of a for-statement where we need to
482        worry about ambiguous (ARM or ISO) scope rules.  */
483     unsigned is_for_scope : 1;
484
485     /* True if this level corresponds to an EH region, as for a try block.  */
486     unsigned eh_region : 1;
487
488     /* Four bits left for this word.  */
489
490 #if defined(DEBUG_CP_BINDING_LEVELS)
491     /* Binding depth at which this level began.  */
492     unsigned binding_depth;
493 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
494   };
495
496 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
497
498 /* The binding level currently in effect.  */
499
500 #define current_binding_level                   \
501   (cfun                                         \
502    ? cp_function_chain->bindings                \
503    : scope_chain->bindings)
504
505 /* The binding level of the current class, if any.  */
506
507 #define class_binding_level scope_chain->class_bindings
508
509 /* A chain of binding_level structures awaiting reuse.  */
510
511 static struct binding_level *free_binding_level;
512
513 /* The outermost binding level, for names of file scope.
514    This is created when the compiler is started and exists
515    through the entire run.  */
516
517 static struct binding_level *global_binding_level;
518
519 /* Nonzero means unconditionally make a BLOCK for the next level pushed.  */
520
521 static int keep_next_level_flag;
522
523 #if defined(DEBUG_CP_BINDING_LEVELS)
524 static int binding_depth = 0;
525 static int is_class_level = 0;
526
527 static void
528 indent ()
529 {
530   register unsigned i;
531
532   for (i = 0; i < binding_depth*2; i++)
533     putc (' ', stderr);
534 }
535 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
536
537 static tree pushdecl_with_scope PARAMS ((tree, struct binding_level *));
538
539 static void
540 push_binding_level (newlevel, tag_transparent, keep)
541      struct binding_level *newlevel;
542      int tag_transparent, keep;
543 {
544   /* Add this level to the front of the chain (stack) of levels that
545      are active.  */
546   bzero ((char*) newlevel, sizeof (struct binding_level));
547   newlevel->level_chain = current_binding_level;
548   current_binding_level = newlevel;
549   newlevel->tag_transparent = tag_transparent;
550   newlevel->more_cleanups_ok = 1;
551
552   /* We are called before expand_start_bindings, but after
553      expand_eh_region_start for a try block; so we check this now,
554      before the EH block is covered up.  */
555   newlevel->eh_region = is_eh_region ();
556
557   newlevel->keep = keep;
558 #if defined(DEBUG_CP_BINDING_LEVELS)
559   newlevel->binding_depth = binding_depth;
560   indent ();
561   fprintf (stderr, "push %s level 0x%08x line %d\n",
562            (is_class_level) ? "class" : "block", newlevel, lineno);
563   is_class_level = 0;
564   binding_depth++;
565 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
566 }
567
568 /* Find the innermost enclosing class scope, and reset
569    CLASS_BINDING_LEVEL appropriately.  */
570
571 static void
572 find_class_binding_level ()
573 {
574   struct binding_level *level = current_binding_level;
575
576   while (level && level->parm_flag != 2)
577     level = level->level_chain;
578   if (level && level->parm_flag == 2)
579     class_binding_level = level;
580   else
581     class_binding_level = 0;
582 }
583
584 static void
585 pop_binding_level ()
586 {
587   if (global_binding_level)
588     {
589       /* Cannot pop a level, if there are none left to pop.  */
590       if (current_binding_level == global_binding_level)
591         my_friendly_abort (123);
592     }
593   /* Pop the current level, and free the structure for reuse.  */
594 #if defined(DEBUG_CP_BINDING_LEVELS)
595   binding_depth--;
596   indent ();
597   fprintf (stderr, "pop  %s level 0x%08x line %d\n",
598           (is_class_level) ? "class" : "block",
599           current_binding_level, lineno);
600   if (is_class_level != (current_binding_level == class_binding_level))
601     {
602       indent ();
603       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
604     }
605   is_class_level = 0;
606 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
607   {
608     register struct binding_level *level = current_binding_level;
609     current_binding_level = current_binding_level->level_chain;
610     level->level_chain = free_binding_level;
611 #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */
612     if (level->binding_depth != binding_depth)
613       abort ();
614 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
615     free_binding_level = level;
616     find_class_binding_level ();
617   }
618 }
619
620 static void
621 suspend_binding_level ()
622 {
623   if (class_binding_level)
624     current_binding_level = class_binding_level;
625
626   if (global_binding_level)
627     {
628       /* Cannot suspend a level, if there are none left to suspend.  */
629       if (current_binding_level == global_binding_level)
630         my_friendly_abort (123);
631     }
632   /* Suspend the current level.  */
633 #if defined(DEBUG_CP_BINDING_LEVELS)
634   binding_depth--;
635   indent ();
636   fprintf (stderr, "suspend  %s level 0x%08x line %d\n",
637           (is_class_level) ? "class" : "block",
638           current_binding_level, lineno);
639   if (is_class_level != (current_binding_level == class_binding_level))
640     {
641       indent ();
642       fprintf (stderr, "XXX is_class_level != (current_binding_level == class_binding_level)\n");
643     }
644   is_class_level = 0;
645 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
646   current_binding_level = current_binding_level->level_chain;
647   find_class_binding_level ();
648 }
649
650 static void
651 resume_binding_level (b)
652      struct binding_level *b;
653 {
654   /* Resuming binding levels is meant only for namespaces,
655      and those cannot nest into classes. */
656   my_friendly_assert(!class_binding_level, 386);
657   /* Also, resuming a non-directly nested namespace is a no-no.  */
658   my_friendly_assert(b->level_chain == current_binding_level, 386);
659   current_binding_level = b;
660 #if defined(DEBUG_CP_BINDING_LEVELS)
661   b->binding_depth = binding_depth;
662   indent ();
663   fprintf (stderr, "resume %s level 0x%08x line %d\n",
664            (is_class_level) ? "class" : "block", b, lineno);
665   is_class_level = 0;
666   binding_depth++;
667 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
668 }
669 \f
670 /* Create a new `struct binding_level'.  */
671
672 static
673 struct binding_level *
674 make_binding_level ()
675 {
676   /* NOSTRICT */
677   return (struct binding_level *) xmalloc (sizeof (struct binding_level));
678 }
679
680 /* Nonzero if we are currently in the global binding level.  */
681
682 int
683 global_bindings_p ()
684 {
685   return current_binding_level == global_binding_level;
686 }
687
688 /* Return the innermost binding level that is not for a class scope.  */
689
690 static struct binding_level *
691 innermost_nonclass_level ()
692 {
693   struct binding_level *b;
694
695   b = current_binding_level;
696   while (b->parm_flag == 2)
697     b = b->level_chain;
698
699   return b;
700 }
701
702 /* Nonzero if we are currently in a toplevel binding level.  This
703    means either the global binding level or a namespace in a toplevel
704    binding level.  Since there are no non-toplevel namespace levels,
705    this really means any namespace or template parameter level.  We
706    also include a class whose context is toplevel.  */
707
708 int
709 toplevel_bindings_p ()
710 {
711   struct binding_level *b = innermost_nonclass_level ();
712
713   return b->namespace_p || b->template_parms_p;
714 }
715
716 /* Nonzero if this is a namespace scope, or if we are defining a class
717    which is itself at namespace scope, or whose enclosing class is
718    such a class, etc.  */
719
720 int
721 namespace_bindings_p ()
722 {
723   struct binding_level *b = innermost_nonclass_level ();
724
725   return b->namespace_p;
726 }
727
728 /* If KEEP is non-zero, make a BLOCK node for the next binding level,
729    unconditionally.  Otherwise, use the normal logic to decide whether
730    or not to create a BLOCK.  */
731
732 void
733 keep_next_level (keep)
734      int keep;
735 {
736   keep_next_level_flag = keep;
737 }
738
739 /* Nonzero if the current level needs to have a BLOCK made.  */
740
741 int
742 kept_level_p ()
743 {
744   return (current_binding_level->blocks != NULL_TREE
745           || current_binding_level->keep
746           || current_binding_level->names != NULL_TREE
747           || (current_binding_level->tags != NULL_TREE
748               && !current_binding_level->tag_transparent));
749 }
750
751 static void
752 declare_namespace_level ()
753 {
754   current_binding_level->namespace_p = 1;
755 }
756
757 /* Returns non-zero if this scope was created to store template
758    parameters.  */
759
760 int
761 template_parm_scope_p ()
762 {
763   return current_binding_level->template_parms_p;
764 }
765
766 /* Returns the kind of template specialization we are currently
767    processing, given that it's declaration contained N_CLASS_SCOPES
768    explicit scope qualifications.  */
769
770 tmpl_spec_kind
771 current_tmpl_spec_kind (n_class_scopes)
772      int n_class_scopes;
773 {
774   int n_template_parm_scopes = 0;
775   int seen_specialization_p = 0;
776   int innermost_specialization_p = 0;
777   struct binding_level *b;
778
779   /* Scan through the template parameter scopes.  */
780   for (b = current_binding_level; b->template_parms_p; b = b->level_chain)
781     {
782       /* If we see a specialization scope inside a parameter scope,
783          then something is wrong.  That corresponds to a declaration
784          like:
785
786             template <class T> template <> ...
787
788          which is always illegal since [temp.expl.spec] forbids the
789          specialization of a class member template if the enclosing
790          class templates are not explicitly specialized as well.  */
791       if (b->template_spec_p)
792         {
793           if (n_template_parm_scopes == 0)
794             innermost_specialization_p = 1;
795           else
796             seen_specialization_p = 1;
797         }
798       else if (seen_specialization_p == 1)
799         return tsk_invalid_member_spec;
800
801       ++n_template_parm_scopes;
802     }
803
804   /* Handle explicit instantiations.  */
805   if (processing_explicit_instantiation)
806     {
807       if (n_template_parm_scopes != 0)
808         /* We've seen a template parameter list during an explicit
809            instantiation.  For example:
810
811              template <class T> template void f(int);
812
813            This is erroneous.  */
814         return tsk_invalid_expl_inst;
815       else
816         return tsk_expl_inst;
817     }
818
819   if (n_template_parm_scopes < n_class_scopes)
820     /* We've not seen enough template headers to match all the
821        specialized classes present.  For example:
822
823          template <class T> void R<T>::S<T>::f(int);
824
825        This is illegal; there needs to be one set of template
826        parameters for each class.  */
827     return tsk_insufficient_parms;
828   else if (n_template_parm_scopes == n_class_scopes)
829     /* We're processing a non-template declaration (even though it may
830        be a member of a template class.)  For example:
831
832          template <class T> void S<T>::f(int);
833
834        The `class T' maches the `S<T>', leaving no template headers
835        corresponding to the `f'.  */
836     return tsk_none;
837   else if (n_template_parm_scopes > n_class_scopes + 1)
838     /* We've got too many template headers.  For example:
839
840          template <> template <class T> void f (T);
841
842        There need to be more enclosing classes.  */
843     return tsk_excessive_parms;
844   else
845     /* This must be a template.  It's of the form:
846
847          template <class T> template <class U> void S<T>::f(U);
848
849        This is a specialization if the innermost level was a
850        specialization; otherwise it's just a definition of the
851        template.  */
852     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
853 }
854
855 void
856 set_class_shadows (shadows)
857      tree shadows;
858 {
859   class_binding_level->class_shadowed = shadows;
860 }
861
862 /* Enter a new binding level.
863    If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
864    not for that of tags.  */
865
866 void
867 pushlevel (tag_transparent)
868      int tag_transparent;
869 {
870   struct binding_level *newlevel;
871
872   if (cfun && !doing_semantic_analysis_p ())
873     return;
874
875   /* Reuse or create a struct for this binding level.  */
876 #if defined(DEBUG_CP_BINDING_LEVELS)
877   if (0)
878 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
879   if (free_binding_level)
880 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
881     {
882       newlevel = free_binding_level;
883       free_binding_level = free_binding_level->level_chain;
884     }
885   else
886     newlevel = make_binding_level ();
887
888   push_binding_level (newlevel, tag_transparent, keep_next_level_flag);
889   GNU_xref_start_scope ((HOST_WIDE_INT) newlevel);
890   keep_next_level_flag = 0;
891 }
892
893 /* Enter a new scope.  The KIND indicates what kind of scope is being
894    created.  */
895
896 void
897 begin_scope (sk)
898      scope_kind sk;
899 {
900   pushlevel (0);
901
902   switch (sk)
903     {
904     case sk_template_spec:
905       current_binding_level->template_spec_p = 1;
906       /* Fall through.  */
907
908     case sk_template_parms:
909       current_binding_level->template_parms_p = 1;
910       break;
911
912     default:
913       my_friendly_abort (20000309);
914     }
915 }
916
917 /* Exit the current scope.  */
918
919 void
920 finish_scope ()
921 {
922   poplevel (0, 0, 0);
923 }
924
925 void
926 note_level_for_for ()
927 {
928   current_binding_level->is_for_scope = 1;
929 }
930
931 /* For a binding between a name and an entity at a block scope,
932    this is the `struct binding_level' for the block.  */
933 #define BINDING_LEVEL(NODE) \
934    (((struct tree_binding*)NODE)->scope.level)
935
936 /* Make DECL the innermost binding for ID.  The LEVEL is the binding
937    level at which this declaration is being bound.  */
938
939 static void
940 push_binding (id, decl, level)
941      tree id;
942      tree decl;
943      struct binding_level* level;
944 {
945   tree binding;
946
947   binding = make_node (CPLUS_BINDING);
948
949   /* Now, fill in the binding information.  */
950   BINDING_VALUE (binding) = decl;
951   BINDING_TYPE (binding) = NULL_TREE;
952   BINDING_LEVEL (binding) = level;
953   INHERITED_VALUE_BINDING_P (binding) = 0;
954   LOCAL_BINDING_P (binding) = (level != class_binding_level);
955   BINDING_HAS_LEVEL_P (binding) = 1;
956
957   /* And put it on the front of the list of bindings for ID.  */
958   TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
959   IDENTIFIER_BINDING (id) = binding;
960 }
961
962 /* ID is already bound in the current scope.  But, DECL is an
963    additional binding for ID in the same scope.  This is the `struct
964    stat' hack whereby a non-typedef class-name or enum-name can be
965    bound at the same level as some other kind of entity.  It's the
966    responsibility of the caller to check that inserting this name is
967    legal here.  Returns nonzero if the new binding was successful.  */
968 static int
969 add_binding (id, decl)
970      tree id;
971      tree decl;
972 {
973   tree binding = IDENTIFIER_BINDING (id);
974   int ok = 1;
975
976   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
977     /* The new name is the type name.  */
978     BINDING_TYPE (binding) = decl;
979   else if (!BINDING_VALUE (binding))
980     /* This situation arises when push_class_level_binding moves an
981        inherited type-binding out of the way to make room for a new
982        value binding.  */
983     BINDING_VALUE (binding) = decl;
984   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
985            && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
986     {
987       /* The old binding was a type name.  It was placed in
988          BINDING_VALUE because it was thought, at the point it was
989          declared, to be the only entity with such a name.  Move the
990          type name into the type slot; it is now hidden by the new
991          binding.  */
992       BINDING_TYPE (binding) = BINDING_VALUE (binding);
993       BINDING_VALUE (binding) = decl;
994       INHERITED_VALUE_BINDING_P (binding) = 0;
995     }
996   else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
997            && TREE_CODE (decl) == TYPE_DECL
998            && DECL_NAME (decl) == DECL_NAME (BINDING_VALUE (binding))
999            && same_type_p (TREE_TYPE (decl),
1000                            TREE_TYPE (BINDING_VALUE (binding))))
1001     /* We have two typedef-names, both naming the same type to have
1002        the same name.  This is OK because of:
1003
1004          [dcl.typedef]
1005
1006          In a given scope, a typedef specifier can be used to redefine
1007          the name of any type declared in that scope to refer to the
1008          type to which it already refers.  */
1009     ok = 0;
1010   else
1011     {
1012       cp_error ("declaration of `%#D'", decl);
1013       cp_error_at ("conflicts with previous declaration `%#D'",
1014                    BINDING_VALUE (binding));
1015       ok = 0;
1016     }
1017
1018   return ok;
1019 }
1020
1021 /* Add DECL to the list of things declared in B.  */
1022
1023 static void
1024 add_decl_to_level (decl, b)
1025      tree decl;
1026      struct binding_level *b;
1027 {
1028   /* We build up the list in reverse order, and reverse it later if
1029      necessary.  */
1030   TREE_CHAIN (decl) = b->names;
1031   b->names = decl;
1032 }
1033
1034 /* Bind DECL to ID in the current_binding_level, assumed to be a local
1035    binding level.  If PUSH_USING is set in FLAGS, we know that DECL
1036    doesn't really belong to this binding level, that it got here
1037    through a using-declaration.  */
1038
1039 void
1040 push_local_binding (id, decl, flags)
1041      tree id;
1042      tree decl;
1043      int flags;
1044 {
1045   struct binding_level *b;
1046
1047   /* Skip over any local classes.  This makes sense if we call
1048      push_local_binding with a friend decl of a local class.  */
1049   b = current_binding_level;
1050   while (b->parm_flag == 2)
1051     b = b->level_chain;
1052
1053   if (lookup_name_current_level (id))
1054     {
1055       /* Supplement the existing binding.  */
1056       if (!add_binding (id, decl))
1057         /* It didn't work.  Something else must be bound at this
1058            level.  Do not add DECL to the list of things to pop
1059            later.  */
1060         return;
1061     }
1062   else
1063     /* Create a new binding.  */
1064     push_binding (id, decl, b);
1065
1066   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
1067     /* We must put the OVERLOAD into a TREE_LIST since the
1068        TREE_CHAIN of an OVERLOAD is already used.  Similarly for
1069        decls that got here through a using-declaration.  */
1070     decl = build_tree_list (NULL_TREE, decl);
1071
1072   /* And put DECL on the list of things declared by the current
1073      binding level.  */
1074   add_decl_to_level (decl, b);
1075 }
1076
1077 /* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
1078    binding was successful.  */
1079
1080 int
1081 push_class_binding (id, decl)
1082      tree id;
1083      tree decl;
1084 {
1085   int result = 1;
1086   tree binding = IDENTIFIER_BINDING (id);
1087   tree context;
1088
1089   /* Note that we declared this value so that we can issue an error if
1090      this an illegal redeclaration of a name already used for some
1091      other purpose.  */
1092   note_name_declared_in_class (id, decl);
1093
1094   if (binding && BINDING_LEVEL (binding) == class_binding_level)
1095     /* Supplement the existing binding.  */
1096     result = add_binding (id, decl);
1097   else
1098     /* Create a new binding.  */
1099     push_binding (id, decl, class_binding_level);
1100
1101   /* Update the IDENTIFIER_CLASS_VALUE for this ID to be the
1102      class-level declaration.  Note that we do not use DECL here
1103      because of the possibility of the `struct stat' hack; if DECL is
1104      a class-name or enum-name we might prefer a field-name, or some
1105      such.  */
1106   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
1107
1108   /* If this is a binding from a base class, mark it as such.  */
1109   binding = IDENTIFIER_BINDING (id);
1110   if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
1111     {
1112       /* Any implicit typename must be from a base-class.  The
1113          context for an implicit typename declaration is always
1114          the derived class in which the lookup was done, so the checks
1115          based on the context of DECL below will not trigger.  */
1116       if (IMPLICIT_TYPENAME_TYPE_DECL_P (decl))
1117         INHERITED_VALUE_BINDING_P (binding) = 1;
1118       else
1119         {
1120           if (TREE_CODE (decl) == OVERLOAD)
1121             context = CP_DECL_CONTEXT (OVL_CURRENT (decl));
1122           else
1123             {
1124               my_friendly_assert (DECL_P (decl), 0);
1125               context = CP_DECL_CONTEXT (decl);
1126             }
1127
1128           if (is_properly_derived_from (current_class_type, context))
1129             INHERITED_VALUE_BINDING_P (binding) = 1;
1130           else
1131             INHERITED_VALUE_BINDING_P (binding) = 0;
1132         }
1133     }
1134   else if (BINDING_VALUE (binding) == decl)
1135     /* We only encounter a TREE_LIST when push_class_decls detects an
1136        ambiguity.  Such an ambiguity can be overridden by a definition
1137        in this class.  */
1138     INHERITED_VALUE_BINDING_P (binding) = 1;
1139
1140   return result;
1141 }
1142
1143 /* Remove the binding for DECL which should be the innermost binding
1144    for ID.  */
1145
1146 static void
1147 pop_binding (id, decl)
1148      tree id;
1149      tree decl;
1150 {
1151   tree binding;
1152
1153   if (id == NULL_TREE)
1154     /* It's easiest to write the loops that call this function without
1155        checking whether or not the entities involved have names.  We
1156        get here for such an entity.  */
1157     return;
1158
1159   /* Get the innermost binding for ID.  */
1160   binding = IDENTIFIER_BINDING (id);
1161
1162   /* The name should be bound.  */
1163   my_friendly_assert (binding != NULL_TREE, 0);
1164
1165   /* The DECL will be either the ordinary binding or the type
1166      binding for this identifier.  Remove that binding.  */
1167   if (BINDING_VALUE (binding) == decl)
1168     BINDING_VALUE (binding) = NULL_TREE;
1169   else if (BINDING_TYPE (binding) == decl)
1170     BINDING_TYPE (binding) = NULL_TREE;
1171   else
1172     my_friendly_abort (0);
1173
1174   if (!BINDING_VALUE (binding) && !BINDING_TYPE (binding))
1175     /* We're completely done with the innermost binding for this
1176        identifier.  Unhook it from the list of bindings.  */
1177     IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
1178 }
1179
1180 /* When a label goes out of scope, check to see if that label was used
1181    in a valid manner, and issue any appropriate warnings or errors.  */
1182
1183 static void
1184 pop_label (link)
1185      tree link;
1186 {
1187   tree label = TREE_VALUE (link);
1188
1189   if (!processing_template_decl && doing_semantic_analysis_p ())
1190     {
1191       if (DECL_INITIAL (label) == NULL_TREE)
1192         {
1193           cp_error_at ("label `%D' used but not defined", label);
1194           /* Avoid crashing later.  */
1195           define_label (input_filename, 1, DECL_NAME (label));
1196         }
1197       else if (warn_unused && !TREE_USED (label))
1198         cp_warning_at ("label `%D' defined but not used", label);
1199     }
1200
1201   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), TREE_PURPOSE (link));
1202 }
1203
1204 /* At the end of a function, all labels declared within the fucntion
1205    go out of scope.  BLOCK is the top-level block for the
1206    function.  */
1207
1208 static void
1209 pop_labels (block)
1210      tree block;
1211 {
1212   tree link;
1213
1214   /* Clear out the definitions of all label names, since their scopes
1215      end here.  */
1216   for (link = named_labels; link; link = TREE_CHAIN (link))
1217     {
1218       pop_label (link);
1219       /* Put the labels into the "variables" of the top-level block,
1220          so debugger can see them.  */
1221       TREE_CHAIN (TREE_VALUE (link)) = BLOCK_VARS (block);
1222       BLOCK_VARS (block) = TREE_VALUE (link);
1223     }
1224
1225   named_labels = NULL_TREE;
1226 }
1227
1228 /* Exit a binding level.
1229    Pop the level off, and restore the state of the identifier-decl mappings
1230    that were in effect when this level was entered.
1231
1232    If KEEP == 1, this level had explicit declarations, so
1233    and create a "block" (a BLOCK node) for the level
1234    to record its declarations and subblocks for symbol table output.
1235
1236    If FUNCTIONBODY is nonzero, this level is the body of a function,
1237    so create a block as if KEEP were set and also clear out all
1238    label names.
1239
1240    If REVERSE is nonzero, reverse the order of decls before putting
1241    them into the BLOCK.  */
1242
1243 tree
1244 poplevel (keep, reverse, functionbody)
1245      int keep;
1246      int reverse;
1247      int functionbody;
1248 {
1249   register tree link;
1250   /* The chain of decls was accumulated in reverse order.
1251      Put it into forward order, just for cleanliness.  */
1252   tree decls;
1253   int tmp = functionbody;
1254   int real_functionbody;
1255   tree tags;
1256   tree subblocks;
1257   tree block = NULL_TREE;
1258   tree decl;
1259   int block_previously_created;
1260   int leaving_for_scope;
1261
1262   if (cfun && !doing_semantic_analysis_p ())
1263     return NULL_TREE;
1264
1265   my_friendly_assert (current_binding_level->parm_flag != 2,
1266                       19990916);
1267
1268   real_functionbody = (current_binding_level->keep == 2
1269                        ? ((functionbody = 0), tmp) : functionbody);
1270   tags = functionbody >= 0 ? current_binding_level->tags : 0;
1271   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
1272
1273   my_friendly_assert (!current_binding_level->class_shadowed,
1274                       19990414);
1275
1276   /* We used to use KEEP == 2 to indicate that the new block should go
1277      at the beginning of the list of blocks at this binding level,
1278      rather than the end.  This hack is no longer used.  */
1279   my_friendly_assert (keep == 0 || keep == 1, 0);
1280
1281   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
1282                       (HOST_WIDE_INT) current_binding_level->level_chain,
1283                       current_binding_level->parm_flag,
1284                       current_binding_level->keep);
1285
1286   if (current_binding_level->keep == 1)
1287     keep = 1;
1288
1289   /* Get the decls in the order they were written.
1290      Usually current_binding_level->names is in reverse order.
1291      But parameter decls were previously put in forward order.  */
1292
1293   if (reverse)
1294     current_binding_level->names
1295       = decls = nreverse (current_binding_level->names);
1296   else
1297     decls = current_binding_level->names;
1298
1299   /* Output any nested inline functions within this block
1300      if they weren't already output.  */
1301   for (decl = decls; decl; decl = TREE_CHAIN (decl))
1302     if (TREE_CODE (decl) == FUNCTION_DECL
1303         && ! TREE_ASM_WRITTEN (decl)
1304         && DECL_INITIAL (decl) != NULL_TREE
1305         && TREE_ADDRESSABLE (decl)
1306         && decl_function_context (decl) == current_function_decl)
1307       {
1308         /* If this decl was copied from a file-scope decl
1309            on account of a block-scope extern decl,
1310            propagate TREE_ADDRESSABLE to the file-scope decl.  */
1311         if (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE)
1312           TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1313         else
1314           {
1315             push_function_context ();
1316             output_inline_function (decl);
1317             pop_function_context ();
1318           }
1319       }
1320
1321   /* When not in function-at-a-time mode, expand_end_bindings will
1322      warn about unused variables.  But, in function-at-a-time mode
1323      expand_end_bindings is not passed the list of variables in the
1324      current scope, and therefore no warning is emitted.  So, we
1325      explicitly warn here.  */
1326   if (!processing_template_decl)
1327     warn_about_unused_variables (getdecls ());
1328
1329   /* If there were any declarations or structure tags in that level,
1330      or if this level is a function body,
1331      create a BLOCK to record them for the life of this function.  */
1332   block = NULL_TREE;
1333   block_previously_created = (current_binding_level->this_block != NULL_TREE);
1334   if (block_previously_created)
1335     block = current_binding_level->this_block;
1336   else if (keep == 1 || functionbody)
1337     block = make_node (BLOCK);
1338   if (block != NULL_TREE)
1339     {
1340       if (block_previously_created)
1341         {
1342           if (decls || tags || subblocks)
1343             {
1344               if (BLOCK_VARS (block))
1345                 warning ("internal compiler error: debugging info corrupted");
1346
1347               BLOCK_VARS (block) = decls;
1348
1349               /* We can have previous subblocks and new subblocks when
1350                  doing fixup_gotos with complex cleanups.  We chain the new
1351                  subblocks onto the end of any pre-existing subblocks.  */
1352               BLOCK_SUBBLOCKS (block) = chainon (BLOCK_SUBBLOCKS (block),
1353                                                  subblocks);
1354             }
1355         }
1356       else
1357         {
1358           BLOCK_VARS (block) = decls;
1359           BLOCK_SUBBLOCKS (block) = subblocks;
1360         }
1361     }
1362
1363   /* In each subblock, record that this is its superior.  */
1364   if (keep >= 0)
1365     for (link = subblocks; link; link = TREE_CHAIN (link))
1366       BLOCK_SUPERCONTEXT (link) = block;
1367
1368   /* We still support the old for-scope rules, whereby the variables
1369      in a for-init statement were in scope after the for-statement
1370      ended.  We only use the new rules in flag_new_for_scope is
1371      nonzero.  */
1372   leaving_for_scope
1373     = current_binding_level->is_for_scope && flag_new_for_scope == 1;
1374
1375   /* Remove declarations for all the DECLs in this level.  */
1376   for (link = decls; link; link = TREE_CHAIN (link))
1377     {
1378       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL)
1379         {
1380           tree outer_binding
1381             = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
1382           tree ns_binding;
1383
1384           if (!outer_binding)
1385             ns_binding = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (link));
1386           else
1387             ns_binding = NULL_TREE;
1388
1389           if (outer_binding
1390               && (BINDING_LEVEL (outer_binding)
1391                   == current_binding_level->level_chain))
1392             /* We have something like:
1393
1394                  int i;
1395                  for (int i; ;);
1396
1397                and we are leaving the `for' scope.  There's no reason to
1398                keep the binding of the inner `i' in this case.  */
1399             pop_binding (DECL_NAME (link), link);
1400           else if ((outer_binding
1401                     && (TREE_CODE (BINDING_VALUE (outer_binding))
1402                         == TYPE_DECL))
1403                    || (ns_binding
1404                        && TREE_CODE (ns_binding) == TYPE_DECL))
1405             /* Here, we have something like:
1406
1407                  typedef int I;
1408
1409                  void f () {
1410                    for (int I; ;);
1411                  }
1412
1413                We must pop the for-scope binding so we know what's a
1414                type and what isn't.  */
1415             pop_binding (DECL_NAME (link), link);
1416           else
1417             {
1418               /* Mark this VAR_DECL as dead so that we can tell we left it
1419                  there only for backward compatibility.  */
1420               DECL_DEAD_FOR_LOCAL (link) = 1;
1421
1422               /* Keep track of what should of have happenned when we
1423                  popped the binding.  */
1424               if (outer_binding && BINDING_VALUE (outer_binding))
1425                 DECL_SHADOWED_FOR_VAR (link)
1426                   = BINDING_VALUE (outer_binding);
1427
1428               /* Add it to the list of dead variables in the next
1429                  outermost binding to that we can remove these when we
1430                  leave that binding.  */
1431               current_binding_level->level_chain->dead_vars_from_for
1432                 = tree_cons (NULL_TREE, link,
1433                              current_binding_level->level_chain->
1434                              dead_vars_from_for);
1435
1436               /* Although we don't pop the CPLUS_BINDING, we do clear
1437                  its BINDING_LEVEL since the level is going away now.  */
1438               BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
1439                 = 0;
1440             }
1441         }
1442       else
1443         {
1444           /* Remove the binding.  */
1445           decl = link;
1446           if (TREE_CODE (decl) == TREE_LIST)
1447             decl = TREE_VALUE (decl);
1448           if (DECL_P (decl))
1449             pop_binding (DECL_NAME (decl), decl);
1450           else if (TREE_CODE (decl) == OVERLOAD)
1451             pop_binding (DECL_NAME (OVL_FUNCTION (decl)), decl);
1452           else
1453             my_friendly_abort (0);
1454         }
1455     }
1456
1457   /* Remove declarations for any `for' variables from inner scopes
1458      that we kept around.  */
1459   for (link = current_binding_level->dead_vars_from_for;
1460        link; link = TREE_CHAIN (link))
1461     pop_binding (DECL_NAME (TREE_VALUE (link)), TREE_VALUE (link));
1462
1463   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
1464   for (link = current_binding_level->type_shadowed;
1465        link; link = TREE_CHAIN (link))
1466     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
1467
1468   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
1469   for (link = current_binding_level->shadowed_labels;
1470        link;
1471        link = TREE_CHAIN (link))
1472     pop_label (link);
1473
1474   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
1475      list if a `using' declaration put them there.  The debugging
1476      back-ends won't understand OVERLOAD, so we remove them here.
1477      Because the BLOCK_VARS are (temporarily) shared with
1478      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
1479      popped all the bindings.  */
1480   if (block)
1481     {
1482       tree* d;
1483
1484       for (d = &BLOCK_VARS (block); *d; )
1485         {
1486           if (TREE_CODE (*d) == TREE_LIST)
1487             *d = TREE_CHAIN (*d);
1488           else
1489             d = &TREE_CHAIN (*d);
1490         }
1491     }
1492
1493   /* If the level being exited is the top level of a function,
1494      check over all the labels.  */
1495   if (functionbody)
1496     {
1497       /* Since this is the top level block of a function, the vars are
1498          the function's parameters.  Don't leave them in the BLOCK
1499          because they are found in the FUNCTION_DECL instead.  */
1500       BLOCK_VARS (block) = 0;
1501       pop_labels (block);
1502     }
1503
1504   /* Any uses of undefined labels now operate under constraints
1505      of next binding contour.  */
1506   if (cfun)
1507     {
1508       struct binding_level *level_chain;
1509       level_chain = current_binding_level->level_chain;
1510       if (level_chain)
1511         {
1512           struct named_label_list *labels;
1513           for (labels = named_label_uses; labels; labels = labels->next)
1514             if (labels->binding_level == current_binding_level)
1515               {
1516                 labels->binding_level = level_chain;
1517                 labels->names_in_scope = level_chain->names;
1518               }
1519         }
1520     }
1521
1522   tmp = current_binding_level->keep;
1523
1524   pop_binding_level ();
1525   if (functionbody)
1526     DECL_INITIAL (current_function_decl) = block;
1527   else if (block)
1528     {
1529       if (!block_previously_created)
1530         current_binding_level->blocks
1531           = chainon (current_binding_level->blocks, block);
1532     }
1533   /* If we did not make a block for the level just exited,
1534      any blocks made for inner levels
1535      (since they cannot be recorded as subblocks in that level)
1536      must be carried forward so they will later become subblocks
1537      of something else.  */
1538   else if (subblocks)
1539     current_binding_level->blocks
1540       = chainon (current_binding_level->blocks, subblocks);
1541
1542   /* Each and every BLOCK node created here in `poplevel' is important
1543      (e.g. for proper debugging information) so if we created one
1544      earlier, mark it as "used".  */
1545   if (block)
1546     TREE_USED (block) = 1;
1547
1548   /* Take care of compiler's internal binding structures.  */
1549   if (tmp == 2)
1550     {
1551       tree scope_stmts;
1552
1553       scope_stmts
1554         = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/1);
1555       if (block)
1556         {
1557           SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
1558           SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
1559         }
1560
1561       block = poplevel (keep, reverse, functionbody);
1562     }
1563
1564   return block;
1565 }
1566
1567 /* Delete the node BLOCK from the current binding level.
1568    This is used for the block inside a stmt expr ({...})
1569    so that the block can be reinserted where appropriate.  */
1570
1571 void
1572 delete_block (block)
1573      tree block;
1574 {
1575   tree t;
1576   if (current_binding_level->blocks == block)
1577     current_binding_level->blocks = TREE_CHAIN (block);
1578   for (t = current_binding_level->blocks; t;)
1579     {
1580       if (TREE_CHAIN (t) == block)
1581         TREE_CHAIN (t) = TREE_CHAIN (block);
1582       else
1583         t = TREE_CHAIN (t);
1584     }
1585   TREE_CHAIN (block) = NULL_TREE;
1586   /* Clear TREE_USED which is always set by poplevel.
1587      The flag is set again if insert_block is called.  */
1588   TREE_USED (block) = 0;
1589 }
1590
1591 /* Insert BLOCK at the end of the list of subblocks of the
1592    current binding level.  This is used when a BIND_EXPR is expanded,
1593    to handle the BLOCK node inside the BIND_EXPR.  */
1594
1595 void
1596 insert_block (block)
1597      tree block;
1598 {
1599   TREE_USED (block) = 1;
1600   current_binding_level->blocks
1601     = chainon (current_binding_level->blocks, block);
1602 }
1603
1604 /* Set the BLOCK node for the innermost scope
1605    (the one we are currently in).  */
1606
1607 void
1608 set_block (block)
1609     register tree block;
1610 {
1611   current_binding_level->this_block = block;
1612 }
1613
1614 /* Do a pushlevel for class declarations.  */
1615
1616 void
1617 pushlevel_class ()
1618 {
1619   register struct binding_level *newlevel;
1620
1621   /* Reuse or create a struct for this binding level.  */
1622 #if defined(DEBUG_CP_BINDING_LEVELS)
1623   if (0)
1624 #else /* !defined(DEBUG_CP_BINDING_LEVELS) */
1625   if (free_binding_level)
1626 #endif /* !defined(DEBUG_CP_BINDING_LEVELS) */
1627     {
1628       newlevel = free_binding_level;
1629       free_binding_level = free_binding_level->level_chain;
1630     }
1631   else
1632     newlevel = make_binding_level ();
1633
1634 #if defined(DEBUG_CP_BINDING_LEVELS)
1635   is_class_level = 1;
1636 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1637
1638   push_binding_level (newlevel, 0, 0);
1639
1640   class_binding_level = current_binding_level;
1641   class_binding_level->parm_flag = 2;
1642   class_binding_level->this_class = current_class_type;
1643 }
1644
1645 /* ...and a poplevel for class declarations.  */
1646
1647 void
1648 poplevel_class ()
1649 {
1650   register struct binding_level *level = class_binding_level;
1651   tree shadowed;
1652
1653   my_friendly_assert (level != 0, 354);
1654
1655   /* If we're leaving a toplevel class, don't bother to do the setting
1656      of IDENTIFIER_CLASS_VALUE to NULL_TREE, since first of all this slot
1657      shouldn't even be used when current_class_type isn't set, and second,
1658      if we don't touch it here, we're able to use the cache effect if the
1659      next time we're entering a class scope, it is the same class.  */
1660   if (current_class_depth != 1)
1661     {
1662       struct binding_level* b;
1663
1664       /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
1665       for (shadowed = level->class_shadowed;
1666            shadowed;
1667            shadowed = TREE_CHAIN (shadowed))
1668         IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
1669
1670       /* Find the next enclosing class, and recreate
1671          IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
1672       b = level->level_chain;
1673       while (b && b->parm_flag != 2)
1674         b = b->level_chain;
1675
1676       if (b)
1677         for (shadowed = b->class_shadowed;
1678              shadowed;
1679              shadowed = TREE_CHAIN (shadowed))
1680           {
1681             tree t;
1682
1683             t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
1684             while (t && BINDING_LEVEL (t) != b)
1685               t = TREE_CHAIN (t);
1686
1687             if (t)
1688               IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
1689                 = BINDING_VALUE (t);
1690           }
1691     }
1692   else
1693     /* Remember to save what IDENTIFIER's were bound in this scope so we
1694        can recover from cache misses.  */
1695     {
1696       previous_class_type = current_class_type;
1697       previous_class_values = class_binding_level->class_shadowed;
1698     }
1699   for (shadowed = level->type_shadowed;
1700        shadowed;
1701        shadowed = TREE_CHAIN (shadowed))
1702     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (shadowed), TREE_VALUE (shadowed));
1703
1704   /* Remove the bindings for all of the class-level declarations.  */
1705   for (shadowed = level->class_shadowed;
1706        shadowed;
1707        shadowed = TREE_CHAIN (shadowed))
1708     pop_binding (TREE_PURPOSE (shadowed), TREE_TYPE (shadowed));
1709
1710   GNU_xref_end_scope ((HOST_WIDE_INT) class_binding_level,
1711                       (HOST_WIDE_INT) class_binding_level->level_chain,
1712                       class_binding_level->parm_flag,
1713                       class_binding_level->keep);
1714
1715   /* Now, pop out of the binding level which we created up in the
1716      `pushlevel_class' routine.  */
1717 #if defined(DEBUG_CP_BINDING_LEVELS)
1718   is_class_level = 1;
1719 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
1720
1721   pop_binding_level ();
1722 }
1723
1724 /* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
1725    for any names in enclosing classes.  */
1726
1727 void
1728 clear_identifier_class_values ()
1729 {
1730   tree t;
1731
1732   if (!class_binding_level)
1733     return;
1734
1735   for (t = class_binding_level->class_shadowed;
1736        t;
1737        t = TREE_CHAIN (t))
1738     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
1739 }
1740
1741 /* Returns non-zero if T is a virtual function table.  */
1742
1743 int
1744 vtable_decl_p (t, data)
1745      tree t;
1746      void *data ATTRIBUTE_UNUSED;
1747 {
1748   return (TREE_CODE (t) == VAR_DECL && DECL_VIRTUAL_P (t));
1749 }
1750
1751 /* Returns non-zero if T is a TYPE_DECL for a type with virtual
1752    functions.  */
1753
1754 int
1755 vtype_decl_p (t, data)
1756      tree t;
1757      void *data ATTRIBUTE_UNUSED;
1758 {
1759   return (TREE_CODE (t) == TYPE_DECL
1760           && TREE_CODE (TREE_TYPE (t)) == RECORD_TYPE
1761           && TYPE_POLYMORPHIC_P (TREE_TYPE (t)));
1762 }
1763
1764 /* Return the declarations that are members of the namespace NS.  */
1765
1766 tree
1767 cp_namespace_decls (ns)
1768      tree ns;
1769 {
1770   return NAMESPACE_LEVEL (ns)->names;
1771 }
1772
1773 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
1774    itself, calling F for each.  The DATA is passed to F as well.  */
1775
1776 static int
1777 walk_namespaces_r (namespace, f, data)
1778      tree namespace;
1779      walk_namespaces_fn f;
1780      void *data;
1781 {
1782   tree current;
1783   int result = 0;
1784
1785   result |= (*f) (namespace, data);
1786
1787   for (current = cp_namespace_decls (namespace);
1788        current;
1789        current = TREE_CHAIN (current))
1790     {
1791       if (TREE_CODE (current) != NAMESPACE_DECL
1792           || DECL_NAMESPACE_ALIAS (current))
1793         continue;
1794       if (!DECL_LANG_SPECIFIC (current))
1795         {
1796           /* Hmm. std. */
1797           my_friendly_assert (current == std_node, 393);
1798           continue;
1799         }
1800
1801       /* We found a namespace.  */
1802       result |= walk_namespaces_r (current, f, data);
1803     }
1804
1805   return result;
1806 }
1807
1808 /* Walk all the namespaces, calling F for each.  The DATA is passed to
1809    F as well.  */
1810
1811 int
1812 walk_namespaces (f, data)
1813      walk_namespaces_fn f;
1814      void *data;
1815 {
1816   return walk_namespaces_r (global_namespace, f, data);
1817 }
1818
1819 struct walk_globals_data {
1820   walk_globals_pred p;
1821   walk_globals_fn f;
1822   void *data;
1823 };
1824
1825 /* Walk the global declarations in NAMESPACE.  Whenever one is found
1826    for which P returns non-zero, call F with its address.  If any call
1827    to F returns a non-zero value, return a non-zero value.  */
1828
1829 static int
1830 walk_globals_r (namespace, data)
1831      tree namespace;
1832      void *data;
1833 {
1834   struct walk_globals_data* wgd = (struct walk_globals_data *) data;
1835   walk_globals_pred p = wgd->p;
1836   walk_globals_fn f = wgd->f;
1837   void *d = wgd->data;
1838   tree *t;
1839   int result = 0;
1840
1841   t = &NAMESPACE_LEVEL (namespace)->names;
1842
1843   while (*t)
1844     {
1845       tree glbl = *t;
1846
1847       if ((*p) (glbl, d))
1848         result |= (*f) (t, d);
1849
1850       /* If F changed *T, then *T still points at the next item to
1851          examine.  */
1852       if (*t == glbl)
1853         t = &TREE_CHAIN (*t);
1854     }
1855
1856   return result;
1857 }
1858
1859 /* Walk the global declarations.  Whenever one is found for which P
1860    returns non-zero, call F with its address.  If any call to F
1861    returns a non-zero value, return a non-zero value.  */
1862
1863 int
1864 walk_globals (p, f, data)
1865      walk_globals_pred p;
1866      walk_globals_fn f;
1867      void *data;
1868 {
1869   struct walk_globals_data wgd;
1870   wgd.p = p;
1871   wgd.f = f;
1872   wgd.data = data;
1873
1874   return walk_namespaces (walk_globals_r, &wgd);
1875 }
1876
1877 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
1878    DATA is non-NULL, this is the last time we will call
1879    wrapup_global_declarations for this NAMESPACE.  */
1880
1881 int
1882 wrapup_globals_for_namespace (namespace, data)
1883      tree namespace;
1884      void *data;
1885 {
1886   tree globals = cp_namespace_decls (namespace);
1887   int len = list_length (globals);
1888   tree *vec = (tree *) alloca (sizeof (tree) * len);
1889   int i;
1890   int result;
1891   tree decl;
1892   int last_time = (data != 0);
1893
1894   if (last_time && namespace == global_namespace)
1895     /* Let compile_file handle the global namespace.  */
1896     return 0;
1897
1898   /* Process the decls in reverse order--earliest first.
1899      Put them into VEC from back to front, then take out from front.  */
1900
1901   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
1902     {
1903       /* Pretend we've output an unused static variable.  This ensures
1904          that the toplevel __FUNCTION__ etc won't be emitted, unless
1905          needed. */
1906       if (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)
1907           && !TREE_PUBLIC (decl) && !TREE_USED (decl))
1908         {
1909           TREE_ASM_WRITTEN (decl) = 1;
1910           DECL_IGNORED_P (decl) = 1;
1911         }
1912       vec[len - i - 1] = decl;
1913     }
1914
1915   if (last_time)
1916     {
1917       check_global_declarations (vec, len);
1918       return 0;
1919     }
1920
1921   /* Temporarily mark vtables as external.  That prevents
1922      wrapup_global_declarations from writing them out; we must process
1923      them ourselves in finish_vtable_vardecl.  */
1924   for (i = 0; i < len; ++i)
1925     if (vtable_decl_p (vec[i], /*data=*/0) && !DECL_EXTERNAL (vec[i]))
1926       {
1927         DECL_NOT_REALLY_EXTERN (vec[i]) = 1;
1928         DECL_EXTERNAL (vec[i]) = 1;
1929       }
1930
1931   /* Write out any globals that need to be output.  */
1932   result = wrapup_global_declarations (vec, len);
1933
1934   /* Undo the hack to DECL_EXTERNAL above.  */
1935   for (i = 0; i < len; ++i)
1936     if (vtable_decl_p (vec[i], /*data=*/0)
1937         && DECL_NOT_REALLY_EXTERN (vec[i]))
1938       {
1939         DECL_NOT_REALLY_EXTERN (vec[i]) = 0;
1940         DECL_EXTERNAL (vec[i]) = 0;
1941       }
1942
1943   return result;
1944 }
1945
1946 \f
1947 /* Mark ARG (which is really a struct binding_level **) for GC.  */
1948
1949 static void
1950 mark_binding_level (arg)
1951      void *arg;
1952 {
1953   struct binding_level *lvl = *(struct binding_level **)arg;
1954
1955   while (lvl)
1956     {
1957       ggc_mark_tree (lvl->names);
1958       ggc_mark_tree (lvl->tags);
1959       ggc_mark_tree (lvl->usings);
1960       ggc_mark_tree (lvl->using_directives);
1961       ggc_mark_tree (lvl->class_shadowed);
1962       ggc_mark_tree (lvl->type_shadowed);
1963       ggc_mark_tree (lvl->shadowed_labels);
1964       ggc_mark_tree (lvl->blocks);
1965       ggc_mark_tree (lvl->this_block);
1966       ggc_mark_tree (lvl->this_class);
1967       ggc_mark_tree (lvl->incomplete);
1968       ggc_mark_tree (lvl->dead_vars_from_for);
1969
1970       lvl = lvl->level_chain;
1971     }
1972 }
1973 \f
1974 /* For debugging.  */
1975 static int no_print_functions = 0;
1976 static int no_print_builtins = 0;
1977
1978 void
1979 print_binding_level (lvl)
1980      struct binding_level *lvl;
1981 {
1982   tree t;
1983   int i = 0, len;
1984   fprintf (stderr, " blocks=");
1985   fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
1986   fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d",
1987            list_length (lvl->incomplete), lvl->parm_flag, lvl->keep);
1988   if (lvl->tag_transparent)
1989     fprintf (stderr, " tag-transparent");
1990   if (lvl->more_cleanups_ok)
1991     fprintf (stderr, " more-cleanups-ok");
1992   if (lvl->have_cleanups)
1993     fprintf (stderr, " have-cleanups");
1994   fprintf (stderr, "\n");
1995   if (lvl->names)
1996     {
1997       fprintf (stderr, " names:\t");
1998       /* We can probably fit 3 names to a line?  */
1999       for (t = lvl->names; t; t = TREE_CHAIN (t))
2000         {
2001           if (no_print_functions && (TREE_CODE (t) == FUNCTION_DECL))
2002             continue;
2003           if (no_print_builtins
2004               && (TREE_CODE (t) == TYPE_DECL)
2005               && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>")))
2006             continue;
2007
2008           /* Function decls tend to have longer names.  */
2009           if (TREE_CODE (t) == FUNCTION_DECL)
2010             len = 3;
2011           else
2012             len = 2;
2013           i += len;
2014           if (i > 6)
2015             {
2016               fprintf (stderr, "\n\t");
2017               i = len;
2018             }
2019           print_node_brief (stderr, "", t, 0);
2020           if (t == error_mark_node)
2021             break;
2022         }
2023       if (i)
2024         fprintf (stderr, "\n");
2025     }
2026   if (lvl->tags)
2027     {
2028       fprintf (stderr, " tags:\t");
2029       i = 0;
2030       for (t = lvl->tags; t; t = TREE_CHAIN (t))
2031         {
2032           if (TREE_PURPOSE (t) == NULL_TREE)
2033             len = 3;
2034           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2035             len = 2;
2036           else
2037             len = 4;
2038           i += len;
2039           if (i > 5)
2040             {
2041               fprintf (stderr, "\n\t");
2042               i = len;
2043             }
2044           if (TREE_PURPOSE (t) == NULL_TREE)
2045             {
2046               print_node_brief (stderr, "<unnamed-typedef", TREE_VALUE (t), 0);
2047               fprintf (stderr, ">");
2048             }
2049           else if (TREE_PURPOSE (t) == TYPE_IDENTIFIER (TREE_VALUE (t)))
2050             print_node_brief (stderr, "", TREE_VALUE (t), 0);
2051           else
2052             {
2053               print_node_brief (stderr, "<typedef", TREE_PURPOSE (t), 0);
2054               print_node_brief (stderr, "", TREE_VALUE (t), 0);
2055               fprintf (stderr, ">");
2056             }
2057         }
2058       if (i)
2059         fprintf (stderr, "\n");
2060     }
2061   if (lvl->class_shadowed)
2062     {
2063       fprintf (stderr, " class-shadowed:");
2064       for (t = lvl->class_shadowed; t; t = TREE_CHAIN (t))
2065         {
2066           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2067         }
2068       fprintf (stderr, "\n");
2069     }
2070   if (lvl->type_shadowed)
2071     {
2072       fprintf (stderr, " type-shadowed:");
2073       for (t = lvl->type_shadowed; t; t = TREE_CHAIN (t))
2074         {
2075           fprintf (stderr, " %s ", IDENTIFIER_POINTER (TREE_PURPOSE (t)));
2076         }
2077       fprintf (stderr, "\n");
2078     }
2079 }
2080
2081 void
2082 print_other_binding_stack (stack)
2083      struct binding_level *stack;
2084 {
2085   struct binding_level *level;
2086   for (level = stack; level != global_binding_level; level = level->level_chain)
2087     {
2088       fprintf (stderr, "binding level ");
2089       fprintf (stderr, HOST_PTR_PRINTF, level);
2090       fprintf (stderr, "\n");
2091       print_binding_level (level);
2092     }
2093 }
2094
2095 void
2096 print_binding_stack ()
2097 {
2098   struct binding_level *b;
2099   fprintf (stderr, "current_binding_level=");
2100   fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
2101   fprintf (stderr, "\nclass_binding_level=");
2102   fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
2103   fprintf (stderr, "\nglobal_binding_level=");
2104   fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
2105   fprintf (stderr, "\n");
2106   if (class_binding_level)
2107     {
2108       for (b = class_binding_level; b; b = b->level_chain)
2109         if (b == current_binding_level)
2110           break;
2111       if (b)
2112         b = class_binding_level;
2113       else
2114         b = current_binding_level;
2115     }
2116   else
2117     b = current_binding_level;
2118   print_other_binding_stack (b);
2119   fprintf (stderr, "global:\n");
2120   print_binding_level (global_binding_level);
2121 }
2122
2123 /* Namespace binding access routines: The namespace_bindings field of
2124    the identifier is polymorphic, with three possible values:
2125    NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
2126    indicating the BINDING_VALUE of global_namespace. */
2127
2128 /* Check whether the a binding for the name to scope is known.
2129    Assumes that the bindings of the name are already a list
2130    of bindings. Returns the binding found, or NULL_TREE. */
2131
2132 static tree
2133 find_binding (name, scope)
2134      tree name;
2135      tree scope;
2136 {
2137   tree iter, prev = NULL_TREE;
2138
2139   scope = ORIGINAL_NAMESPACE (scope);
2140
2141   for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
2142        iter = TREE_CHAIN (iter))
2143     {
2144       my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
2145       if (BINDING_SCOPE (iter) == scope)
2146         {
2147           /* Move binding found to the front of the list, so
2148              subsequent lookups will find it faster. */
2149           if (prev)
2150             {
2151               TREE_CHAIN (prev) = TREE_CHAIN (iter);
2152               TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
2153               IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
2154             }
2155           return iter;
2156         }
2157       prev = iter;
2158     }
2159   return NULL_TREE;
2160 }
2161
2162 /* Always returns a binding for name in scope. If the
2163    namespace_bindings is not a list, convert it to one first.
2164    If no binding is found, make a new one. */
2165
2166 tree
2167 binding_for_name (name, scope)
2168      tree name;
2169      tree scope;
2170 {
2171   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2172   tree result;
2173
2174   scope = ORIGINAL_NAMESPACE (scope);
2175
2176   if (b && TREE_CODE (b) != CPLUS_BINDING)
2177     {
2178       /* Get rid of optimization for global scope. */
2179       IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
2180       BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
2181       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2182     }
2183   if (b && (result = find_binding (name, scope)))
2184     return result;
2185   /* Not found, make a new one. */
2186   result = make_node (CPLUS_BINDING);
2187   TREE_CHAIN (result) = b;
2188   IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
2189   BINDING_SCOPE (result) = scope;
2190   BINDING_TYPE (result) = NULL_TREE;
2191   BINDING_VALUE (result) = NULL_TREE;
2192   return result;
2193 }
2194
2195 /* Return the binding value for name in scope, considering that
2196    namespace_binding may or may not be a list of CPLUS_BINDINGS. */
2197
2198 tree
2199 namespace_binding (name, scope)
2200      tree name;
2201      tree scope;
2202 {
2203   tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2204   if (b == NULL_TREE)
2205     return NULL_TREE;
2206   if (scope == NULL_TREE)
2207     scope = global_namespace;
2208   if (TREE_CODE (b) != CPLUS_BINDING)
2209     return (scope == global_namespace) ? b : NULL_TREE;
2210   name = find_binding (name,scope);
2211   if (name == NULL_TREE)
2212     return name;
2213   return BINDING_VALUE (name);
2214 }
2215
2216 /* Set the binding value for name in scope. If modifying the binding
2217    of global_namespace is attempted, try to optimize it. */
2218
2219 void
2220 set_namespace_binding (name, scope, val)
2221      tree name;
2222      tree scope;
2223      tree val;
2224 {
2225   tree b;
2226
2227   if (scope == NULL_TREE)
2228     scope = global_namespace;
2229
2230   if (scope == global_namespace)
2231     {
2232       b = IDENTIFIER_NAMESPACE_BINDINGS (name);
2233       if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
2234         {
2235           IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
2236           return;
2237         }
2238     }
2239   b = binding_for_name (name, scope);
2240   BINDING_VALUE (b) = val;
2241 }
2242
2243 /* Push into the scope of the NAME namespace.  If NAME is NULL_TREE, then we
2244    select a name that is unique to this compilation unit.  */
2245
2246 void
2247 push_namespace (name)
2248      tree name;
2249 {
2250   tree d = NULL_TREE;
2251   int need_new = 1;
2252   int implicit_use = 0;
2253   int global = 0;
2254   if (!global_namespace)
2255     {
2256       /* This must be ::. */
2257       my_friendly_assert (name == get_identifier ("::"), 377);
2258       global = 1;
2259     }
2260   else if (!name)
2261     {
2262       /* The name of anonymous namespace is unique for the translation
2263          unit.  */
2264       if (!anonymous_namespace_name)
2265         anonymous_namespace_name = get_file_function_name ('N');
2266       name = anonymous_namespace_name;
2267       d = IDENTIFIER_NAMESPACE_VALUE (name);
2268       if (d)
2269         /* Reopening anonymous namespace.  */
2270         need_new = 0;
2271       implicit_use = 1;
2272     }
2273   else if (current_namespace == global_namespace
2274            && name == DECL_NAME (std_node))
2275     {
2276       in_std++;
2277       return;
2278     }
2279   else
2280     {
2281       /* Check whether this is an extended namespace definition. */
2282       d = IDENTIFIER_NAMESPACE_VALUE (name);
2283       if (d != NULL_TREE && TREE_CODE (d) == NAMESPACE_DECL)
2284         {
2285           need_new = 0;
2286           if (DECL_NAMESPACE_ALIAS (d))
2287             {
2288               cp_error ("namespace alias `%D' not allowed here, assuming `%D'",
2289                         d, DECL_NAMESPACE_ALIAS (d));
2290               d = DECL_NAMESPACE_ALIAS (d);
2291             }
2292         }
2293     }
2294
2295   if (need_new)
2296     {
2297       /* Make a new namespace, binding the name to it. */
2298       d = build_lang_decl (NAMESPACE_DECL, name, void_type_node);
2299       /* The global namespace is not pushed, and the global binding
2300          level is set elsewhere.  */
2301       if (!global)
2302         {
2303           d = pushdecl (d);
2304           pushlevel (0);
2305           declare_namespace_level ();
2306           NAMESPACE_LEVEL (d) = current_binding_level;
2307         }
2308     }
2309   else
2310     resume_binding_level (NAMESPACE_LEVEL (d));
2311
2312   if (implicit_use)
2313     do_using_directive (d);
2314   /* Enter the name space. */
2315   current_namespace = d;
2316 }
2317
2318 /* Pop from the scope of the current namespace.  */
2319
2320 void
2321 pop_namespace ()
2322 {
2323   if (current_namespace == global_namespace)
2324     {
2325       my_friendly_assert (in_std>0, 980421);
2326       in_std--;
2327       return;
2328     }
2329   current_namespace = CP_DECL_CONTEXT (current_namespace);
2330   /* The binding level is not popped, as it might be re-opened later.  */
2331   suspend_binding_level ();
2332 }
2333
2334 /* Push into the scope of the namespace NS, even if it is deeply
2335    nested within another namespace.  */
2336
2337 void
2338 push_nested_namespace (ns)
2339      tree ns;
2340 {
2341   if (ns == global_namespace)
2342     push_to_top_level ();
2343   else
2344     {
2345       push_nested_namespace (CP_DECL_CONTEXT (ns));
2346       push_namespace (DECL_NAME (ns));
2347     }
2348 }
2349
2350 /* Pop back from the scope of the namespace NS, which was previously
2351    entered with push_nested_namespace.  */
2352
2353 void
2354 pop_nested_namespace (ns)
2355      tree ns;
2356 {
2357   while (ns != global_namespace)
2358     {
2359       pop_namespace ();
2360       ns = CP_DECL_CONTEXT (ns);
2361     }
2362
2363   pop_from_top_level ();
2364 }
2365
2366 \f
2367 /* Subroutines for reverting temporarily to top-level for instantiation
2368    of templates and such.  We actually need to clear out the class- and
2369    local-value slots of all identifiers, so that only the global values
2370    are at all visible.  Simply setting current_binding_level to the global
2371    scope isn't enough, because more binding levels may be pushed.  */
2372 struct saved_scope *scope_chain;
2373
2374 /* Mark ST for GC.  */
2375
2376 static void
2377 mark_stmt_tree (st)
2378      struct stmt_tree *st;
2379 {
2380   ggc_mark_tree (st->x_last_stmt);
2381   ggc_mark_tree (st->x_last_expr_type);
2382 }
2383
2384 /* Mark ARG (which is really a struct saved_scope **) for GC.  */
2385
2386 static void
2387 mark_saved_scope (arg)
2388      void *arg;
2389 {
2390   struct saved_scope *t = *(struct saved_scope **)arg;
2391   while (t)
2392     {
2393       mark_binding_level (&t->class_bindings);
2394       ggc_mark_tree (t->old_bindings);
2395       ggc_mark_tree (t->old_namespace);
2396       ggc_mark_tree (t->class_name);
2397       ggc_mark_tree (t->class_type);
2398       ggc_mark_tree (t->access_specifier);
2399       ggc_mark_tree (t->function_decl);
2400       if (t->lang_base)
2401         ggc_mark_tree_varray (t->lang_base);
2402       ggc_mark_tree (t->lang_name);
2403       ggc_mark_tree (t->x_function_parms);
2404       ggc_mark_tree (t->template_parms);
2405       ggc_mark_tree (t->x_previous_class_type);
2406       ggc_mark_tree (t->x_previous_class_values);
2407       ggc_mark_tree (t->x_saved_tree);
2408       ggc_mark_tree (t->incomplete);
2409       ggc_mark_tree (t->lookups);
2410
2411       mark_stmt_tree (&t->x_stmt_tree);
2412       mark_binding_level (&t->bindings);
2413       t = t->prev;
2414     }
2415 }
2416
2417 static tree
2418 store_bindings (names, old_bindings)
2419      tree names, old_bindings;
2420 {
2421   tree t;
2422   for (t = names; t; t = TREE_CHAIN (t))
2423     {
2424       tree binding, t1, id;
2425
2426       if (TREE_CODE (t) == TREE_LIST)
2427         id = TREE_PURPOSE (t);
2428       else
2429         id = DECL_NAME (t);
2430
2431       if (!id
2432           /* Note that we may have an IDENTIFIER_CLASS_VALUE even when
2433              we have no IDENTIFIER_BINDING if we have left the class
2434              scope, but cached the class-level declarations.  */
2435           || !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
2436         continue;
2437
2438       for (t1 = old_bindings; t1; t1 = TREE_CHAIN (t1))
2439         if (TREE_VEC_ELT (t1, 0) == id)
2440           goto skip_it;
2441
2442       binding = make_tree_vec (4);
2443
2444       if (id)
2445         {
2446           my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
2447           TREE_VEC_ELT (binding, 0) = id;
2448           TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
2449           TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
2450           TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
2451           IDENTIFIER_BINDING (id) = NULL_TREE;
2452           IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
2453         }
2454       TREE_CHAIN (binding) = old_bindings;
2455       old_bindings = binding;
2456     skip_it:
2457       ;
2458     }
2459   return old_bindings;
2460 }
2461
2462 void
2463 maybe_push_to_top_level (pseudo)
2464      int pseudo;
2465 {
2466   struct saved_scope *s;
2467   struct binding_level *b;
2468   tree old_bindings;
2469   int need_pop;
2470
2471   s = (struct saved_scope *) xcalloc (1, sizeof (struct saved_scope));
2472
2473   b = scope_chain ? current_binding_level : 0;
2474
2475   /* If we're in the middle of some function, save our state.  */
2476   if (cfun)
2477     {
2478       need_pop = 1;
2479       push_function_context_to (NULL_TREE);
2480     }
2481   else
2482     need_pop = 0;
2483
2484   old_bindings = NULL_TREE;
2485   if (scope_chain && previous_class_type)
2486     old_bindings = store_bindings (previous_class_values, old_bindings);
2487
2488   /* Have to include global_binding_level, because class-level decls
2489      aren't listed anywhere useful.  */
2490   for (; b; b = b->level_chain)
2491     {
2492       tree t;
2493
2494       /* Template IDs are inserted into the global level. If they were
2495          inserted into namespace level, finish_file wouldn't find them
2496          when doing pending instantiations. Therefore, don't stop at
2497          namespace level, but continue until :: .  */
2498       if (b == global_binding_level || (pseudo && b->template_parms_p))
2499         break;
2500
2501       old_bindings = store_bindings (b->names, old_bindings);
2502       /* We also need to check class_shadowed to save class-level type
2503          bindings, since pushclass doesn't fill in b->names.  */
2504       if (b->parm_flag == 2)
2505         old_bindings = store_bindings (b->class_shadowed, old_bindings);
2506
2507       /* Unwind type-value slots back to top level.  */
2508       for (t = b->type_shadowed; t; t = TREE_CHAIN (t))
2509         SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (t), TREE_VALUE (t));
2510     }
2511   s->prev = scope_chain;
2512   s->old_bindings = old_bindings;
2513   s->bindings = b;
2514   s->need_pop_function_context = need_pop;
2515   s->function_decl = current_function_decl;
2516
2517   scope_chain = s;
2518   current_function_decl = NULL_TREE;
2519   VARRAY_TREE_INIT (current_lang_base, 10, "current_lang_base");
2520   current_lang_stack = &VARRAY_TREE (current_lang_base, 0);
2521   current_lang_name = lang_name_cplusplus;
2522   strict_prototype = strict_prototypes_lang_cplusplus;
2523   current_namespace = global_namespace;
2524 }
2525
2526 void
2527 push_to_top_level ()
2528 {
2529   maybe_push_to_top_level (0);
2530 }
2531
2532 void
2533 pop_from_top_level ()
2534 {
2535   struct saved_scope *s = scope_chain;
2536   tree t;
2537
2538   /* Clear out class-level bindings cache.  */
2539   if (previous_class_type)
2540     invalidate_class_lookup_cache ();
2541
2542   VARRAY_FREE (current_lang_base);
2543
2544   scope_chain = s->prev;
2545   for (t = s->old_bindings; t; t = TREE_CHAIN (t))
2546     {
2547       tree id = TREE_VEC_ELT (t, 0);
2548       if (id)
2549         {
2550           SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
2551           IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
2552           IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
2553         }
2554     }
2555
2556   if (current_lang_name == lang_name_cplusplus)
2557     strict_prototype = strict_prototypes_lang_cplusplus;
2558   else if (current_lang_name == lang_name_c)
2559     strict_prototype = strict_prototypes_lang_c;
2560
2561   /* If we were in the middle of compiling a function, restore our
2562      state.  */
2563   if (s->need_pop_function_context)
2564     pop_function_context_from (NULL_TREE);
2565   current_function_decl = s->function_decl;
2566
2567   free (s);
2568 }
2569 \f
2570 /* Push a definition of struct, union or enum tag "name".
2571    into binding_level "b".   "type" should be the type node,
2572    We assume that the tag "name" is not already defined.
2573
2574    Note that the definition may really be just a forward reference.
2575    In that case, the TYPE_SIZE will be a NULL_TREE.
2576
2577    C++ gratuitously puts all these tags in the name space.  */
2578
2579 /* When setting the IDENTIFIER_TYPE_VALUE field of an identifier ID,
2580    record the shadowed value for this binding contour.  TYPE is
2581    the type that ID maps to.  */
2582
2583 static void
2584 set_identifier_type_value_with_scope (id, type, b)
2585      tree id;
2586      tree type;
2587      struct binding_level *b;
2588 {
2589   if (!b->namespace_p)
2590     {
2591       /* Shadow the marker, not the real thing, so that the marker
2592          gets restored later. */
2593       tree old_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
2594       b->type_shadowed
2595         = tree_cons (id, old_type_value, b->type_shadowed);
2596     }
2597   else
2598     {
2599       tree binding = binding_for_name (id, current_namespace);
2600       BINDING_TYPE (binding) = type;
2601       /* Store marker instead of real type. */
2602       type = global_type_node;
2603     }
2604   SET_IDENTIFIER_TYPE_VALUE (id, type);
2605 }
2606
2607 /* As set_identifier_type_value_with_scope, but using current_binding_level.  */
2608
2609 void
2610 set_identifier_type_value (id, type)
2611      tree id;
2612      tree type;
2613 {
2614   set_identifier_type_value_with_scope (id, type, current_binding_level);
2615 }
2616
2617 /* Return the type associated with id. */
2618
2619 tree
2620 identifier_type_value (id)
2621      tree id;
2622 {
2623   /* There is no type with that name, anywhere. */
2624   if (REAL_IDENTIFIER_TYPE_VALUE (id) == NULL_TREE)
2625     return NULL_TREE;
2626   /* This is not the type marker, but the real thing. */
2627   if (REAL_IDENTIFIER_TYPE_VALUE (id) != global_type_node)
2628     return REAL_IDENTIFIER_TYPE_VALUE (id);
2629   /* Have to search for it. It must be on the global level, now.
2630      Ask lookup_name not to return non-types. */
2631   id = lookup_name_real (id, 2, 1, 0);
2632   if (id)
2633     return TREE_TYPE (id);
2634   return NULL_TREE;
2635 }
2636
2637 /* Pop off extraneous binding levels left over due to syntax errors.
2638
2639    We don't pop past namespaces, as they might be valid.  */
2640
2641 void
2642 pop_everything ()
2643 {
2644 #ifdef DEBUG_CP_BINDING_LEVELS
2645   fprintf (stderr, "XXX entering pop_everything ()\n");
2646 #endif
2647   while (!toplevel_bindings_p ())
2648     {
2649       if (current_binding_level->parm_flag == 2)
2650         pop_nested_class ();
2651       else
2652         poplevel (0, 0, 0);
2653     }
2654 #ifdef DEBUG_CP_BINDING_LEVELS
2655   fprintf (stderr, "XXX leaving pop_everything ()\n");
2656 #endif
2657 }
2658
2659 /* The type TYPE is being declared.  If it is a class template, or a
2660    specialization of a class template, do any processing required and
2661    perform error-checking.  If IS_FRIEND is non-zero, this TYPE is
2662    being declared a friend.  B is the binding level at which this TYPE
2663    should be bound.
2664
2665    Returns the TYPE_DECL for TYPE, which may have been altered by this
2666    processing.  */
2667
2668 static tree
2669 maybe_process_template_type_declaration (type, globalize, b)
2670      tree type;
2671      int globalize;
2672      struct binding_level* b;
2673 {
2674   tree decl = TYPE_NAME (type);
2675
2676   if (processing_template_parmlist)
2677     /* You can't declare a new template type in a template parameter
2678        list.  But, you can declare a non-template type:
2679
2680          template <class A*> struct S;
2681
2682        is a forward-declaration of `A'.  */
2683     ;
2684   else
2685     {
2686       maybe_check_template_type (type);
2687
2688       my_friendly_assert (IS_AGGR_TYPE (type)
2689                           || TREE_CODE (type) == ENUMERAL_TYPE, 0);
2690
2691
2692       if (processing_template_decl)
2693         {
2694           /* This may change after the call to
2695              push_template_decl_real, but we want the original value.  */
2696           tree name = DECL_NAME (decl);
2697
2698           decl = push_template_decl_real (decl, globalize);
2699           /* If the current binding level is the binding level for the
2700              template parameters (see the comment in
2701              begin_template_parm_list) and the enclosing level is a class
2702              scope, and we're not looking at a friend, push the
2703              declaration of the member class into the class scope.  In the
2704              friend case, push_template_decl will already have put the
2705              friend into global scope, if appropriate.  */
2706           if (TREE_CODE (type) != ENUMERAL_TYPE
2707               && !globalize && b->template_parms_p
2708               && b->level_chain->parm_flag == 2)
2709             {
2710               finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
2711               /* Put this tag on the list of tags for the class, since
2712                  that won't happen below because B is not the class
2713                  binding level, but is instead the pseudo-global level.  */
2714               b->level_chain->tags =
2715                 tree_cons (name, type, b->level_chain->tags);
2716               if (!COMPLETE_TYPE_P (current_class_type))
2717                 CLASSTYPE_TAGS (current_class_type) = b->level_chain->tags;
2718             }
2719         }
2720     }
2721
2722   return decl;
2723 }
2724
2725 /* In C++, you don't have to write `struct S' to refer to `S'; you
2726    can just use `S'.  We accomplish this by creating a TYPE_DECL as
2727    if the user had written `typedef struct S S'.  Create and return
2728    the TYPE_DECL for TYPE.  */
2729
2730 tree
2731 create_implicit_typedef (name, type)
2732      tree name;
2733      tree type;
2734 {
2735   tree decl;
2736
2737   decl = build_decl (TYPE_DECL, name, type);
2738   SET_DECL_ARTIFICIAL (decl);
2739   /* There are other implicit type declarations, like the one *within*
2740      a class that allows you to write `S::S'.  We must distinguish
2741      amongst these.  */
2742   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
2743   TYPE_NAME (type) = decl;
2744
2745   return decl;
2746 }
2747
2748 /* Push a tag name NAME for struct/class/union/enum type TYPE.
2749    Normally put it into the inner-most non-tag-transparent scope,
2750    but if GLOBALIZE is true, put it in the inner-most non-class scope.
2751    The latter is needed for implicit declarations.  */
2752
2753 void
2754 pushtag (name, type, globalize)
2755      tree name, type;
2756      int globalize;
2757 {
2758   register struct binding_level *b;
2759
2760   b = current_binding_level;
2761   while (b->tag_transparent
2762          || (globalize && b->parm_flag == 2))
2763     b = b->level_chain;
2764
2765   b->tags = tree_cons (name, type, b->tags);
2766
2767   if (name)
2768     {
2769       /* Do C++ gratuitous typedefing.  */
2770       if (IDENTIFIER_TYPE_VALUE (name) != type)
2771         {
2772           register tree d = NULL_TREE;
2773           int in_class = 0;
2774           tree context = TYPE_CONTEXT (type);
2775
2776           if (! context)
2777             {
2778               tree cs = current_scope ();
2779
2780               if (! globalize)
2781                 context = cs;
2782               else if (cs != NULL_TREE && TYPE_P (cs))
2783                 /* When declaring a friend class of a local class, we want
2784                    to inject the newly named class into the scope
2785                    containing the local class, not the namespace scope.  */
2786                 context = decl_function_context (get_type_decl (cs));
2787             }
2788           if (!context)
2789             context = current_namespace;
2790
2791           if ((b->template_parms_p && b->level_chain->parm_flag == 2)
2792               || b->parm_flag == 2)
2793             in_class = 1;
2794
2795           if (current_lang_name == lang_name_java)
2796             TYPE_FOR_JAVA (type) = 1;
2797
2798           d = create_implicit_typedef (name, type);
2799           DECL_CONTEXT (d) = FROB_CONTEXT (context);
2800           if (! in_class)
2801             set_identifier_type_value_with_scope (name, type, b);
2802
2803           d = maybe_process_template_type_declaration (type,
2804                                                        globalize, b);
2805
2806           if (b->parm_flag == 2)
2807             {
2808               if (!PROCESSING_REAL_TEMPLATE_DECL_P ())
2809                 /* Put this TYPE_DECL on the TYPE_FIELDS list for the
2810                    class.  But if it's a member template class, we
2811                    want the TEMPLATE_DECL, not the TYPE_DECL, so this
2812                    is done later.  */
2813                 finish_member_declaration (d);
2814               else
2815                 pushdecl_class_level (d);
2816             }
2817           else
2818             d = pushdecl_with_scope (d, b);
2819
2820           if (ANON_AGGRNAME_P (name))
2821             DECL_IGNORED_P (d) = 1;
2822
2823           TYPE_CONTEXT (type) = DECL_CONTEXT (d);
2824           DECL_ASSEMBLER_NAME (d) = DECL_NAME (d);
2825           if (!uses_template_parms (type))
2826             DECL_ASSEMBLER_NAME (d)
2827               = get_identifier (build_overload_name (type, 1, 1));
2828         }
2829       if (b->parm_flag == 2)
2830         {
2831           if (!COMPLETE_TYPE_P (current_class_type))
2832             CLASSTYPE_TAGS (current_class_type) = b->tags;
2833         }
2834     }
2835
2836   if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2837     /* Use the canonical TYPE_DECL for this node.  */
2838     TYPE_STUB_DECL (type) = TYPE_NAME (type);
2839   else
2840     {
2841       /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE
2842          will be the tagged type we just added to the current
2843          binding level.  This fake NULL-named TYPE_DECL node helps
2844          dwarfout.c to know when it needs to output a
2845          representation of a tagged type, and it also gives us a
2846          convenient place to record the "scope start" address for
2847          the tagged type.  */
2848
2849       tree d = build_decl (TYPE_DECL, NULL_TREE, type);
2850       TYPE_STUB_DECL (type) = pushdecl_with_scope (d, b);
2851     }
2852 }
2853
2854 /* Counter used to create anonymous type names.  */
2855
2856 static int anon_cnt = 0;
2857
2858 /* Return an IDENTIFIER which can be used as a name for
2859    anonymous structs and unions.  */
2860
2861 tree
2862 make_anon_name ()
2863 {
2864   char buf[32];
2865
2866   sprintf (buf, ANON_AGGRNAME_FORMAT, anon_cnt++);
2867   return get_identifier (buf);
2868 }
2869
2870 /* Clear the TREE_PURPOSE slot of tags which have anonymous typenames.
2871    This keeps dbxout from getting confused.  */
2872
2873 void
2874 clear_anon_tags ()
2875 {
2876   register struct binding_level *b;
2877   register tree tags;
2878   static int last_cnt = 0;
2879
2880   /* Fast out if no new anon names were declared.  */
2881   if (last_cnt == anon_cnt)
2882     return;
2883
2884   b = current_binding_level;
2885   while (b->tag_transparent)
2886     b = b->level_chain;
2887   tags = b->tags;
2888   while (tags)
2889     {
2890       /* A NULL purpose means we have already processed all tags
2891          from here to the end of the list.  */
2892       if (TREE_PURPOSE (tags) == NULL_TREE)
2893         break;
2894       if (ANON_AGGRNAME_P (TREE_PURPOSE (tags)))
2895         TREE_PURPOSE (tags) = NULL_TREE;
2896       tags = TREE_CHAIN (tags);
2897     }
2898   last_cnt = anon_cnt;
2899 }
2900 \f
2901 /* Subroutine of duplicate_decls: return truthvalue of whether
2902    or not types of these decls match.
2903
2904    For C++, we must compare the parameter list so that `int' can match
2905    `int&' in a parameter position, but `int&' is not confused with
2906    `const int&'.  */
2907
2908 int
2909 decls_match (newdecl, olddecl)
2910      tree newdecl, olddecl;
2911 {
2912   int types_match;
2913
2914   if (newdecl == olddecl)
2915     return 1;
2916
2917   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
2918     /* If the two DECLs are not even the same kind of thing, we're not
2919        interested in their types.  */
2920     return 0;
2921
2922   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2923     {
2924       tree f1 = TREE_TYPE (newdecl);
2925       tree f2 = TREE_TYPE (olddecl);
2926       tree p1 = TYPE_ARG_TYPES (f1);
2927       tree p2 = TYPE_ARG_TYPES (f2);
2928
2929       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
2930           && ! (DECL_LANGUAGE (newdecl) == lang_c
2931                 && DECL_LANGUAGE (olddecl) == lang_c))
2932         return 0;
2933
2934       if (TREE_CODE (f1) != TREE_CODE (f2))
2935         return 0;
2936
2937       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
2938         {
2939           if ((! strict_prototypes_lang_c || DECL_BUILT_IN (olddecl))
2940               && DECL_LANGUAGE (olddecl) == lang_c
2941               && p2 == NULL_TREE)
2942             {
2943               types_match = self_promoting_args_p (p1);
2944               if (p1 == void_list_node)
2945                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2946             }
2947           else if (!strict_prototypes_lang_c && DECL_LANGUAGE (olddecl)==lang_c
2948                    && DECL_LANGUAGE (newdecl) == lang_c && p1 == NULL_TREE)
2949             {
2950               types_match = self_promoting_args_p (p2);
2951               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
2952             }
2953           else
2954             types_match = compparms (p1, p2);
2955         }
2956       else
2957         types_match = 0;
2958     }
2959   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2960     {
2961       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
2962                                 DECL_TEMPLATE_PARMS (olddecl)))
2963         return 0;
2964
2965       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2966         types_match = 1;
2967       else
2968         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
2969                                    DECL_TEMPLATE_RESULT (newdecl));
2970     }
2971   else
2972     {
2973       if (TREE_TYPE (newdecl) == error_mark_node)
2974         types_match = TREE_TYPE (olddecl) == error_mark_node;
2975       else if (TREE_TYPE (olddecl) == NULL_TREE)
2976         types_match = TREE_TYPE (newdecl) == NULL_TREE;
2977       else if (TREE_TYPE (newdecl) == NULL_TREE)
2978         types_match = 0;
2979       else
2980         types_match = comptypes (TREE_TYPE (newdecl),
2981                                  TREE_TYPE (olddecl),
2982                                  COMPARE_REDECLARATION);
2983     }
2984
2985   return types_match;
2986 }
2987
2988 /* If NEWDECL is `static' and an `extern' was seen previously,
2989    warn about it.  OLDDECL is the previous declaration.
2990
2991    Note that this does not apply to the C++ case of declaring
2992    a variable `extern const' and then later `const'.
2993
2994    Don't complain about built-in functions, since they are beyond
2995    the user's control.  */
2996
2997 static void
2998 warn_extern_redeclared_static (newdecl, olddecl)
2999      tree newdecl, olddecl;
3000 {
3001   static const char *explicit_extern_static_warning
3002     = "`%D' was declared `extern' and later `static'";
3003   static const char *implicit_extern_static_warning
3004     = "`%D' was declared implicitly `extern' and later `static'";
3005
3006   tree name;
3007
3008   if (TREE_CODE (newdecl) == TYPE_DECL
3009       || TREE_CODE (newdecl) == TEMPLATE_DECL)
3010     return;
3011
3012   /* Don't get confused by static member functions; that's a different
3013      use of `static'.  */
3014   if (TREE_CODE (newdecl) == FUNCTION_DECL
3015       && DECL_STATIC_FUNCTION_P (newdecl))
3016     return;
3017
3018   /* If the old declaration was `static', or the new one isn't, then
3019      then everything is OK.  */
3020   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
3021     return;
3022
3023   /* It's OK to declare a builtin function as `static'.  */
3024   if (TREE_CODE (olddecl) == FUNCTION_DECL
3025       && DECL_ARTIFICIAL (olddecl))
3026     return;
3027
3028   name = DECL_ASSEMBLER_NAME (newdecl);
3029   cp_pedwarn (IDENTIFIER_IMPLICIT_DECL (name)
3030               ? implicit_extern_static_warning
3031               : explicit_extern_static_warning, newdecl);
3032   cp_pedwarn_at ("previous declaration of `%D'", olddecl);
3033 }
3034
3035 /* Handle when a new declaration NEWDECL has the same name as an old
3036    one OLDDECL in the same binding contour.  Prints an error message
3037    if appropriate.
3038
3039    If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
3040    Otherwise, return 0.  */
3041
3042 int
3043 duplicate_decls (newdecl, olddecl)
3044      tree newdecl, olddecl;
3045 {
3046   unsigned olddecl_uid = DECL_UID (olddecl);
3047   int olddecl_friend = 0, types_match = 0;
3048   int new_defines_function = 0;
3049
3050   if (newdecl == olddecl)
3051     return 1;
3052
3053   types_match = decls_match (newdecl, olddecl);
3054
3055   /* If either the type of the new decl or the type of the old decl is an
3056      error_mark_node, then that implies that we have already issued an
3057      error (earlier) for some bogus type specification, and in that case,
3058      it is rather pointless to harass the user with yet more error message
3059      about the same declaration, so just pretend the types match here.  */
3060   if (TREE_TYPE (newdecl) == error_mark_node
3061       || TREE_TYPE (olddecl) == error_mark_node)
3062     types_match = 1;
3063
3064   /* Check for redeclaration and other discrepancies. */
3065   if (TREE_CODE (olddecl) == FUNCTION_DECL
3066       && DECL_ARTIFICIAL (olddecl))
3067     {
3068       if (TREE_CODE (newdecl) != FUNCTION_DECL)
3069         {
3070           /* If you declare a built-in or predefined function name as static,
3071              the old definition is overridden, but optionally warn this was a
3072              bad choice of name.  */
3073           if (! TREE_PUBLIC (newdecl))
3074             {
3075               if (warn_shadow)
3076                 cp_warning ("shadowing %s function `%#D'",
3077                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3078                             olddecl);
3079               /* Discard the old built-in function.  */
3080               return 0;
3081             }
3082           /* If the built-in is not ansi, then programs can override
3083              it even globally without an error.  */
3084           else if (! DECL_BUILT_IN (olddecl))
3085             cp_warning ("library function `%#D' redeclared as non-function `%#D'",
3086                         olddecl, newdecl);
3087           else
3088             {
3089               cp_error ("declaration of `%#D'", newdecl);
3090               cp_error ("conflicts with built-in declaration `%#D'",
3091                         olddecl);
3092             }
3093           return 0;
3094         }
3095       else if (!types_match)
3096         {
3097           if ((DECL_LANGUAGE (newdecl) == lang_c
3098                && DECL_LANGUAGE (olddecl) == lang_c)
3099               || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3100                             TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3101             {
3102               /* A near match; override the builtin.  */
3103
3104               if (TREE_PUBLIC (newdecl))
3105                 {
3106                   cp_warning ("new declaration `%#D'", newdecl);
3107                   cp_warning ("ambiguates built-in declaration `%#D'",
3108                               olddecl);
3109                 }
3110               else if (warn_shadow)
3111                 cp_warning ("shadowing %s function `%#D'",
3112                             DECL_BUILT_IN (olddecl) ? "built-in" : "library",
3113                             olddecl);
3114             }
3115           else
3116             /* Discard the old built-in function.  */
3117             return 0;
3118         }
3119
3120       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
3121         {
3122           /* If a builtin function is redeclared as `static', merge
3123              the declarations, but make the original one static.  */
3124           DECL_THIS_STATIC (olddecl) = 1;
3125           TREE_PUBLIC (olddecl) = 0;
3126
3127           /* Make the olddeclaration consistent with the new one so that
3128              all remnants of the builtin-ness of this function will be
3129              banished.  */
3130           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3131           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3132           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3133           SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (newdecl),
3134                                        newdecl);
3135         }
3136     }
3137   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
3138     {
3139       if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
3140            && TREE_CODE (newdecl) != TYPE_DECL
3141            && ! (TREE_CODE (newdecl) == TEMPLATE_DECL
3142                  && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL))
3143           || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
3144               && TREE_CODE (olddecl) != TYPE_DECL
3145               && ! (TREE_CODE (olddecl) == TEMPLATE_DECL
3146                     && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
3147                         == TYPE_DECL))))
3148         {
3149           /* We do nothing special here, because C++ does such nasty
3150              things with TYPE_DECLs.  Instead, just let the TYPE_DECL
3151              get shadowed, and know that if we need to find a TYPE_DECL
3152              for a given name, we can look in the IDENTIFIER_TYPE_VALUE
3153              slot of the identifier.  */
3154           return 0;
3155         }
3156
3157       if ((TREE_CODE (newdecl) == FUNCTION_DECL
3158            && DECL_FUNCTION_TEMPLATE_P (olddecl))
3159           || (TREE_CODE (olddecl) == FUNCTION_DECL
3160               && DECL_FUNCTION_TEMPLATE_P (newdecl)))
3161         return 0;
3162
3163       cp_error ("`%#D' redeclared as different kind of symbol", newdecl);
3164       if (TREE_CODE (olddecl) == TREE_LIST)
3165         olddecl = TREE_VALUE (olddecl);
3166       cp_error_at ("previous declaration of `%#D'", olddecl);
3167
3168       /* New decl is completely inconsistent with the old one =>
3169          tell caller to replace the old one.  */
3170
3171       return 0;
3172     }
3173   else if (!types_match)
3174     {
3175       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
3176         /* These are certainly not duplicate declarations; they're
3177            from different scopes.  */
3178         return 0;
3179
3180       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3181         {
3182           /* The name of a class template may not be declared to refer to
3183              any other template, class, function, object, namespace, value,
3184              or type in the same scope.  */
3185           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
3186               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
3187             {
3188               cp_error ("declaration of template `%#D'", newdecl);
3189               cp_error_at ("conflicts with previous declaration `%#D'",
3190                            olddecl);
3191             }
3192           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
3193                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
3194                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
3195                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
3196                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
3197                                            DECL_TEMPLATE_PARMS (olddecl)))
3198             {
3199               cp_error ("new declaration `%#D'", newdecl);
3200               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3201             }
3202           return 0;
3203         }
3204       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3205         {
3206           if (DECL_LANGUAGE (newdecl) == lang_c
3207               && DECL_LANGUAGE (olddecl) == lang_c)
3208             {
3209               cp_error ("declaration of C function `%#D' conflicts with",
3210                         newdecl);
3211               cp_error_at ("previous declaration `%#D' here", olddecl);
3212             }
3213           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
3214                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
3215             {
3216               cp_error ("new declaration `%#D'", newdecl);
3217               cp_error_at ("ambiguates old declaration `%#D'", olddecl);
3218             }
3219           else
3220             return 0;
3221         }
3222
3223       /* Already complained about this, so don't do so again.  */
3224       else if (current_class_type == NULL_TREE
3225           || IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (newdecl)) != current_class_type)
3226         {
3227           cp_error ("conflicting types for `%#D'", newdecl);
3228           cp_error_at ("previous declaration as `%#D'", olddecl);
3229         }
3230     }
3231   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3232             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
3233                  && (!DECL_TEMPLATE_INFO (newdecl)
3234                      || (DECL_TI_TEMPLATE (newdecl)
3235                          != DECL_TI_TEMPLATE (olddecl))))
3236                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
3237                     && (!DECL_TEMPLATE_INFO (olddecl)
3238                         || (DECL_TI_TEMPLATE (olddecl)
3239                             != DECL_TI_TEMPLATE (newdecl))))))
3240     /* It's OK to have a template specialization and a non-template
3241        with the same type, or to have specializations of two
3242        different templates with the same type.  Note that if one is a
3243        specialization, and the other is an instantiation of the same
3244        template, that we do not exit at this point.  That situation
3245        can occur if we instantiate a template class, and then
3246        specialize one of its methods.  This situation is legal, but
3247        the declarations must be merged in the usual way.  */
3248     return 0;
3249   else if (TREE_CODE (newdecl) == FUNCTION_DECL
3250            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
3251                 && !DECL_USE_TEMPLATE (newdecl))
3252                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
3253                    && !DECL_USE_TEMPLATE (olddecl))))
3254     /* One of the declarations is a template instantiation, and the
3255        other is not a template at all.  That's OK.  */
3256     return 0;
3257   else if (TREE_CODE (newdecl) == NAMESPACE_DECL
3258            && DECL_NAMESPACE_ALIAS (newdecl)
3259            && DECL_NAMESPACE_ALIAS (newdecl) == DECL_NAMESPACE_ALIAS (olddecl))
3260     /* Redeclaration of namespace alias, ignore it. */
3261     return 1;
3262   else
3263     {
3264       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
3265       if (errmsg)
3266         {
3267           cp_error (errmsg, newdecl);
3268           if (DECL_NAME (olddecl) != NULL_TREE)
3269             cp_error_at ((DECL_INITIAL (olddecl)
3270                           && namespace_bindings_p ())
3271                          ? "`%#D' previously defined here"
3272                          : "`%#D' previously declared here", olddecl);
3273         }
3274       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3275                && DECL_INITIAL (olddecl) != NULL_TREE
3276                && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == NULL_TREE
3277                && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != NULL_TREE)
3278         {
3279           /* Prototype decl follows defn w/o prototype.  */
3280           cp_warning_at ("prototype for `%#D'", newdecl);
3281           cp_warning_at ("follows non-prototype definition here", olddecl);
3282         }
3283       else if (TREE_CODE (olddecl) == FUNCTION_DECL
3284                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
3285         {
3286           /* extern "C" int foo ();
3287              int foo () { bar (); }
3288              is OK.  */
3289           if (current_lang_stack
3290               == &VARRAY_TREE (current_lang_base, 0))
3291             DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3292           else
3293             {
3294               cp_error_at ("previous declaration of `%#D' with %L linkage",
3295                            olddecl, DECL_LANGUAGE (olddecl));
3296               cp_error ("conflicts with new declaration with %L linkage",
3297                         DECL_LANGUAGE (newdecl));
3298             }
3299         }
3300
3301       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
3302         ;
3303       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
3304         {
3305           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
3306           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
3307           int i = 1;
3308
3309           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
3310             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
3311
3312           for (; t1 && t1 != void_list_node;
3313                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
3314             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
3315               {
3316                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
3317                                            TREE_PURPOSE (t2)))
3318                   {
3319                     if (pedantic)
3320                       {
3321                         cp_pedwarn ("default argument given for parameter %d of `%#D'",
3322                                     i, newdecl);
3323                         cp_pedwarn_at ("after previous specification in `%#D'",
3324                                        olddecl);
3325                       }
3326                   }
3327                 else
3328                   {
3329                     cp_error ("default argument given for parameter %d of `%#D'",
3330                               i, newdecl);
3331                     cp_error_at ("after previous specification in `%#D'",
3332                                  olddecl);
3333                   }
3334               }
3335
3336           if (DECL_THIS_INLINE (newdecl) && ! DECL_THIS_INLINE (olddecl)
3337               && TREE_ADDRESSABLE (olddecl) && warn_inline)
3338             {
3339               cp_warning ("`%#D' was used before it was declared inline",
3340                           newdecl);
3341               cp_warning_at ("previous non-inline declaration here",
3342                              olddecl);
3343             }
3344         }
3345     }
3346
3347   /* If new decl is `static' and an `extern' was seen previously,
3348      warn about it.  */
3349   warn_extern_redeclared_static (newdecl, olddecl);
3350
3351   /* We have committed to returning 1 at this point.  */
3352   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3353     {
3354       /* Now that functions must hold information normally held
3355          by field decls, there is extra work to do so that
3356          declaration information does not get destroyed during
3357          definition.  */
3358       if (DECL_VINDEX (olddecl))
3359         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
3360       if (DECL_VIRTUAL_CONTEXT (olddecl))
3361         DECL_VIRTUAL_CONTEXT (newdecl) = DECL_VIRTUAL_CONTEXT (olddecl);
3362       if (DECL_CONTEXT (olddecl))
3363         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
3364       if (DECL_PENDING_INLINE_INFO (newdecl) == (struct pending_inline *)0)
3365         DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
3366       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
3367       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
3368       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
3369       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
3370       DECL_NEEDS_FINAL_OVERRIDER_P (newdecl) |= DECL_NEEDS_FINAL_OVERRIDER_P (olddecl);
3371       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
3372       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
3373
3374       /* Optionally warn about more than one declaration for the same
3375          name, but don't warn about a function declaration followed by a
3376          definition.  */
3377       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
3378           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
3379           /* Don't warn about extern decl followed by definition. */
3380           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
3381           /* Don't warn about friends, let add_friend take care of it. */
3382           && ! DECL_FRIEND_P (newdecl))
3383         {
3384           cp_warning ("redundant redeclaration of `%D' in same scope", newdecl);
3385           cp_warning_at ("previous declaration of `%D'", olddecl);
3386         }
3387     }
3388
3389   /* Deal with C++: must preserve virtual function table size.  */
3390   if (TREE_CODE (olddecl) == TYPE_DECL)
3391     {
3392       register tree newtype = TREE_TYPE (newdecl);
3393       register tree oldtype = TREE_TYPE (olddecl);
3394
3395       if (newtype != error_mark_node && oldtype != error_mark_node
3396           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
3397         {
3398           CLASSTYPE_VSIZE (newtype) = CLASSTYPE_VSIZE (oldtype);
3399           CLASSTYPE_FRIEND_CLASSES (newtype)
3400             = CLASSTYPE_FRIEND_CLASSES (oldtype);
3401         }
3402     }
3403
3404   /* Copy all the DECL_... slots specified in the new decl
3405      except for any that we copy here from the old type.  */
3406   DECL_MACHINE_ATTRIBUTES (newdecl)
3407     = merge_machine_decl_attributes (olddecl, newdecl);
3408
3409   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3410     {
3411       if (! duplicate_decls (DECL_TEMPLATE_RESULT (newdecl),
3412                              DECL_TEMPLATE_RESULT (olddecl)))
3413         cp_error ("invalid redeclaration of %D", newdecl);
3414       TREE_TYPE (olddecl) = TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl));
3415       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
3416         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
3417                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
3418
3419       return 1;
3420     }
3421
3422   if (types_match)
3423     {
3424       /* Automatically handles default parameters.  */
3425       tree oldtype = TREE_TYPE (olddecl);
3426       tree newtype;
3427
3428       /* Merge the data types specified in the two decls.  */
3429       newtype = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
3430
3431       if (TREE_CODE (newdecl) == VAR_DECL)
3432         DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
3433       /* Do this after calling `common_type' so that default
3434          parameters don't confuse us.  */
3435       else if (TREE_CODE (newdecl) == FUNCTION_DECL
3436           && (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl))
3437               != TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl))))
3438         {
3439           TREE_TYPE (newdecl) = build_exception_variant (newtype,
3440                                                          TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)));
3441           TREE_TYPE (olddecl) = build_exception_variant (newtype,
3442                                                          TYPE_RAISES_EXCEPTIONS (oldtype));
3443
3444           if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl))
3445               && DECL_SOURCE_LINE (olddecl) != 0
3446               && flag_exceptions
3447               && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)),
3448                                      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1))
3449             {
3450               cp_error ("declaration of `%F' throws different exceptions",
3451                         newdecl);
3452               cp_error_at ("than previous declaration `%F'", olddecl);
3453             }
3454         }
3455       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
3456
3457       /* Lay the type out, unless already done.  */
3458       if (! same_type_p (newtype, oldtype)
3459           && TREE_TYPE (newdecl) != error_mark_node
3460           && !(processing_template_decl && uses_template_parms (newdecl)))
3461         layout_type (TREE_TYPE (newdecl));
3462
3463       if ((TREE_CODE (newdecl) == VAR_DECL
3464            || TREE_CODE (newdecl) == PARM_DECL
3465            || TREE_CODE (newdecl) == RESULT_DECL
3466            || TREE_CODE (newdecl) == FIELD_DECL
3467            || TREE_CODE (newdecl) == TYPE_DECL)
3468           && !(processing_template_decl && uses_template_parms (newdecl)))
3469         layout_decl (newdecl, 0);
3470
3471       /* Merge the type qualifiers.  */
3472       if (TREE_READONLY (newdecl))
3473         TREE_READONLY (olddecl) = 1;
3474       if (TREE_THIS_VOLATILE (newdecl))
3475         TREE_THIS_VOLATILE (olddecl) = 1;
3476
3477       /* Merge the initialization information.  */
3478       if (DECL_INITIAL (newdecl) == NULL_TREE
3479           && DECL_INITIAL (olddecl) != NULL_TREE)
3480         {
3481           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3482           DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
3483           DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
3484           if (CAN_HAVE_FULL_LANG_DECL_P (newdecl)
3485               && DECL_LANG_SPECIFIC (newdecl)
3486               && DECL_LANG_SPECIFIC (olddecl))
3487             DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
3488         }
3489
3490       /* Merge the section attribute.
3491          We want to issue an error if the sections conflict but that must be
3492          done later in decl_attributes since we are called before attributes
3493          are assigned.  */
3494       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
3495         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
3496
3497       /* Keep the old rtl since we can safely use it.  */
3498       DECL_RTL (newdecl) = DECL_RTL (olddecl);
3499
3500       if (TREE_CODE (newdecl) == FUNCTION_DECL)
3501         {
3502           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
3503             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
3504           DECL_NO_CHECK_MEMORY_USAGE (newdecl)
3505             |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
3506           DECL_NO_LIMIT_STACK (newdecl)
3507             |= DECL_NO_LIMIT_STACK (olddecl);
3508         }
3509     }
3510   /* If cannot merge, then use the new type and qualifiers,
3511      and don't preserve the old rtl.  */
3512   else
3513     {
3514       /* Clean out any memory we had of the old declaration.  */
3515       tree oldstatic = value_member (olddecl, static_aggregates);
3516       if (oldstatic)
3517         TREE_VALUE (oldstatic) = error_mark_node;
3518
3519       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
3520       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
3521       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
3522       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
3523     }
3524
3525   /* Merge the storage class information.  */
3526   DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
3527   DECL_ONE_ONLY (newdecl) |= DECL_ONE_ONLY (olddecl);
3528   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
3529   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
3530   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
3531   if (! DECL_EXTERNAL (olddecl))
3532     DECL_EXTERNAL (newdecl) = 0;
3533
3534   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
3535     {
3536       DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
3537       DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
3538       DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
3539       DECL_TEMPLATE_INSTANTIATED (newdecl)
3540         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
3541       /* Don't really know how much of the language-specific
3542          values we should copy from old to new.  */
3543       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
3544       DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
3545       DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
3546       DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
3547       olddecl_friend = DECL_FRIEND_P (olddecl);
3548
3549       /* Only functions have DECL_BEFRIENDING_CLASSES.  */
3550       if (TREE_CODE (newdecl) == FUNCTION_DECL
3551           || DECL_FUNCTION_TEMPLATE_P (newdecl))
3552         DECL_BEFRIENDING_CLASSES (newdecl)
3553           = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
3554                      DECL_BEFRIENDING_CLASSES (olddecl));
3555     }
3556
3557   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3558     {
3559       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
3560           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
3561         {
3562           /* If newdecl is not a specialization, then it is not a
3563              template-related function at all.  And that means that we
3564              shoud have exited above, returning 0.  */
3565           my_friendly_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl),
3566                               0);
3567
3568           if (TREE_USED (olddecl))
3569             /* From [temp.expl.spec]:
3570
3571                If a template, a member template or the member of a class
3572                template is explicitly specialized then that
3573                specialization shall be declared before the first use of
3574                that specialization that would cause an implicit
3575                instantiation to take place, in every translation unit in
3576                which such a use occurs.  */
3577             cp_error ("explicit specialization of %D after first use",
3578                       olddecl);
3579
3580           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
3581         }
3582       DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
3583
3584       /* If either decl says `inline', this fn is inline, unless its
3585          definition was passed already.  */
3586       if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == NULL_TREE)
3587         DECL_INLINE (olddecl) = 1;
3588       DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
3589
3590       if (! types_match)
3591         {
3592           DECL_LANGUAGE (olddecl) = DECL_LANGUAGE (newdecl);
3593           DECL_ASSEMBLER_NAME (olddecl) = DECL_ASSEMBLER_NAME (newdecl);
3594           DECL_RTL (olddecl) = DECL_RTL (newdecl);
3595         }
3596       if (! types_match || new_defines_function)
3597         {
3598           /* These need to be copied so that the names are available.
3599              Note that if the types do match, we'll preserve inline
3600              info and other bits, but if not, we won't.  */
3601           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
3602           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
3603         }
3604       if (new_defines_function)
3605         /* If defining a function declared with other language
3606            linkage, use the previously declared language linkage.  */
3607         DECL_LANGUAGE (newdecl) = DECL_LANGUAGE (olddecl);
3608       else if (types_match)
3609         {
3610           /* If redeclaring a builtin function, and not a definition,
3611              it stays built in.  */
3612           if (DECL_BUILT_IN (olddecl))
3613             {
3614               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
3615               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
3616               /* If we're keeping the built-in definition, keep the rtl,
3617                  regardless of declaration matches.  */
3618               DECL_RTL (newdecl) = DECL_RTL (olddecl);
3619             }
3620           else
3621             DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
3622
3623           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
3624           if ((DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl)))
3625             /* Previously saved insns go together with
3626                the function's previous definition.  */
3627             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
3628           /* Don't clear out the arguments if we're redefining a function.  */
3629           if (DECL_ARGUMENTS (olddecl))
3630             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
3631         }
3632     }
3633
3634   if (TREE_CODE (newdecl) == NAMESPACE_DECL)
3635     {
3636       NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
3637     }
3638
3639   /* Now preserve various other info from the definition.  */
3640   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
3641   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
3642   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
3643   DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
3644
3645   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3646     {
3647       int function_size;
3648
3649       function_size = sizeof (struct tree_decl);
3650
3651       bcopy ((char *) newdecl + sizeof (struct tree_common),
3652              (char *) olddecl + sizeof (struct tree_common),
3653              function_size - sizeof (struct tree_common));
3654
3655       if (DECL_TEMPLATE_INSTANTIATION (newdecl))
3656         {
3657           /* If newdecl is a template instantiation, it is possible that
3658              the following sequence of events has occurred:
3659
3660              o A friend function was declared in a class template.  The
3661              class template was instantiated.
3662
3663              o The instantiation of the friend declaration was
3664              recorded on the instantiation list, and is newdecl.
3665
3666              o Later, however, instantiate_class_template called pushdecl
3667              on the newdecl to perform name injection.  But, pushdecl in
3668              turn called duplicate_decls when it discovered that another
3669              declaration of a global function with the same name already
3670              existed.
3671
3672              o Here, in duplicate_decls, we decided to clobber newdecl.
3673
3674              If we're going to do that, we'd better make sure that
3675              olddecl, and not newdecl, is on the list of
3676              instantiations so that if we try to do the instantiation
3677              again we won't get the clobbered declaration.  */
3678
3679           tree tmpl = DECL_TI_TEMPLATE (newdecl);
3680           tree decls = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
3681
3682           for (; decls; decls = TREE_CHAIN (decls))
3683             if (TREE_VALUE (decls) == newdecl)
3684               TREE_VALUE (decls) = olddecl;
3685         }
3686     }
3687   else
3688     {
3689       bcopy ((char *) newdecl + sizeof (struct tree_common),
3690              (char *) olddecl + sizeof (struct tree_common),
3691              sizeof (struct tree_decl) - sizeof (struct tree_common)
3692              + tree_code_length [(int)TREE_CODE (newdecl)] * sizeof (char *));
3693     }
3694
3695   DECL_UID (olddecl) = olddecl_uid;
3696   if (olddecl_friend)
3697     DECL_FRIEND_P (olddecl) = 1;
3698
3699   /* NEWDECL contains the merged attribute lists.
3700      Update OLDDECL to be the same.  */
3701   DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
3702
3703   return 1;
3704 }
3705
3706 /* Record a decl-node X as belonging to the current lexical scope.
3707    Check for errors (such as an incompatible declaration for the same
3708    name already seen in the same scope).
3709
3710    Returns either X or an old decl for the same name.
3711    If an old decl is returned, it may have been smashed
3712    to agree with what X says.  */
3713
3714 tree
3715 pushdecl (x)
3716      tree x;
3717 {
3718   register tree t;
3719   register tree name;
3720   int need_new_binding;
3721
3722   /* We shouldn't be calling pushdecl when we're generating RTL for a
3723      function that we already did semantic analysis on previously.  */
3724   my_friendly_assert (!cfun || doing_semantic_analysis_p (),
3725                       19990913);
3726
3727   name = DECL_ASSEMBLER_NAME (x);
3728   need_new_binding = 1;
3729
3730   if (DECL_TEMPLATE_PARM_P (x))
3731     /* Template parameters have no context; they are not X::T even
3732        when declared within a class or namespace.  */
3733     ;
3734   else
3735     {
3736       if (current_function_decl && x != current_function_decl
3737           /* A local declaration for a function doesn't constitute
3738              nesting.  */
3739           && !(TREE_CODE (x) == FUNCTION_DECL && !DECL_INITIAL (x))
3740           /* A local declaration for an `extern' variable is in the
3741              scoped of the current namespace, not the current
3742              function.  */
3743           && !(TREE_CODE (x) == VAR_DECL && DECL_EXTERNAL (x))
3744           && !DECL_CONTEXT (x))
3745         DECL_CONTEXT (x) = current_function_decl;
3746       if (!DECL_CONTEXT (x))
3747         DECL_CONTEXT (x) = FROB_CONTEXT (current_namespace);
3748
3749       /* If this is the declaration for a namespace-scope function,
3750          but the declaration itself is in a local scope, mark the
3751          declaration.  */
3752       if (TREE_CODE (x) == FUNCTION_DECL
3753           && DECL_NAMESPACE_SCOPE_P (x)
3754           && current_function_decl
3755           && x != current_function_decl)
3756         DECL_LOCAL_FUNCTION_P (x) = 1;
3757     }
3758
3759   /* Type are looked up using the DECL_NAME, as that is what the rest of the
3760      compiler wants to use.  */
3761   if (TREE_CODE (x) == TYPE_DECL || TREE_CODE (x) == VAR_DECL
3762       || TREE_CODE (x) == NAMESPACE_DECL)
3763     name = DECL_NAME (x);
3764
3765   if (name)
3766     {
3767 #if 0
3768       /* Not needed...see below.  */
3769       char *file;
3770       int line;
3771 #endif
3772       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3773         name = TREE_OPERAND (name, 0);
3774
3775       /* Namespace-scoped variables are not found in the current level. */
3776       if (TREE_CODE (x) == VAR_DECL && DECL_NAMESPACE_SCOPE_P (x))
3777         t = namespace_binding (name, DECL_CONTEXT (x));
3778       else
3779         t = lookup_name_current_level (name);
3780       if (t == error_mark_node)
3781         {
3782           /* error_mark_node is 0 for a while during initialization!  */
3783           t = NULL_TREE;
3784           cp_error_at ("`%#D' used prior to declaration", x);
3785         }
3786
3787       else if (t != NULL_TREE)
3788         {
3789 #if 0
3790           /* This is turned off until I have time to do it right (bpk).  */
3791           /* With the code below that uses it...  */
3792           file = DECL_SOURCE_FILE (t);
3793           line = DECL_SOURCE_LINE (t);
3794 #endif
3795           if (TREE_CODE (t) == PARM_DECL)
3796             {
3797               if (DECL_CONTEXT (t) == NULL_TREE)
3798                 fatal ("parse errors have confused me too much");
3799
3800               /* Check for duplicate params.  */
3801               if (duplicate_decls (x, t))
3802                 return t;
3803             }
3804           else if (((TREE_CODE (x) == FUNCTION_DECL && DECL_LANGUAGE (x) == lang_c)
3805                     || DECL_FUNCTION_TEMPLATE_P (x))
3806                    && is_overloaded_fn (t))
3807             /* Don't do anything just yet. */;
3808           else if (t == wchar_decl_node)
3809             {
3810               if (pedantic && ! DECL_IN_SYSTEM_HEADER (x))
3811                 cp_pedwarn ("redeclaration of wchar_t as `%T'", TREE_TYPE (x));
3812
3813               /* Throw away the redeclaration.  */
3814               return t;
3815             }
3816           else if (TREE_CODE (t) != TREE_CODE (x))
3817             {
3818               if (duplicate_decls (x, t))
3819                 return t;
3820             }
3821           else if (duplicate_decls (x, t))
3822             {
3823 #if 0
3824               /* This is turned off until I have time to do it right (bpk).  */
3825
3826               /* Also warn if they did a prototype with `static' on it, but
3827                  then later left the `static' off.  */
3828               if (! TREE_PUBLIC (name) && TREE_PUBLIC (x))
3829                 {
3830                   if (DECL_LANG_SPECIFIC (t) && DECL_FRIEND_P (t))
3831                     return t;
3832
3833                   if (extra_warnings)
3834                     {
3835                       cp_warning ("`static' missing from declaration of `%D'",
3836                                   t);
3837                       warning_with_file_and_line (file, line,
3838                                                   "previous declaration of `%s'",
3839                                                   decl_as_string (t, 0));
3840                     }
3841
3842                   /* Now fix things so it'll do what they expect.  */
3843                   if (current_function_decl)
3844                     TREE_PUBLIC (current_function_decl) = 0;
3845                 }
3846               /* Due to interference in memory reclamation (X may be
3847                  obstack-deallocated at this point), we must guard against
3848                  one really special case.  [jason: This should be handled
3849                  by start_function]  */
3850               if (current_function_decl == x)
3851                 current_function_decl = t;
3852 #endif
3853               if (TREE_CODE (t) == TYPE_DECL)
3854                 SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (t));
3855               else if (TREE_CODE (t) == FUNCTION_DECL)
3856                 check_default_args (t);
3857
3858               return t;
3859             }
3860           else if (DECL_MAIN_P (x))
3861             {
3862               /* A redeclaration of main, but not a duplicate of the
3863                  previous one.
3864
3865                  [basic.start.main]
3866
3867                  This function shall not be overloaded.  */
3868               cp_error_at ("invalid redeclaration of `%D'", t);
3869               cp_error ("as `%D'", x);
3870               /* We don't try to push this declaration since that
3871                  causes a crash.  */
3872               return x;
3873             }
3874         }
3875
3876       check_template_shadow (x);
3877
3878       /* If this is a function conjured up by the backend, massage it
3879          so it looks friendly.  */
3880       if (TREE_CODE (x) == FUNCTION_DECL
3881           && ! DECL_LANG_SPECIFIC (x))
3882         {
3883           retrofit_lang_decl (x);
3884           DECL_LANGUAGE (x) = lang_c;
3885         }
3886
3887       if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_FUNCTION_MEMBER_P (x))
3888         {
3889           t = push_overloaded_decl (x, PUSH_LOCAL);
3890           if (t != x)
3891             return t;
3892           if (!namespace_bindings_p ())
3893             /* We do not need to create a binding for this name;
3894                push_overloaded_decl will have already done so if
3895                necessary.  */
3896             need_new_binding = 0;
3897         }
3898       else if (DECL_FUNCTION_TEMPLATE_P (x) && DECL_NAMESPACE_SCOPE_P (x))
3899         {
3900           t = push_overloaded_decl (x, PUSH_GLOBAL);
3901           if (t == x)
3902             add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
3903           return t;
3904         }
3905
3906       /* If declaring a type as a typedef, copy the type (unless we're
3907          at line 0), and install this TYPE_DECL as the new type's typedef
3908          name.  See the extensive comment in ../c-decl.c (pushdecl). */
3909       if (TREE_CODE (x) == TYPE_DECL)
3910         {
3911           tree type = TREE_TYPE (x);
3912           if (DECL_SOURCE_LINE (x) == 0)
3913             {
3914               if (TYPE_NAME (type) == 0)
3915                 TYPE_NAME (type) = x;
3916             }
3917           else if (type != error_mark_node && TYPE_NAME (type) != x
3918                    /* We don't want to copy the type when all we're
3919                       doing is making a TYPE_DECL for the purposes of
3920                       inlining.  */
3921                    && (!TYPE_NAME (type)
3922                        || TYPE_NAME (type) != DECL_ABSTRACT_ORIGIN (x)))
3923             {
3924               DECL_ORIGINAL_TYPE (x) = type;
3925               type = build_type_copy (type);
3926               TYPE_STUB_DECL (type) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
3927               TYPE_NAME (type) = x;
3928               TREE_TYPE (x) = type;
3929             }
3930
3931           if (type != error_mark_node
3932               && TYPE_NAME (type)
3933               && TYPE_IDENTIFIER (type))
3934             set_identifier_type_value_with_scope (DECL_NAME (x), type,
3935                                                   current_binding_level);
3936
3937         }
3938
3939       /* Multiple external decls of the same identifier ought to match.
3940
3941          We get warnings about inline functions where they are defined.
3942          We get warnings about other functions from push_overloaded_decl.
3943
3944          Avoid duplicate warnings where they are used.  */
3945       if (TREE_PUBLIC (x) && TREE_CODE (x) != FUNCTION_DECL)
3946         {
3947           tree decl;
3948
3949           if (IDENTIFIER_NAMESPACE_VALUE (name) != NULL_TREE
3950               && (DECL_EXTERNAL (IDENTIFIER_NAMESPACE_VALUE (name))
3951                   || TREE_PUBLIC (IDENTIFIER_NAMESPACE_VALUE (name))))
3952             decl = IDENTIFIER_NAMESPACE_VALUE (name);
3953           else
3954             decl = NULL_TREE;
3955
3956           if (decl
3957               /* If different sort of thing, we already gave an error.  */
3958               && TREE_CODE (decl) == TREE_CODE (x)
3959               && !same_type_p (TREE_TYPE (x), TREE_TYPE (decl)))
3960             {
3961               cp_pedwarn ("type mismatch with previous external decl", x);
3962               cp_pedwarn_at ("previous external decl of `%#D'", decl);
3963             }
3964         }
3965
3966       /* This name is new in its binding level.
3967          Install the new declaration and return it.  */
3968       if (namespace_bindings_p ())
3969         {
3970           /* Install a global value.  */
3971
3972           /* If the first global decl has external linkage,
3973              warn if we later see static one.  */
3974           if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x))
3975             TREE_PUBLIC (name) = 1;
3976
3977           if (!(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)
3978                 && t != NULL_TREE)
3979               /* For an ordinary function, we create a binding from
3980                  the mangled name (i.e., NAME) to the DECL.  But, for
3981                  an `extern "C"' function, the mangled name and the
3982                  ordinary name are the same so we need not do this.  */
3983               && !(TREE_CODE (x) == FUNCTION_DECL &&
3984                    DECL_LANGUAGE (x) == lang_c))
3985             {
3986               if (TREE_CODE (x) == FUNCTION_DECL)
3987                 my_friendly_assert
3988                   ((IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE)
3989                   || (IDENTIFIER_GLOBAL_VALUE (name) == x), 378);
3990               SET_IDENTIFIER_NAMESPACE_VALUE (name, x);
3991             }
3992
3993           /* Don't forget if the function was used via an implicit decl.  */
3994           if (IDENTIFIER_IMPLICIT_DECL (name)
3995               && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
3996             TREE_USED (x) = 1;
3997
3998           /* Don't forget if its address was taken in that way.  */
3999           if (IDENTIFIER_IMPLICIT_DECL (name)
4000               && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
4001             TREE_ADDRESSABLE (x) = 1;
4002
4003           /* Warn about mismatches against previous implicit decl.  */
4004           if (IDENTIFIER_IMPLICIT_DECL (name) != NULL_TREE
4005               /* If this real decl matches the implicit, don't complain.  */
4006               && ! (TREE_CODE (x) == FUNCTION_DECL
4007                     && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
4008             cp_warning
4009               ("`%D' was previously implicitly declared to return `int'", x);
4010
4011           /* If new decl is `static' and an `extern' was seen previously,
4012              warn about it.  */
4013           if (x != NULL_TREE && t != NULL_TREE && decls_match (x, t))
4014             warn_extern_redeclared_static (x, t);
4015         }
4016       else
4017         {
4018           /* Here to install a non-global value.  */
4019           tree oldlocal = IDENTIFIER_VALUE (name);
4020           tree oldglobal = IDENTIFIER_NAMESPACE_VALUE (name);
4021
4022           if (need_new_binding)
4023             {
4024               push_local_binding (name, x, 0);
4025               /* Because push_local_binding will hook X on to the
4026                  current_binding_level's name list, we don't want to
4027                  do that again below.  */
4028               need_new_binding = 0;
4029             }
4030
4031           /* If this is a TYPE_DECL, push it into the type value slot.  */
4032           if (TREE_CODE (x) == TYPE_DECL)
4033             set_identifier_type_value_with_scope (name, TREE_TYPE (x),
4034                                                   current_binding_level);
4035
4036           /* Clear out any TYPE_DECL shadowed by a namespace so that
4037              we won't think this is a type.  The C struct hack doesn't
4038              go through namespaces.  */
4039           if (TREE_CODE (x) == NAMESPACE_DECL)
4040             set_identifier_type_value_with_scope (name, NULL_TREE,
4041                                                   current_binding_level);
4042
4043           if (oldlocal)
4044             {
4045               tree d = oldlocal;
4046
4047               while (oldlocal
4048                      && TREE_CODE (oldlocal) == VAR_DECL
4049                      && DECL_DEAD_FOR_LOCAL (oldlocal))
4050                 oldlocal = DECL_SHADOWED_FOR_VAR (oldlocal);
4051
4052               if (oldlocal == NULL_TREE)
4053                 oldlocal = IDENTIFIER_NAMESPACE_VALUE (DECL_NAME (d));
4054             }
4055
4056           /* If this is an extern function declaration, see if we
4057              have a global definition or declaration for the function.  */
4058           if (oldlocal == NULL_TREE
4059               && DECL_EXTERNAL (x)
4060               && oldglobal != NULL_TREE
4061               && TREE_CODE (x) == FUNCTION_DECL
4062               && TREE_CODE (oldglobal) == FUNCTION_DECL)
4063             {
4064               /* We have one.  Their types must agree.  */
4065               if (decls_match (x, oldglobal))
4066                 /* OK */;
4067               else
4068                 {
4069                   cp_warning ("extern declaration of `%#D' doesn't match", x);
4070                   cp_warning_at ("global declaration `%#D'", oldglobal);
4071                 }
4072             }
4073           /* If we have a local external declaration,
4074              and no file-scope declaration has yet been seen,
4075              then if we later have a file-scope decl it must not be static.  */
4076           if (oldlocal == NULL_TREE
4077               && oldglobal == NULL_TREE
4078               && DECL_EXTERNAL (x)
4079               && TREE_PUBLIC (x))
4080             TREE_PUBLIC (name) = 1;
4081
4082           /* Warn if shadowing an argument at the top level of the body.  */
4083           if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
4084               /* Inline decls shadow nothing.  */
4085               && !DECL_FROM_INLINE (x)
4086               && TREE_CODE (oldlocal) == PARM_DECL
4087               /* Don't complain if it's from an enclosing function.  */
4088               && DECL_CONTEXT (oldlocal) == current_function_decl
4089               && TREE_CODE (x) != PARM_DECL)
4090             {
4091               /* Go to where the parms should be and see if we
4092                  find them there.  */
4093               struct binding_level *b = current_binding_level->level_chain;
4094
4095               if (cleanup_label)
4096                 b = b->level_chain;
4097
4098               /* ARM $8.3 */
4099               if (b->parm_flag == 1)
4100                 cp_error ("declaration of `%#D' shadows a parameter", name);
4101             }
4102
4103           /* Maybe warn if shadowing something else.  */
4104           if (warn_shadow && !DECL_EXTERNAL (x)
4105               /* Inline decls shadow nothing.  */
4106               && !DECL_FROM_INLINE (x)
4107               /* No shadow warnings for internally generated vars.  */
4108               && ! DECL_ARTIFICIAL (x)
4109               /* No shadow warnings for vars made for inlining.  */
4110               && ! DECL_FROM_INLINE (x))
4111             {
4112               if (oldlocal != NULL_TREE && TREE_CODE (oldlocal) == PARM_DECL)
4113                 warning ("declaration of `%s' shadows a parameter",
4114                         IDENTIFIER_POINTER (name));
4115               else if (IDENTIFIER_CLASS_VALUE (name) != NULL_TREE
4116                        && current_class_ptr
4117                        && !TREE_STATIC (name))
4118                 warning ("declaration of `%s' shadows a member of `this'",
4119                         IDENTIFIER_POINTER (name));
4120               else if (oldlocal != NULL_TREE)
4121                 warning ("declaration of `%s' shadows previous local",
4122                         IDENTIFIER_POINTER (name));
4123               else if (oldglobal != NULL_TREE)
4124                 /* XXX shadow warnings in outer-more namespaces */
4125                 warning ("declaration of `%s' shadows global declaration",
4126                         IDENTIFIER_POINTER (name));
4127             }
4128         }
4129
4130       if (TREE_CODE (x) == FUNCTION_DECL)
4131         check_default_args (x);
4132
4133       /* Keep count of variables in this level with incomplete type.  */
4134       if (TREE_CODE (x) == VAR_DECL
4135           && TREE_TYPE (x) != error_mark_node
4136           && ((!COMPLETE_TYPE_P (TREE_TYPE (x))
4137                && PROMOTES_TO_AGGR_TYPE (TREE_TYPE (x), ARRAY_TYPE))
4138               /* RTTI TD entries are created while defining the type_info.  */
4139               || (TYPE_LANG_SPECIFIC (TREE_TYPE (x))
4140                   && TYPE_BEING_DEFINED (TREE_TYPE (x)))))
4141         {
4142           if (namespace_bindings_p ())
4143             namespace_scope_incomplete
4144               = tree_cons (NULL_TREE, x, namespace_scope_incomplete);
4145           else
4146             current_binding_level->incomplete
4147               = tree_cons (NULL_TREE, x, current_binding_level->incomplete);
4148         }
4149     }
4150
4151   if (need_new_binding)
4152     add_decl_to_level (x,
4153                        DECL_NAMESPACE_SCOPE_P (x)
4154                        ? NAMESPACE_LEVEL (CP_DECL_CONTEXT (x))
4155                        : current_binding_level);
4156
4157   return x;
4158 }
4159
4160 /* Same as pushdecl, but define X in binding-level LEVEL.  We rely on the
4161    caller to set DECL_CONTEXT properly.  */
4162
4163 static tree
4164 pushdecl_with_scope (x, level)
4165      tree x;
4166      struct binding_level *level;
4167 {
4168   register struct binding_level *b;
4169   tree function_decl = current_function_decl;
4170
4171   current_function_decl = NULL_TREE;
4172   if (level->parm_flag == 2)
4173     {
4174       b = class_binding_level;
4175       class_binding_level = level;
4176       pushdecl_class_level (x);
4177       class_binding_level = b;
4178     }
4179   else
4180     {
4181       b = current_binding_level;
4182       current_binding_level = level;
4183       x = pushdecl (x);
4184       current_binding_level = b;
4185     }
4186   current_function_decl = function_decl;
4187   return x;
4188 }
4189
4190 /* Like pushdecl, only it places X in the current namespace,
4191    if appropriate.  */
4192
4193 tree
4194 pushdecl_namespace_level (x)
4195      tree x;
4196 {
4197   register struct binding_level *b = current_binding_level;
4198   register tree t;
4199
4200   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
4201
4202   /* Now, the type_shadowed stack may screw us.  Munge it so it does
4203      what we want.  */
4204   if (TREE_CODE (x) == TYPE_DECL)
4205     {
4206       tree name = DECL_NAME (x);
4207       tree newval;
4208       tree *ptr = (tree *)0;
4209       for (; b != global_binding_level; b = b->level_chain)
4210         {
4211           tree shadowed = b->type_shadowed;
4212           for (; shadowed; shadowed = TREE_CHAIN (shadowed))
4213             if (TREE_PURPOSE (shadowed) == name)
4214               {
4215                 ptr = &TREE_VALUE (shadowed);
4216                 /* Can't break out of the loop here because sometimes
4217                    a binding level will have duplicate bindings for
4218                    PT names.  It's gross, but I haven't time to fix it.  */
4219               }
4220         }
4221       newval = TREE_TYPE (x);
4222       if (ptr == (tree *)0)
4223         {
4224           /* @@ This shouldn't be needed.  My test case "zstring.cc" trips
4225              up here if this is changed to an assertion.  --KR  */
4226           SET_IDENTIFIER_TYPE_VALUE (name, newval);
4227         }
4228       else
4229         {
4230           *ptr = newval;
4231         }
4232     }
4233   return t;
4234 }
4235
4236 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL,
4237    if appropriate.  */
4238
4239 tree
4240 pushdecl_top_level (x)
4241      tree x;
4242 {
4243   push_to_top_level ();
4244   x = pushdecl_namespace_level (x);
4245   pop_from_top_level ();
4246   return x;
4247 }
4248
4249 /* Make the declaration of X appear in CLASS scope.  */
4250
4251 void
4252 pushdecl_class_level (x)
4253      tree x;
4254 {
4255   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
4256      scope looks for the pre-mangled name.  */
4257   register tree name;
4258
4259   if (TREE_CODE (x) == OVERLOAD)
4260     x = OVL_CURRENT (x);
4261   name = DECL_NAME (x);
4262
4263   if (name)
4264     {
4265       push_class_level_binding (name, x);
4266       if (TREE_CODE (x) == TYPE_DECL)
4267         set_identifier_type_value (name, TREE_TYPE (x));
4268     }
4269   else if (ANON_AGGR_TYPE_P (TREE_TYPE (x)))
4270     {
4271       tree f;
4272
4273       for (f = TYPE_FIELDS (TREE_TYPE (x));
4274            f;
4275            f = TREE_CHAIN (f))
4276         pushdecl_class_level (f);
4277     }
4278 }
4279
4280 /* Enter DECL into the symbol table, if that's appropriate.  Returns
4281    DECL, or a modified version thereof.  */
4282
4283 tree
4284 maybe_push_decl (decl)
4285      tree decl;
4286 {
4287   tree type = TREE_TYPE (decl);
4288
4289   /* Add this decl to the current binding level, but not if it comes
4290      from another scope, e.g. a static member variable.  TEM may equal
4291      DECL or it may be a previous decl of the same name.  */
4292   if (decl == error_mark_node
4293       || (TREE_CODE (decl) != PARM_DECL
4294           && DECL_CONTEXT (decl) != NULL_TREE
4295           /* Definitions of namespace members outside their namespace are
4296              possible. */
4297           && TREE_CODE (DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4298       || (TREE_CODE (decl) == TEMPLATE_DECL && !namespace_bindings_p ())
4299       || TREE_CODE (type) == UNKNOWN_TYPE
4300       /* The declaration of a template specialization does not affect
4301          the functions available for overload resolution, so we do not
4302          call pushdecl.  */
4303       || (TREE_CODE (decl) == FUNCTION_DECL
4304           && DECL_TEMPLATE_SPECIALIZATION (decl)))
4305     return decl;
4306   else
4307     return pushdecl (decl);
4308 }
4309
4310 /* Make the declaration(s) of X appear in CLASS scope
4311    under the name NAME.  */
4312
4313 void
4314 push_class_level_binding (name, x)
4315      tree name;
4316      tree x;
4317 {
4318   tree binding;
4319   /* The class_binding_level will be NULL if x is a template
4320      parameter name in a member template.  */
4321   if (!class_binding_level)
4322     return;
4323
4324   /* Make sure that this new member does not have the same name
4325      as a template parameter.  */
4326   if (TYPE_BEING_DEFINED (current_class_type))
4327     check_template_shadow (x);
4328
4329   /* If this declaration shadows a declaration from an enclosing
4330      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
4331      we leave this class.  Record the shadowed declaration here.  */
4332   binding = IDENTIFIER_BINDING (name);
4333   if (binding
4334       && ((TREE_CODE (x) == OVERLOAD
4335            && BINDING_VALUE (binding)
4336            && is_overloaded_fn (BINDING_VALUE (binding)))
4337           || INHERITED_VALUE_BINDING_P (binding)))
4338     {
4339       tree shadow;
4340       tree old_decl;
4341
4342       /* If the old binding was from a base class, and was for a tag
4343          name, slide it over to make room for the new binding.  The
4344          old binding is still visible if explicitly qualified with a
4345          class-key.  */
4346       if (INHERITED_VALUE_BINDING_P (binding)
4347           && BINDING_VALUE (binding)
4348           && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
4349           && DECL_ARTIFICIAL (BINDING_VALUE (binding))
4350           && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
4351         {
4352           old_decl = BINDING_TYPE (binding);
4353           BINDING_TYPE (binding) = BINDING_VALUE (binding);
4354           BINDING_VALUE (binding) = NULL_TREE;
4355           INHERITED_VALUE_BINDING_P (binding) = 0;
4356         }
4357       else
4358         old_decl = BINDING_VALUE (binding);
4359
4360       /* There was already a binding for X containing fewer
4361          functions than are named in X.  Find the previous
4362          declaration of X on the class-shadowed list, and update it.  */
4363       for (shadow = class_binding_level->class_shadowed;
4364            shadow;
4365            shadow = TREE_CHAIN (shadow))
4366         if (TREE_PURPOSE (shadow) == name
4367             && TREE_TYPE (shadow) == old_decl)
4368           {
4369             BINDING_VALUE (binding) = x;
4370             INHERITED_VALUE_BINDING_P (binding) = 0;
4371             TREE_TYPE (shadow) = x;
4372             return;
4373           }
4374     }
4375
4376   /* If we didn't replace an existing binding, put the binding on the
4377      stack of bindings for the identifier, and update
4378      IDENTIFIER_CLASS_VALUE.  */
4379   if (push_class_binding (name, x))
4380     {
4381       class_binding_level->class_shadowed
4382         = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
4383                      class_binding_level->class_shadowed);
4384       /* Record the value we are binding NAME to so that we can know
4385          what to pop later.  */
4386       TREE_TYPE (class_binding_level->class_shadowed) = x;
4387     }
4388 }
4389
4390 /* Insert another USING_DECL into the current binding level,
4391    returning this declaration. If this is a redeclaration,
4392    do nothing and return NULL_TREE.  */
4393
4394 tree
4395 push_using_decl (scope, name)
4396      tree scope;
4397      tree name;
4398 {
4399   tree decl;
4400
4401   my_friendly_assert (TREE_CODE (scope) == NAMESPACE_DECL, 383);
4402   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 384);
4403   for (decl = current_binding_level->usings; decl; decl = TREE_CHAIN (decl))
4404     if (DECL_INITIAL (decl) == scope && DECL_NAME (decl) == name)
4405       break;
4406   if (decl)
4407     return NULL_TREE;
4408   decl = build_lang_decl (USING_DECL, name, void_type_node);
4409   DECL_INITIAL (decl) = scope;
4410   TREE_CHAIN (decl) = current_binding_level->usings;
4411   current_binding_level->usings = decl;
4412   return decl;
4413 }
4414
4415 /* Add namespace to using_directives. Return NULL_TREE if nothing was
4416    changed (i.e. there was already a directive), or the fresh
4417    TREE_LIST otherwise.  */
4418
4419 tree
4420 push_using_directive (used)
4421      tree used;
4422 {
4423   tree ud = current_binding_level->using_directives;
4424   tree iter, ancestor;
4425
4426   /* Check if we already have this. */
4427   if (purpose_member (used, ud) != NULL_TREE)
4428     return NULL_TREE;
4429
4430   /* Recursively add all namespaces used. */
4431   for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
4432     push_using_directive (TREE_PURPOSE (iter));
4433
4434   ancestor = namespace_ancestor (current_decl_namespace (), used);
4435   ud = current_binding_level->using_directives;
4436   ud = tree_cons (used, ancestor, ud);
4437   current_binding_level->using_directives = ud;
4438   return ud;
4439 }
4440
4441 /* DECL is a FUNCTION_DECL for a non-member function, which may have
4442    other definitions already in place.  We get around this by making
4443    the value of the identifier point to a list of all the things that
4444    want to be referenced by that name.  It is then up to the users of
4445    that name to decide what to do with that list.
4446
4447    DECL may also be a TEMPLATE_DECL, with a FUNCTION_DECL in its
4448    DECL_TEMPLATE_RESULT.  It is dealt with the same way.
4449
4450    FLAGS is a bitwise-or of the following values:
4451      PUSH_LOCAL: Bind DECL in the current scope, rather than at
4452                  namespace scope.
4453      PUSH_USING: DECL is being pushed as the result of a using
4454                  declaration.
4455
4456    The value returned may be a previous declaration if we guessed wrong
4457    about what language DECL should belong to (C or C++).  Otherwise,
4458    it's always DECL (and never something that's not a _DECL).  */
4459
4460 tree
4461 push_overloaded_decl (decl, flags)
4462      tree decl;
4463      int flags;
4464 {
4465   tree name = DECL_NAME (decl);
4466   tree old;
4467   tree new_binding;
4468   int doing_global = (namespace_bindings_p () || !(flags & PUSH_LOCAL));
4469
4470   if (doing_global)
4471     old = namespace_binding (name, DECL_CONTEXT (decl));
4472   else
4473     old = lookup_name_current_level (name);
4474
4475   if (old)
4476     {
4477       if (TREE_CODE (old) == TYPE_DECL && DECL_ARTIFICIAL (old))
4478         {
4479           tree t = TREE_TYPE (old);
4480           if (IS_AGGR_TYPE (t) && warn_shadow
4481               && (! DECL_IN_SYSTEM_HEADER (decl)
4482                   || ! DECL_IN_SYSTEM_HEADER (old)))
4483             cp_warning ("`%#D' hides constructor for `%#T'", decl, t);
4484           old = NULL_TREE;
4485         }
4486       else if (is_overloaded_fn (old))
4487         {
4488           tree tmp;
4489
4490           for (tmp = old; tmp; tmp = OVL_NEXT (tmp))
4491             {
4492               tree fn = OVL_CURRENT (tmp);
4493
4494               if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp)
4495                   && !(flags & PUSH_USING)
4496                   && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
4497                                 TYPE_ARG_TYPES (TREE_TYPE (decl))))
4498                 cp_error ("`%#D' conflicts with previous using declaration `%#D'",
4499                           decl, fn);
4500
4501               if (duplicate_decls (decl, fn))
4502                 return fn;
4503             }
4504         }
4505       else
4506         {
4507           cp_error_at ("previous non-function declaration `%#D'", old);
4508           cp_error ("conflicts with function declaration `%#D'", decl);
4509           return decl;
4510         }
4511     }
4512
4513   if (old || TREE_CODE (decl) == TEMPLATE_DECL)
4514     {
4515       if (old && TREE_CODE (old) != OVERLOAD)
4516         new_binding = ovl_cons (decl, ovl_cons (old, NULL_TREE));
4517       else
4518         new_binding = ovl_cons (decl, old);
4519       if (flags & PUSH_USING)
4520         OVL_USED (new_binding) = 1;
4521     }
4522   else
4523     /* NAME is not ambiguous.  */
4524     new_binding = decl;
4525
4526   if (doing_global)
4527     set_namespace_binding (name, current_namespace, new_binding);
4528   else
4529     {
4530       /* We only create an OVERLOAD if there was a previous binding at
4531          this level, or if decl is a template. In the former case, we
4532          need to remove the old binding and replace it with the new
4533          binding.  We must also run through the NAMES on the binding
4534          level where the name was bound to update the chain.  */
4535
4536       if (TREE_CODE (new_binding) == OVERLOAD && old)
4537         {
4538           tree *d;
4539
4540           for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
4541                *d;
4542                d = &TREE_CHAIN (*d))
4543             if (*d == old
4544                 || (TREE_CODE (*d) == TREE_LIST
4545                     && TREE_VALUE (*d) == old))
4546               {
4547                 if (TREE_CODE (*d) == TREE_LIST)
4548                   /* Just replace the old binding with the new.  */
4549                   TREE_VALUE (*d) = new_binding;
4550                 else
4551                   /* Build a TREE_LIST to wrap the OVERLOAD.  */
4552                   *d = tree_cons (NULL_TREE, new_binding,
4553                                   TREE_CHAIN (*d));
4554
4555                 /* And update the CPLUS_BINDING node.  */
4556                 BINDING_VALUE (IDENTIFIER_BINDING (name))
4557                   = new_binding;
4558                 return decl;
4559               }
4560
4561           /* We should always find a previous binding in this case.  */
4562           my_friendly_abort (0);
4563         }
4564
4565       /* Install the new binding.  */
4566       push_local_binding (name, new_binding, flags);
4567     }
4568
4569   return decl;
4570 }
4571 \f
4572 /* Generate an implicit declaration for identifier FUNCTIONID
4573    as a function of type int ().  Print a warning if appropriate.  */
4574
4575 tree
4576 implicitly_declare (functionid)
4577      tree functionid;
4578 {
4579   register tree decl;
4580
4581   /* We used to reuse an old implicit decl here,
4582      but this loses with inline functions because it can clobber
4583      the saved decl chains.  */
4584   decl = build_lang_decl (FUNCTION_DECL, functionid, default_function_type);
4585
4586   DECL_EXTERNAL (decl) = 1;
4587   TREE_PUBLIC (decl) = 1;
4588
4589   /* ISO standard says implicit declarations are in the innermost block.
4590      So we record the decl in the standard fashion.  */
4591   pushdecl (decl);
4592   rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
4593
4594   if (warn_implicit
4595       /* Only one warning per identifier.  */
4596       && IDENTIFIER_IMPLICIT_DECL (functionid) == NULL_TREE)
4597     {
4598       cp_pedwarn ("implicit declaration of function `%#D'", decl);
4599     }
4600
4601   SET_IDENTIFIER_IMPLICIT_DECL (functionid, decl);
4602
4603   return decl;
4604 }
4605
4606 /* Return zero if the declaration NEWDECL is valid
4607    when the declaration OLDDECL (assumed to be for the same name)
4608    has already been seen.
4609    Otherwise return an error message format string with a %s
4610    where the identifier should go.  */
4611
4612 static const char *
4613 redeclaration_error_message (newdecl, olddecl)
4614      tree newdecl, olddecl;
4615 {
4616   if (TREE_CODE (newdecl) == TYPE_DECL)
4617     {
4618       /* Because C++ can put things into name space for free,
4619          constructs like "typedef struct foo { ... } foo"
4620          would look like an erroneous redeclaration.  */
4621       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
4622         return 0;
4623       else
4624         return "redefinition of `%#D'";
4625     }
4626   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
4627     {
4628       /* If this is a pure function, its olddecl will actually be
4629          the original initialization to `0' (which we force to call
4630          abort()).  Don't complain about redefinition in this case.  */
4631       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl))
4632         return 0;
4633
4634       /* If both functions come from different namespaces, this is not
4635          a redeclaration - this is a conflict with a used function. */
4636       if (DECL_NAMESPACE_SCOPE_P (olddecl)
4637           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl))
4638         return "`%D' conflicts with used function";
4639
4640       /* We'll complain about linkage mismatches in
4641          warn_extern_redeclared_static.  */
4642
4643       /* Defining the same name twice is no good.  */
4644       if (DECL_INITIAL (olddecl) != NULL_TREE
4645           && DECL_INITIAL (newdecl) != NULL_TREE)
4646         {
4647           if (DECL_NAME (olddecl) == NULL_TREE)
4648             return "`%#D' not declared in class";
4649           else
4650             return "redefinition of `%#D'";
4651         }
4652       return 0;
4653     }
4654   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
4655     {
4656       if ((TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
4657            && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl))
4658            && DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)))
4659           || (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL
4660               && COMPLETE_TYPE_P (TREE_TYPE (newdecl))
4661               && COMPLETE_TYPE_P (TREE_TYPE (olddecl))))
4662         return "redefinition of `%#D'";
4663       return 0;
4664     }
4665   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
4666     {
4667       /* Objects declared at top level:  */
4668       /* If at least one is a reference, it's ok.  */
4669       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
4670         return 0;
4671       /* Reject two definitions.  */
4672       return "redefinition of `%#D'";
4673     }
4674   else
4675     {
4676       /* Objects declared with block scope:  */
4677       /* Reject two definitions, and reject a definition
4678          together with an external reference.  */
4679       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
4680         return "redeclaration of `%#D'";
4681       return 0;
4682     }
4683 }
4684 \f
4685 /* Create a new label, named ID.  */
4686
4687 static tree
4688 make_label_decl (id, local_p)
4689      tree id;
4690      int local_p;
4691 {
4692   tree decl;
4693
4694   decl = build_decl (LABEL_DECL, id, void_type_node);
4695   if (expanding_p)
4696     /* Make sure every label has an rtx.  */
4697     label_rtx (decl);
4698
4699   DECL_CONTEXT (decl) = current_function_decl;
4700   DECL_MODE (decl) = VOIDmode;
4701   C_DECLARED_LABEL_FLAG (decl) = local_p;
4702
4703   /* Say where one reference is to the label, for the sake of the
4704      error if it is not defined.  */
4705   DECL_SOURCE_LINE (decl) = lineno;
4706   DECL_SOURCE_FILE (decl) = input_filename;
4707
4708   /* Record the fact that this identifier is bound to this label.  */
4709   SET_IDENTIFIER_LABEL_VALUE (id, decl);
4710
4711   /* Record this label on the list of used labels so that we can check
4712      at the end of the function to see whether or not the label was
4713      actually defined.  */
4714   if ((named_label_uses == NULL || named_label_uses->label_decl != decl)
4715       && (named_label_uses == NULL
4716           || named_label_uses->names_in_scope != current_binding_level->names
4717           || named_label_uses->label_decl != decl))
4718     {
4719       struct named_label_list *new_ent;
4720       new_ent
4721         = (struct named_label_list*)oballoc (sizeof (struct named_label_list));
4722       new_ent->label_decl = decl;
4723       new_ent->names_in_scope = current_binding_level->names;
4724       new_ent->binding_level = current_binding_level;
4725       new_ent->lineno_o_goto = lineno;
4726       new_ent->filename_o_goto = input_filename;
4727       new_ent->next = named_label_uses;
4728       named_label_uses = new_ent;
4729     }
4730
4731   return decl;
4732 }
4733
4734 /* Look for a label named ID in the current function.  If one cannot
4735    be found, create one.  (We keep track of used, but undefined,
4736    labels, and complain about them at the end of a function.)  */
4737
4738 tree
4739 lookup_label (id)
4740      tree id;
4741 {
4742   tree decl;
4743
4744   /* You can't use labels at global scope.  */
4745   if (current_function_decl == NULL_TREE)
4746     {
4747       error ("label `%s' referenced outside of any function",
4748              IDENTIFIER_POINTER (id));
4749       return NULL_TREE;
4750     }
4751
4752   /* See if we've already got this label.  */
4753   decl = IDENTIFIER_LABEL_VALUE (id);
4754   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
4755     return decl;
4756
4757   /* Record this label on the list of labels used in this function.
4758      We do this before calling make_label_decl so that we get the
4759      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
4760   named_labels = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4761                             named_labels);
4762   /* We need a new label.  */
4763   decl = make_label_decl (id, /*local_p=*/0);
4764   /* Now fill in the information we didn't have before.  */
4765   TREE_VALUE (named_labels) = decl;
4766
4767   return decl;
4768 }
4769
4770 /* Declare a local label named ID.  */
4771
4772 tree
4773 declare_local_label (id)
4774      tree id;
4775 {
4776   tree decl;
4777
4778   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
4779      this scope we can restore the old value of
4780      IDENTIFIER_TYPE_VALUE.  */
4781   current_binding_level->shadowed_labels
4782     = tree_cons (IDENTIFIER_LABEL_VALUE (id), NULL_TREE,
4783                  current_binding_level->shadowed_labels);
4784   /* Look for the label.  */
4785   decl = make_label_decl (id, /*local_p=*/1);
4786   /* Now fill in the information we didn't have before.  */
4787   TREE_VALUE (current_binding_level->shadowed_labels) = decl;
4788
4789   return decl;
4790 }
4791
4792 /* Define a label, specifying the location in the source file.
4793    Return the LABEL_DECL node for the label, if the definition is valid.
4794    Otherwise return 0.  */
4795
4796 tree
4797 define_label (filename, line, name)
4798      char *filename;
4799      int line;
4800      tree name;
4801 {
4802   tree decl = lookup_label (name);
4803
4804   /* After labels, make any new cleanups go into their
4805      own new (temporary) binding contour.  */
4806   current_binding_level->more_cleanups_ok = 0;
4807
4808   if (name == get_identifier ("wchar_t"))
4809     cp_pedwarn ("label named wchar_t");
4810
4811   if (DECL_INITIAL (decl) != NULL_TREE)
4812     {
4813       cp_error ("duplicate label `%D'", decl);
4814       return 0;
4815     }
4816   else
4817     {
4818       struct named_label_list *uses, *prev;
4819       int identified = 0;
4820       int saw_eh = 0;
4821
4822       /* Mark label as having been defined.  */
4823       DECL_INITIAL (decl) = error_mark_node;
4824       /* Say where in the source.  */
4825       DECL_SOURCE_FILE (decl) = filename;
4826       DECL_SOURCE_LINE (decl) = line;
4827
4828       prev = NULL;
4829       uses = named_label_uses;
4830       while (uses != NULL)
4831         if (uses->label_decl == decl)
4832           {
4833             struct binding_level *b = current_binding_level;
4834             while (b)
4835               {
4836                 tree new_decls = b->names;
4837                 tree old_decls = (b == uses->binding_level)
4838                                   ? uses->names_in_scope : NULL_TREE;
4839                 while (new_decls != old_decls)
4840                   {
4841                     if (TREE_CODE (new_decls) == VAR_DECL
4842                         /* Don't complain about crossing initialization
4843                            of internal entities.  They can't be accessed,
4844                            and they should be cleaned up
4845                            by the time we get to the label.  */
4846                         && ! DECL_ARTIFICIAL (new_decls)
4847                         && !(DECL_INITIAL (new_decls) == NULL_TREE
4848                              && pod_type_p (TREE_TYPE (new_decls))))
4849                       {
4850                         /* This is really only important if we're crossing
4851                            an initialization.  The POD stuff is just
4852                            pedantry; why should it matter if the class
4853                            contains a field of pointer to member type?  */
4854                         int problem = (DECL_INITIAL (new_decls)
4855                                        || (TYPE_NEEDS_CONSTRUCTING
4856                                            (TREE_TYPE (new_decls))));
4857
4858                         if (! identified)
4859                           {
4860                             if (problem)
4861                               {
4862                                 cp_error ("jump to label `%D'", decl);
4863                                 error_with_file_and_line
4864                                   (uses->filename_o_goto,
4865                                    uses->lineno_o_goto, "  from here");
4866                               }
4867                             else
4868                               {
4869                                 cp_pedwarn ("jump to label `%D'", decl);
4870                                 pedwarn_with_file_and_line
4871                                   (uses->filename_o_goto,
4872                                    uses->lineno_o_goto, "  from here");
4873                               }
4874                             identified = 1;
4875                           }
4876
4877                         if (problem)
4878                           cp_error_at ("  crosses initialization of `%#D'",
4879                                        new_decls);
4880                         else
4881                           cp_pedwarn_at ("  enters scope of non-POD `%#D'",
4882                                          new_decls);
4883                       }
4884                     new_decls = TREE_CHAIN (new_decls);
4885                   }
4886                 if (b == uses->binding_level)
4887                   break;
4888                 if (b->eh_region && ! saw_eh)
4889                   {
4890                     if (! identified)
4891                       {
4892                         cp_error ("jump to label `%D'", decl);
4893                         error_with_file_and_line
4894                           (uses->filename_o_goto,
4895                            uses->lineno_o_goto, "  from here");
4896                         identified = 1;
4897                       }
4898                     error ("  enters exception handling block");
4899                     saw_eh = 1;
4900                   }
4901                 b = b->level_chain;
4902               }
4903
4904             if (prev != NULL)
4905               prev->next = uses->next;
4906             else
4907               named_label_uses = uses->next;
4908
4909             uses = uses->next;
4910           }
4911         else
4912           {
4913             prev = uses;
4914             uses = uses->next;
4915           }
4916       current_function_return_value = NULL_TREE;
4917       return decl;
4918     }
4919 }
4920
4921 struct cp_switch
4922 {
4923   struct binding_level *level;
4924   struct cp_switch *next;
4925 };
4926
4927 static struct cp_switch *switch_stack;
4928
4929 void
4930 push_switch ()
4931 {
4932   struct cp_switch *p
4933     = (struct cp_switch *) xmalloc (sizeof (struct cp_switch));
4934   p->level = current_binding_level;
4935   p->next = switch_stack;
4936   switch_stack = p;
4937 }
4938
4939 void
4940 pop_switch ()
4941 {
4942   struct cp_switch *cs;
4943   
4944   cs = switch_stack;
4945   switch_stack = switch_stack->next;
4946   free (cs);
4947 }
4948
4949 /* Note that we've seen a definition of a case label, and complain if this
4950    is a bad place for one.  */
4951
4952 void
4953 define_case_label ()
4954 {
4955   tree cleanup = last_cleanup_this_contour ();
4956   struct binding_level *b = current_binding_level;
4957   int identified = 0;
4958
4959   if (! switch_stack)
4960     /* Don't crash; we'll complain in do_case.  */
4961     return;
4962
4963   if (cleanup)
4964     {
4965       static int explained = 0;
4966       cp_warning_at ("destructor needed for `%#D'", TREE_PURPOSE (cleanup));
4967       warning ("where case label appears here");
4968       if (!explained)
4969         {
4970           warning ("(enclose actions of previous case statements requiring");
4971           warning ("destructors in their own binding contours.)");
4972           explained = 1;
4973         }
4974     }
4975
4976   for (; b && b != switch_stack->level; b = b->level_chain)
4977     {
4978       tree new_decls = b->names;
4979       for (; new_decls; new_decls = TREE_CHAIN (new_decls))
4980         {
4981           if (TREE_CODE (new_decls) == VAR_DECL
4982               /* Don't complain about crossing initialization
4983                  of internal entities.  They can't be accessed,
4984                  and they should be cleaned up
4985                  by the time we get to the label.  */
4986               && ! DECL_ARTIFICIAL (new_decls)
4987               && ((DECL_INITIAL (new_decls) != NULL_TREE
4988                    && DECL_INITIAL (new_decls) != error_mark_node)
4989                   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (new_decls))))
4990             {
4991               if (! identified)
4992                 error ("jump to case label");
4993               identified = 1;
4994               cp_error_at ("  crosses initialization of `%#D'",
4995                            new_decls);
4996             }
4997         }
4998     }
4999
5000   /* After labels, make any new cleanups go into their
5001      own new (temporary) binding contour.  */
5002
5003   current_binding_level->more_cleanups_ok = 0;
5004   current_function_return_value = NULL_TREE;
5005 }
5006 \f
5007 /* Return the list of declarations of the current level.
5008    Note that this list is in reverse order unless/until
5009    you nreverse it; and when you do nreverse it, you must
5010    store the result back using `storedecls' or you will lose.  */
5011
5012 tree
5013 getdecls ()
5014 {
5015   return current_binding_level->names;
5016 }
5017
5018 /* Return the list of type-tags (for structs, etc) of the current level.  */
5019
5020 tree
5021 gettags ()
5022 {
5023   return current_binding_level->tags;
5024 }
5025
5026 /* Store the list of declarations of the current level.
5027    This is done for the parameter declarations of a function being defined,
5028    after they are modified in the light of any missing parameters.  */
5029
5030 static void
5031 storedecls (decls)
5032      tree decls;
5033 {
5034   current_binding_level->names = decls;
5035 }
5036
5037 /* Similarly, store the list of tags of the current level.  */
5038
5039 void
5040 storetags (tags)
5041      tree tags;
5042 {
5043   current_binding_level->tags = tags;
5044 }
5045 \f
5046 /* Given NAME, an IDENTIFIER_NODE,
5047    return the structure (or union or enum) definition for that name.
5048    Searches binding levels from BINDING_LEVEL up to the global level.
5049    If THISLEVEL_ONLY is nonzero, searches only the specified context
5050    (but skips any tag-transparent contexts to find one that is
5051    meaningful for tags).
5052    FORM says which kind of type the caller wants;
5053    it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
5054    If the wrong kind of type is found, and it's not a template, an error is
5055    reported.  */
5056
5057 static tree
5058 lookup_tag (form, name, binding_level, thislevel_only)
5059      enum tree_code form;
5060      tree name;
5061      struct binding_level *binding_level;
5062      int thislevel_only;
5063 {
5064   register struct binding_level *level;
5065   /* Non-zero if, we should look past a template parameter level, even
5066      if THISLEVEL_ONLY.  */
5067   int allow_template_parms_p = 1;
5068
5069   for (level = binding_level; level; level = level->level_chain)
5070     {
5071       register tree tail;
5072       if (ANON_AGGRNAME_P (name))
5073         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5074           {
5075             /* There's no need for error checking here, because
5076                anon names are unique throughout the compilation.  */
5077             if (TYPE_IDENTIFIER (TREE_VALUE (tail)) == name)
5078               return TREE_VALUE (tail);
5079           }
5080       else if (level->namespace_p)
5081         /* Do namespace lookup. */
5082         for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
5083           {
5084             tree old = binding_for_name (name, tail);
5085
5086             /* If we just skipped past a template parameter level,
5087                even though THISLEVEL_ONLY, and we find a template
5088                class declaration, then we use the _TYPE node for the
5089                template.  See the example below.  */
5090             if (thislevel_only && !allow_template_parms_p
5091                 && old && BINDING_VALUE (old)
5092                 && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
5093               old = TREE_TYPE (BINDING_VALUE (old));
5094             else
5095               old = BINDING_TYPE (old);
5096
5097             /* If it has an original type, it is a typedef, and we
5098                should not return it.  */
5099             if (old && DECL_ORIGINAL_TYPE (TYPE_NAME (old)))
5100               old = NULL_TREE;
5101             if (old && TREE_CODE (old) != form
5102                 && !(form != ENUMERAL_TYPE && TREE_CODE (old) == TEMPLATE_DECL))
5103               {
5104                 cp_error ("`%#D' redeclared as %C", old, form);
5105                 return NULL_TREE;
5106               }
5107             if (old)
5108               return old;
5109             if (thislevel_only || tail == global_namespace)
5110               return NULL_TREE;
5111           }
5112       else
5113         for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5114           {
5115             if (TREE_PURPOSE (tail) == name)
5116               {
5117                 enum tree_code code = TREE_CODE (TREE_VALUE (tail));
5118                 /* Should tighten this up; it'll probably permit
5119                    UNION_TYPE and a struct template, for example.  */
5120                 if (code != form
5121                     && !(form != ENUMERAL_TYPE && code == TEMPLATE_DECL))
5122                   {
5123                     /* Definition isn't the kind we were looking for.  */
5124                     cp_error ("`%#D' redeclared as %C", TREE_VALUE (tail),
5125                               form);
5126                     return NULL_TREE;
5127                   }
5128                 return TREE_VALUE (tail);
5129               }
5130           }
5131       if (thislevel_only && ! level->tag_transparent)
5132         {
5133           if (level->template_parms_p && allow_template_parms_p)
5134             {
5135               /* We must deal with cases like this:
5136
5137                    template <class T> struct S;
5138                    template <class T> struct S {};
5139
5140                  When looking up `S', for the second declaration, we
5141                  would like to find the first declaration.  But, we
5142                  are in the pseudo-global level created for the
5143                  template parameters, rather than the (surrounding)
5144                  namespace level.  Thus, we keep going one more level,
5145                  even though THISLEVEL_ONLY is non-zero.  */
5146               allow_template_parms_p = 0;
5147               continue;
5148             }
5149           else
5150             return NULL_TREE;
5151         }
5152     }
5153   return NULL_TREE;
5154 }
5155
5156 #if 0
5157 void
5158 set_current_level_tags_transparency (tags_transparent)
5159      int tags_transparent;
5160 {
5161   current_binding_level->tag_transparent = tags_transparent;
5162 }
5163 #endif
5164
5165 /* Given a type, find the tag that was defined for it and return the tag name.
5166    Otherwise return 0.  However, the value can never be 0
5167    in the cases in which this is used.
5168
5169    C++: If NAME is non-zero, this is the new name to install.  This is
5170    done when replacing anonymous tags with real tag names.  */
5171
5172 static tree
5173 lookup_tag_reverse (type, name)
5174      tree type;
5175      tree name;
5176 {
5177   register struct binding_level *level;
5178
5179   for (level = current_binding_level; level; level = level->level_chain)
5180     {
5181       register tree tail;
5182       for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
5183         {
5184           if (TREE_VALUE (tail) == type)
5185             {
5186               if (name)
5187                 TREE_PURPOSE (tail) = name;
5188               return TREE_PURPOSE (tail);
5189             }
5190         }
5191     }
5192   return NULL_TREE;
5193 }
5194 \f
5195 /* Look up NAME in the NAMESPACE.  */
5196
5197 tree
5198 lookup_namespace_name (namespace, name)
5199      tree namespace, name;
5200 {
5201   tree val;
5202   tree template_id = NULL_TREE;
5203
5204   my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
5205
5206   if (TREE_CODE (name) == NAMESPACE_DECL)
5207     /* This happens for A::B<int> when B is a namespace. */
5208     return name;
5209   else if (TREE_CODE (name) == TEMPLATE_DECL)
5210     {
5211       /* This happens for A::B where B is a template, and there are no
5212          template arguments.  */
5213       cp_error ("invalid use of `%D'", name);
5214       return error_mark_node;
5215     }
5216
5217   namespace = ORIGINAL_NAMESPACE (namespace);
5218
5219   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5220     {
5221       template_id = name;
5222       name = TREE_OPERAND (name, 0);
5223       if (TREE_CODE (name) == OVERLOAD)
5224         name = DECL_NAME (OVL_CURRENT (name));
5225       else if (DECL_P (name))
5226         name = DECL_NAME (name);
5227     }
5228
5229   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
5230
5231   val = make_node (CPLUS_BINDING);
5232   if (!qualified_lookup_using_namespace (name, namespace, val, 0))
5233     return error_mark_node;
5234
5235   if (BINDING_VALUE (val))
5236     {
5237       val = BINDING_VALUE (val);
5238
5239       if (template_id)
5240         {
5241           if (DECL_CLASS_TEMPLATE_P (val))
5242             val = lookup_template_class (val,
5243                                          TREE_OPERAND (template_id, 1),
5244                                          /*in_decl=*/NULL_TREE,
5245                                          /*context=*/NULL_TREE,
5246                                          /*entering_scope=*/0);
5247           else if (DECL_FUNCTION_TEMPLATE_P (val)
5248                    || TREE_CODE (val) == OVERLOAD)
5249             val = lookup_template_function (val,
5250                                             TREE_OPERAND (template_id, 1));
5251           else
5252             {
5253               cp_error ("`%D::%D' is not a template",
5254                         namespace, name);
5255               return error_mark_node;
5256             }
5257         }
5258
5259       /* If we have a single function from a using decl, pull it out.  */
5260       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5261         val = OVL_FUNCTION (val);
5262       return val;
5263     }
5264
5265   cp_error ("`%D' undeclared in namespace `%D'", name, namespace);
5266   return error_mark_node;
5267 }
5268
5269 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
5270
5271 static unsigned long
5272 typename_hash (k)
5273      hash_table_key k;
5274 {
5275   unsigned long hash;
5276   tree t;
5277
5278   t = (tree) k;
5279   hash = (((unsigned long) TYPE_CONTEXT (t))
5280           ^ ((unsigned long) DECL_NAME (TYPE_NAME (t))));
5281
5282   return hash;
5283 }
5284
5285 /* Compare two TYPENAME_TYPEs.  K1 and K2 are really of type `tree'.  */
5286
5287 static boolean
5288 typename_compare (k1, k2)
5289      hash_table_key k1;
5290      hash_table_key k2;
5291 {
5292   tree t1;
5293   tree t2;
5294   tree d1;
5295   tree d2;
5296
5297   t1 = (tree) k1;
5298   t2 = (tree) k2;
5299   d1 = TYPE_NAME (t1);
5300   d2 = TYPE_NAME (t2);
5301
5302   return (DECL_NAME (d1) == DECL_NAME (d2)
5303           && same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))
5304           && ((TREE_TYPE (t1) != NULL_TREE)
5305               == (TREE_TYPE (t2) != NULL_TREE))
5306           && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
5307           && TYPENAME_TYPE_FULLNAME (t1) == TYPENAME_TYPE_FULLNAME (t2));
5308 }
5309
5310 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
5311    the type of `T', NAME is the IDENTIFIER_NODE for `t'.  If BASE_TYPE
5312    is non-NULL, this type is being created by the implicit typename
5313    extension, and BASE_TYPE is a type named `t' in some base class of
5314    `T' which depends on template parameters.
5315
5316    Returns the new TYPENAME_TYPE.  */
5317
5318 tree
5319 build_typename_type (context, name, fullname, base_type)
5320      tree context;
5321      tree name;
5322      tree fullname;
5323      tree base_type;
5324 {
5325   tree t;
5326   tree d;
5327   struct hash_entry* e;
5328
5329   static struct hash_table ht;
5330
5331   if (!ht.table)
5332     {
5333       static struct hash_table *h = &ht;
5334       if (!hash_table_init (&ht, &hash_newfunc, &typename_hash,
5335                             &typename_compare))
5336         fatal ("virtual memory exhausted");
5337       ggc_add_tree_hash_table_root (&h, 1);
5338     }
5339
5340   /* Build the TYPENAME_TYPE.  */
5341   t = make_aggr_type (TYPENAME_TYPE);
5342   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5343   TYPENAME_TYPE_FULLNAME (t) = fullname;
5344   TREE_TYPE (t) = base_type;
5345
5346   /* Build the corresponding TYPE_DECL.  */
5347   d = build_decl (TYPE_DECL, name, t);
5348   TYPE_NAME (TREE_TYPE (d)) = d;
5349   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
5350   DECL_CONTEXT (d) = FROB_CONTEXT (context);
5351   DECL_ARTIFICIAL (d) = 1;
5352
5353   /* See if we already have this type.  */
5354   e = hash_lookup (&ht, t, /*create=*/false, /*copy=*/0);
5355   if (e)
5356     t = (tree) e->key;
5357   else
5358     /* Insert the type into the table.  */
5359     hash_lookup (&ht, t, /*create=*/true, /*copy=*/0);
5360
5361   return t;
5362 }
5363
5364 /* Resolve `typename CONTEXT::NAME'.  Returns an appropriate type,
5365    unless an error occurs, in which case error_mark_node is returned.
5366    If COMPLAIN zero, don't complain about any errors that occur.  */
5367
5368 tree
5369 make_typename_type (context, name, complain)
5370      tree context, name;
5371      int complain;
5372 {
5373   tree fullname;
5374
5375   if (TYPE_P (name))
5376     {
5377       if (!(TYPE_LANG_SPECIFIC (name)
5378             && (CLASSTYPE_IS_TEMPLATE (name)
5379                 || CLASSTYPE_USE_TEMPLATE (name))))
5380         name = TYPE_IDENTIFIER (name);
5381       else
5382         /* Create a TEMPLATE_ID_EXPR for the type.  */
5383         name = build_nt (TEMPLATE_ID_EXPR,
5384                          CLASSTYPE_TI_TEMPLATE (name),
5385                          CLASSTYPE_TI_ARGS (name));
5386     }
5387   else if (TREE_CODE (name) == TYPE_DECL)
5388     name = DECL_NAME (name);
5389
5390   fullname = name;
5391
5392   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
5393     {
5394       name = TREE_OPERAND (name, 0);
5395       if (TREE_CODE (name) == TEMPLATE_DECL)
5396         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
5397     }
5398   if (TREE_CODE (name) != IDENTIFIER_NODE)
5399     my_friendly_abort (2000);
5400
5401   if (TREE_CODE (context) == NAMESPACE_DECL)
5402     {
5403       /* We can get here from typename_sub0 in the explicit_template_type
5404          expansion.  Just fail.  */
5405       if (complain)
5406         cp_error ("no class template named `%#T' in `%#T'",
5407                   name, context);
5408       return error_mark_node;
5409     }
5410
5411   if (! uses_template_parms (context)
5412       || currently_open_class (context))
5413     {
5414       if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
5415         {
5416           tree tmpl = NULL_TREE;
5417           if (IS_AGGR_TYPE (context))
5418             tmpl = lookup_field (context, name, 0, 0);
5419           if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5420             {
5421               if (complain)
5422                 cp_error ("no class template named `%#T' in `%#T'",
5423                           name, context);
5424               return error_mark_node;
5425             }
5426
5427           return lookup_template_class (tmpl,
5428                                         TREE_OPERAND (fullname, 1),
5429                                         NULL_TREE, context,
5430                                         /*entering_scope=*/0);
5431         }
5432       else
5433         {
5434           tree t;
5435
5436           if (!IS_AGGR_TYPE (context))
5437             {
5438               if (complain)
5439                 cp_error ("no type named `%#T' in `%#T'", name, context);
5440               return error_mark_node;
5441             }
5442
5443           t = lookup_field (context, name, 0, 1);
5444           if (t)
5445             return TREE_TYPE (t);
5446         }
5447     }
5448
5449   /* If the CONTEXT is not a template type, then either the field is
5450      there now or its never going to be.  */
5451   if (!uses_template_parms (context))
5452     {
5453       if (complain)
5454         cp_error ("no type named `%#T' in `%#T'", name, context);
5455       return error_mark_node;
5456     }
5457
5458
5459   return build_typename_type (context, name, fullname,  NULL_TREE);
5460 }
5461
5462 /* Select the right _DECL from multiple choices. */
5463
5464 static tree
5465 select_decl (binding, flags)
5466      tree binding;
5467      int flags;
5468 {
5469   tree val;
5470   val = BINDING_VALUE (binding);
5471   if (LOOKUP_NAMESPACES_ONLY (flags))
5472     {
5473       /* We are not interested in types. */
5474       if (val && TREE_CODE (val) == NAMESPACE_DECL)
5475         return val;
5476       return NULL_TREE;
5477     }
5478
5479   /* If we could have a type and
5480      we have nothing or we need a type and have none.  */
5481   if (BINDING_TYPE (binding)
5482       && (!val || ((flags & LOOKUP_PREFER_TYPES)
5483                    && TREE_CODE (val) != TYPE_DECL)))
5484     val = TYPE_STUB_DECL (BINDING_TYPE (binding));
5485   /* Don't return non-types if we really prefer types. */
5486   else if (val && LOOKUP_TYPES_ONLY (flags)  && TREE_CODE (val) != TYPE_DECL
5487            && (TREE_CODE (val) != TEMPLATE_DECL
5488                || !DECL_CLASS_TEMPLATE_P (val)))
5489     val = NULL_TREE;
5490
5491   return val;
5492 }
5493
5494 /* Unscoped lookup of a global: iterate over current namespaces,
5495    considering using-directives.  If SPACESP is non-NULL, store a list
5496    of the namespaces we've considered in it.  */
5497
5498 tree
5499 unqualified_namespace_lookup (name, flags, spacesp)
5500      tree name;
5501      int flags;
5502      tree *spacesp;
5503 {
5504   tree b = make_node (CPLUS_BINDING);
5505   tree initial = current_decl_namespace();
5506   tree scope = initial;
5507   tree siter;
5508   struct binding_level *level;
5509   tree val = NULL_TREE;
5510
5511   if (spacesp)
5512     *spacesp = NULL_TREE;
5513
5514   for (; !val; scope = CP_DECL_CONTEXT (scope))
5515     {
5516       if (spacesp)
5517         *spacesp = tree_cons (scope, NULL_TREE, *spacesp);
5518       val = binding_for_name (name, scope);
5519
5520       /* Initialize binding for this context. */
5521       BINDING_VALUE (b) = BINDING_VALUE (val);
5522       BINDING_TYPE (b) = BINDING_TYPE (val);
5523
5524       /* Add all _DECLs seen through local using-directives. */
5525       for (level = current_binding_level;
5526            !level->namespace_p;
5527            level = level->level_chain)
5528         if (!lookup_using_namespace (name, b, level->using_directives,
5529                                      scope, flags, spacesp))
5530           /* Give up because of error. */
5531           return error_mark_node;
5532
5533       /* Add all _DECLs seen through global using-directives. */
5534       /* XXX local and global using lists should work equally. */
5535       siter = initial;
5536       while (1)
5537         {
5538           if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
5539                                        scope, flags, spacesp))
5540             /* Give up because of error. */
5541             return error_mark_node;
5542           if (siter == scope) break;
5543           siter = CP_DECL_CONTEXT (siter);
5544         }
5545
5546       val = select_decl (b, flags);
5547       if (scope == global_namespace)
5548         break;
5549     }
5550   return val;
5551 }
5552
5553 /* Combine prefer_type and namespaces_only into flags.  */
5554
5555 static int
5556 lookup_flags (prefer_type, namespaces_only)
5557   int prefer_type, namespaces_only;
5558 {
5559   if (namespaces_only)
5560     return LOOKUP_PREFER_NAMESPACES;
5561   if (prefer_type > 1)
5562     return LOOKUP_PREFER_TYPES;
5563   if (prefer_type > 0)
5564     return LOOKUP_PREFER_BOTH;
5565   return 0;
5566 }
5567
5568 /* Given a lookup that returned VAL, use FLAGS to decide if we want to
5569    ignore it or not.  Subroutine of lookup_name_real.  */
5570
5571 static tree
5572 qualify_lookup (val, flags)
5573      tree val;
5574      int flags;
5575 {
5576   if (val == NULL_TREE)
5577     return val;
5578   if ((flags & LOOKUP_PREFER_NAMESPACES) && TREE_CODE (val) == NAMESPACE_DECL)
5579     return val;
5580   if ((flags & LOOKUP_PREFER_TYPES)
5581       && (TREE_CODE (val) == TYPE_DECL
5582           || ((flags & LOOKUP_TEMPLATES_EXPECTED)
5583               && DECL_CLASS_TEMPLATE_P (val))))
5584     return val;
5585   if (flags & (LOOKUP_PREFER_NAMESPACES | LOOKUP_PREFER_TYPES))
5586     return NULL_TREE;
5587   return val;
5588 }
5589
5590 /* Any other BINDING overrides an implicit TYPENAME.  Warn about
5591    that.  */
5592
5593 static void
5594 warn_about_implicit_typename_lookup (typename, binding)
5595      tree typename;
5596      tree binding;
5597 {
5598   tree subtype = TREE_TYPE (TREE_TYPE (typename));
5599   tree name = DECL_NAME (typename);
5600
5601   if (! (TREE_CODE (binding) == TEMPLATE_DECL
5602          && CLASSTYPE_TEMPLATE_INFO (subtype)
5603          && CLASSTYPE_TI_TEMPLATE (subtype) == binding)
5604       && ! (TREE_CODE (binding) == TYPE_DECL
5605             && same_type_p (TREE_TYPE (binding), subtype)))
5606     {
5607       cp_warning ("lookup of `%D' finds `%#D'",
5608                   name, binding);
5609       cp_warning ("  instead of `%D' from dependent base class",
5610                   typename);
5611       cp_warning ("  (use `typename %T::%D' if that's what you meant)",
5612                   constructor_name (current_class_type), name);
5613     }
5614 }
5615
5616 /* Look up NAME in the current binding level and its superiors in the
5617    namespace of variables, functions and typedefs.  Return a ..._DECL
5618    node of some kind representing its definition if there is only one
5619    such declaration, or return a TREE_LIST with all the overloaded
5620    definitions if there are many, or return 0 if it is undefined.
5621
5622    If PREFER_TYPE is > 0, we prefer TYPE_DECLs or namespaces.
5623    If PREFER_TYPE is > 1, we reject non-type decls (e.g. namespaces).
5624    If PREFER_TYPE is -2, we're being called from yylex(). (UGLY)
5625    Otherwise we prefer non-TYPE_DECLs.
5626
5627    If NONCLASS is non-zero, we don't look for the NAME in class scope,
5628    using IDENTIFIER_CLASS_VALUE.  */
5629
5630 static tree
5631 lookup_name_real (name, prefer_type, nonclass, namespaces_only)
5632      tree name;
5633      int prefer_type, nonclass, namespaces_only;
5634 {
5635   tree t;
5636   tree val = NULL_TREE;
5637   int yylex = 0;
5638   tree from_obj = NULL_TREE;
5639   int flags;
5640   int val_is_implicit_typename = 0;
5641
5642   /* Hack: copy flag set by parser, if set. */
5643   if (only_namespace_names)
5644     namespaces_only = 1;
5645
5646   if (prefer_type == -2)
5647     {
5648       extern int looking_for_typename;
5649       tree type = NULL_TREE;
5650
5651       yylex = 1;
5652       prefer_type = looking_for_typename;
5653
5654       flags = lookup_flags (prefer_type, namespaces_only);
5655       /* If the next thing is '<', class templates are types. */
5656       if (looking_for_template)
5657         flags |= LOOKUP_TEMPLATES_EXPECTED;
5658
5659       /* std:: becomes :: for now.  */
5660       if (got_scope == std_node)
5661         got_scope = void_type_node;
5662
5663       if (got_scope)
5664         type = got_scope;
5665       else if (got_object != error_mark_node)
5666         type = got_object;
5667
5668       if (type)
5669         {
5670           if (type == error_mark_node)
5671             return error_mark_node;
5672           if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5673             type = TREE_TYPE (type);
5674
5675           if (TYPE_P (type))
5676             type = complete_type (type);
5677
5678           if (TREE_CODE (type) == VOID_TYPE)
5679             type = global_namespace;
5680           if (TREE_CODE (type) == NAMESPACE_DECL)
5681             {
5682               val = make_node (CPLUS_BINDING);
5683               flags |= LOOKUP_COMPLAIN;
5684               if (!qualified_lookup_using_namespace (name, type, val, flags))
5685                 return NULL_TREE;
5686               val = select_decl (val, flags);
5687             }
5688           else if (! IS_AGGR_TYPE (type)
5689                    || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5690                    || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
5691                    || TREE_CODE (type) == TYPENAME_TYPE)
5692             /* Someone else will give an error about this if needed.  */
5693             val = NULL_TREE;
5694           else if (type == current_class_type)
5695             val = IDENTIFIER_CLASS_VALUE (name);
5696           else
5697             {
5698               val = lookup_member (type, name, 0, prefer_type);
5699               type_access_control (type, val);
5700             }
5701         }
5702       else
5703         val = NULL_TREE;
5704
5705       if (got_scope)
5706         goto done;
5707       else if (got_object && val)
5708         from_obj = val;
5709     }
5710   else
5711     {
5712       flags = lookup_flags (prefer_type, namespaces_only);
5713       /* If we're not parsing, we need to complain. */
5714       flags |= LOOKUP_COMPLAIN;
5715     }
5716
5717   /* First, look in non-namespace scopes.  */
5718
5719   if (current_class_type == NULL_TREE)
5720     nonclass = 1;
5721
5722   for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
5723     {
5724       tree binding;
5725
5726       if (!LOCAL_BINDING_P (t) && nonclass)
5727         /* We're not looking for class-scoped bindings, so keep going.  */
5728         continue;
5729
5730       /* If this is the kind of thing we're looking for, we're done.  */
5731       if (qualify_lookup (BINDING_VALUE (t), flags))
5732         binding = BINDING_VALUE (t);
5733       else if ((flags & LOOKUP_PREFER_TYPES)
5734                && qualify_lookup (BINDING_TYPE (t), flags))
5735         binding = BINDING_TYPE (t);
5736       else
5737         binding = NULL_TREE;
5738
5739       /* Handle access control on types from enclosing or base classes.  */
5740       if (binding && ! yylex
5741           && BINDING_LEVEL (t) && BINDING_LEVEL (t)->parm_flag == 2)
5742         type_access_control (BINDING_LEVEL (t)->this_class, binding);
5743
5744       if (binding
5745           && (!val || !IMPLICIT_TYPENAME_TYPE_DECL_P (binding)))
5746         {
5747           if (val_is_implicit_typename && !yylex)
5748             warn_about_implicit_typename_lookup (val, binding);
5749           val = binding;
5750           val_is_implicit_typename
5751             = IMPLICIT_TYPENAME_TYPE_DECL_P (val);
5752           if (!val_is_implicit_typename)
5753             break;
5754         }
5755     }
5756
5757   /* Now lookup in namespace scopes.  */
5758   if (!val || val_is_implicit_typename)
5759     {
5760       t = unqualified_namespace_lookup (name, flags, 0);
5761       if (t)
5762         {
5763           if (val_is_implicit_typename && !yylex)
5764             warn_about_implicit_typename_lookup (val, t);
5765           val = t;
5766         }
5767     }
5768
5769  done:
5770   if (val)
5771     {
5772       /* This should only warn about types used in qualified-ids.  */
5773       if (from_obj && from_obj != val)
5774         {
5775           if (looking_for_typename && TREE_CODE (from_obj) == TYPE_DECL
5776               && TREE_CODE (val) == TYPE_DECL
5777               && TREE_TYPE (from_obj) != TREE_TYPE (val))
5778             {
5779               cp_pedwarn ("lookup of `%D' in the scope of `%#T' (`%#T')",
5780                           name, got_object, TREE_TYPE (from_obj));
5781               cp_pedwarn ("  does not match lookup in the current scope (`%#T')",
5782                           TREE_TYPE (val));
5783             }
5784
5785           /* We don't change val to from_obj if got_object depends on
5786              template parms because that breaks implicit typename for
5787              destructor calls.  */
5788           if (! uses_template_parms (got_object))
5789             val = from_obj;
5790         }
5791
5792       /* If we have a single function from a using decl, pull it out.  */
5793       if (TREE_CODE (val) == OVERLOAD && ! really_overloaded_fn (val))
5794         val = OVL_FUNCTION (val);
5795     }
5796   else if (from_obj)
5797     val = from_obj;
5798
5799   return val;
5800 }
5801
5802 tree
5803 lookup_name_nonclass (name)
5804      tree name;
5805 {
5806   return lookup_name_real (name, 0, 1, 0);
5807 }
5808
5809 tree
5810 lookup_function_nonclass (name, args)
5811      tree name;
5812      tree args;
5813 {
5814   return lookup_arg_dependent (name, lookup_name_nonclass (name), args);
5815 }
5816
5817 tree
5818 lookup_name_namespace_only (name)
5819      tree name;
5820 {
5821   /* type-or-namespace, nonclass, namespace_only */
5822   return lookup_name_real (name, 1, 1, 1);
5823 }
5824
5825 tree
5826 lookup_name (name, prefer_type)
5827      tree name;
5828      int prefer_type;
5829 {
5830   return lookup_name_real (name, prefer_type, 0, 0);
5831 }
5832
5833 /* Similar to `lookup_name' but look only in the innermost non-class
5834    binding level.  */
5835
5836 tree
5837 lookup_name_current_level (name)
5838      tree name;
5839 {
5840   struct binding_level *b;
5841   tree t = NULL_TREE;
5842
5843   b = current_binding_level;
5844   while (b->parm_flag == 2)
5845     b = b->level_chain;
5846
5847   if (b->namespace_p)
5848     {
5849       t = IDENTIFIER_NAMESPACE_VALUE (name);
5850
5851       /* extern "C" function() */
5852       if (t != NULL_TREE && TREE_CODE (t) == TREE_LIST)
5853         t = TREE_VALUE (t);
5854     }
5855   else if (IDENTIFIER_BINDING (name)
5856            && LOCAL_BINDING_P (IDENTIFIER_BINDING (name)))
5857     {
5858       while (1)
5859         {
5860           if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
5861             return IDENTIFIER_VALUE (name);
5862
5863           if (b->keep == 2)
5864             b = b->level_chain;
5865           else
5866             break;
5867         }
5868     }
5869
5870   return t;
5871 }
5872
5873 /* Like lookup_name_current_level, but for types.  */
5874
5875 tree
5876 lookup_type_current_level (name)
5877      tree name;
5878 {
5879   register tree t = NULL_TREE;
5880
5881   my_friendly_assert (! current_binding_level->namespace_p, 980716);
5882
5883   if (REAL_IDENTIFIER_TYPE_VALUE (name) != NULL_TREE
5884       && REAL_IDENTIFIER_TYPE_VALUE (name) != global_type_node)
5885     {
5886       struct binding_level *b = current_binding_level;
5887       while (1)
5888         {
5889           if (purpose_member (name, b->type_shadowed))
5890             return REAL_IDENTIFIER_TYPE_VALUE (name);
5891           if (b->keep == 2)
5892             b = b->level_chain;
5893           else
5894             break;
5895         }
5896     }
5897
5898   return t;
5899 }
5900
5901 void
5902 begin_only_namespace_names ()
5903 {
5904   only_namespace_names = 1;
5905 }
5906
5907 void
5908 end_only_namespace_names ()
5909 {
5910   only_namespace_names = 0;
5911 }
5912 \f
5913 /* Arrange for the user to get a source line number, even when the
5914    compiler is going down in flames, so that she at least has a
5915    chance of working around problems in the compiler.  We used to
5916    call error(), but that let the segmentation fault continue
5917    through; now, it's much more passive by asking them to send the
5918    maintainers mail about the problem.  */
5919
5920 static void
5921 signal_catch (sig)
5922      int sig ATTRIBUTE_UNUSED;
5923 {
5924   signal (SIGSEGV, SIG_DFL);
5925 #ifdef SIGIOT
5926   signal (SIGIOT, SIG_DFL);
5927 #endif
5928 #ifdef SIGILL
5929   signal (SIGILL, SIG_DFL);
5930 #endif
5931 #ifdef SIGABRT
5932   signal (SIGABRT, SIG_DFL);
5933 #endif
5934 #ifdef SIGBUS
5935   signal (SIGBUS, SIG_DFL);
5936 #endif
5937   my_friendly_abort (0);
5938 }
5939
5940 /* Push the declarations of builtin types into the namespace.
5941    RID_INDEX, if < RID_MAX is the index of the builtin type
5942    in the array RID_POINTERS.  NAME is the name used when looking
5943    up the builtin type.  TYPE is the _TYPE node for the builtin type.  */
5944
5945 static void
5946 record_builtin_type (rid_index, name, type)
5947      enum rid rid_index;
5948      const char *name;
5949      tree type;
5950 {
5951   tree rname = NULL_TREE, tname = NULL_TREE;
5952   tree tdecl = NULL_TREE;
5953
5954   if ((int) rid_index < (int) RID_MAX)
5955     rname = ridpointers[(int) rid_index];
5956   if (name)
5957     tname = get_identifier (name);
5958
5959   TYPE_BUILT_IN (type) = 1;
5960
5961   if (tname)
5962     {
5963       tdecl = pushdecl (build_decl (TYPE_DECL, tname, type));
5964       set_identifier_type_value (tname, NULL_TREE);
5965       if ((int) rid_index < (int) RID_MAX)
5966         /* Built-in types live in the global namespace. */
5967         SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
5968     }
5969   if (rname != NULL_TREE)
5970     {
5971       if (tname != NULL_TREE)
5972         {
5973           set_identifier_type_value (rname, NULL_TREE);
5974           SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
5975         }
5976       else
5977         {
5978           tdecl = pushdecl (build_decl (TYPE_DECL, rname, type));
5979           set_identifier_type_value (rname, NULL_TREE);
5980         }
5981     }
5982 }
5983
5984 /* Record one of the standard Java types.
5985  * Declare it as having the given NAME.
5986  * If SIZE > 0, it is the size of one of the integral types;
5987  * otherwise it is the negative of the size of one of the other types.  */
5988
5989 static tree
5990 record_builtin_java_type (name, size)
5991      const char *name;
5992      int size;
5993 {
5994   tree type, decl;
5995   if (size > 0)
5996     type = make_signed_type (size);
5997   else if (size > -32)
5998     { /* "__java_char" or ""__java_boolean". */
5999       type = make_unsigned_type (-size);
6000       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
6001     }
6002   else
6003     { /* "__java_float" or ""__java_double". */
6004       type = make_node (REAL_TYPE);
6005       TYPE_PRECISION (type) = - size;
6006       layout_type (type);
6007     }
6008   record_builtin_type (RID_MAX, name, type);
6009   decl = TYPE_NAME (type);
6010
6011   /* Suppress generate debug symbol entries for these types,
6012      since for normal C++ they are just clutter.
6013      However, push_lang_context undoes this if extern "Java" is seen. */
6014   DECL_IGNORED_P (decl) = 1;
6015
6016   TYPE_FOR_JAVA (type) = 1;
6017   return type;
6018 }
6019
6020 /* Push a type into the namespace so that the back-ends ignore it. */
6021
6022 static void
6023 record_unknown_type (type, name)
6024      tree type;
6025      const char *name;
6026 {
6027   tree decl = pushdecl (build_decl (TYPE_DECL, get_identifier (name), type));
6028   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
6029   DECL_IGNORED_P (decl) = 1;
6030   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6031   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
6032   TYPE_ALIGN (type) = 1;
6033   TYPE_MODE (type) = TYPE_MODE (void_type_node);
6034 }
6035
6036 /* An string for which we should create an IDENTIFIER_NODE at
6037    startup.  */
6038
6039 typedef struct predefined_identifier
6040 {
6041   /* The name of the identifier.  */
6042   const char *name;
6043   /* The place where the IDENTIFIER_NODE should be stored.  */
6044   tree *node;
6045   /* Non-zero if this is the name of a constructor or destructor.  */
6046   int ctor_or_dtor_p;
6047 } predefined_identifier;
6048
6049 /* Create all the predefined identifiers.  */
6050
6051 static void
6052 initialize_predefined_identifiers () 
6053 {
6054   struct predefined_identifier *pid;
6055
6056   /* A table of identifiers to create at startup.  */
6057   static predefined_identifier predefined_identifiers[] = {
6058     { "C++", &lang_name_cplusplus, 0 },
6059     { "C", &lang_name_c, 0 },
6060     { "Java", &lang_name_java, 0 },
6061     { CTOR_NAME, &ctor_identifier, 1 },
6062     { "__base_ctor", &base_ctor_identifier, 1 },
6063     { "__comp_ctor", &complete_ctor_identifier, 1 },
6064     { DTOR_NAME, &dtor_identifier, 1 },
6065     { "__comp_dtor", &complete_dtor_identifier, 1 },
6066     { "__base_dtor", &base_dtor_identifier, 1 },
6067     { "__deleting_dtor", &deleting_dtor_identifier, 1 },
6068     { VTABLE_DELTA2_NAME, &delta2_identifier, 0 },
6069     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
6070     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
6071     { VTABLE_INDEX_NAME, &index_identifier, 0 },
6072     { "nelts", &nelts_identifier, 0 },
6073     { THIS_NAME, &this_identifier, 0 },
6074     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
6075     { "__pfn_or_delta2", &pfn_or_delta2_identifier, 0 },
6076     { "_vptr", &vptr_identifier, 0 },
6077     { "__cp_push_exception", &cp_push_exception_identifier, 0 },
6078     { NULL, NULL, 0 }
6079   };
6080
6081   for (pid = predefined_identifiers; pid->name; ++pid)
6082     {
6083       *pid->node = get_identifier (pid->name);
6084       if (pid->ctor_or_dtor_p)
6085         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
6086     }
6087 }
6088
6089 /* Create the predefined scalar types of C,
6090    and some nodes representing standard constants (0, 1, (void *)0).
6091    Initialize the global binding level.
6092    Make definitions for built-in primitive functions.  */
6093
6094 void
6095 init_decl_processing ()
6096 {
6097   tree fields[20];
6098   int wchar_type_size;
6099   tree array_domain_type;
6100
6101   /* Check to see that the user did not specify an invalid combination
6102      of command-line options.  */
6103   if (flag_new_abi && !flag_vtable_thunks)
6104     fatal ("the new ABI requires vtable thunks");
6105
6106   /* Create all the identifiers we need.  */
6107   initialize_predefined_identifiers ();
6108
6109   /* Let the back-end now how to save and restore language-specific
6110      per-function globals.  */
6111   init_lang_status = &push_cp_function_context;
6112   free_lang_status = &pop_cp_function_context;
6113   mark_lang_status = &mark_cp_function_context;
6114
6115   cp_parse_init ();
6116   init_decl2 ();
6117   init_pt ();
6118
6119   /* Create the global variables.  */
6120   push_to_top_level ();
6121
6122   /* Enter the global namespace. */
6123   my_friendly_assert (global_namespace == NULL_TREE, 375);
6124   push_namespace (get_identifier ("::"));
6125   global_namespace = current_namespace;
6126   current_lang_name = NULL_TREE;
6127
6128   /* Adjust various flags based on command-line settings.  */
6129   if (flag_strict_prototype == 2)
6130     flag_strict_prototype = pedantic;
6131   if (! flag_permissive && ! pedantic)
6132     flag_pedantic_errors = 1;
6133   if (!flag_no_inline)
6134     flag_inline_trees = 1;
6135
6136   strict_prototypes_lang_c = flag_strict_prototype;
6137
6138   /* Initially, C.  */
6139   current_lang_name = lang_name_c;
6140
6141   current_function_decl = NULL_TREE;
6142   current_binding_level = NULL_BINDING_LEVEL;
6143   free_binding_level = NULL_BINDING_LEVEL;
6144
6145   /* Because most segmentation signals can be traced back into user
6146      code, catch them and at least give the user a chance of working
6147      around compiler bugs.  */
6148   signal (SIGSEGV, signal_catch);
6149
6150   /* We will also catch aborts in the back-end through signal_catch and
6151      give the user a chance to see where the error might be, and to defeat
6152      aborts in the back-end when there have been errors previously in their
6153      code.  */
6154 #ifdef SIGIOT
6155   signal (SIGIOT, signal_catch);
6156 #endif
6157 #ifdef SIGILL
6158   signal (SIGILL, signal_catch);
6159 #endif
6160 #ifdef SIGABRT
6161   signal (SIGABRT, signal_catch);
6162 #endif
6163 #ifdef SIGBUS
6164   signal (SIGBUS, signal_catch);
6165 #endif
6166
6167   build_common_tree_nodes (flag_signed_char);
6168
6169   error_mark_list = build_tree_list (error_mark_node, error_mark_node);
6170   TREE_TYPE (error_mark_list) = error_mark_node;
6171
6172   /* Make the binding_level structure for global names.  */
6173   pushlevel (0);
6174   global_binding_level = current_binding_level;
6175   /* The global level is the namespace level of ::.  */
6176   NAMESPACE_LEVEL (global_namespace) = global_binding_level;
6177   declare_namespace_level ();
6178
6179   /* Define `int' and `char' first so that dbx will output them first.  */
6180   record_builtin_type (RID_INT, NULL_PTR, integer_type_node);
6181   record_builtin_type (RID_CHAR, "char", char_type_node);
6182
6183   /* `signed' is the same as `int' */
6184   record_builtin_type (RID_SIGNED, NULL_PTR, integer_type_node);
6185   record_builtin_type (RID_LONG, "long int", long_integer_type_node);
6186   record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
6187   record_builtin_type (RID_MAX, "long unsigned int", long_unsigned_type_node);
6188   record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
6189   record_builtin_type (RID_MAX, "long long int", long_long_integer_type_node);
6190   record_builtin_type (RID_MAX, "long long unsigned int",
6191                        long_long_unsigned_type_node);
6192   record_builtin_type (RID_MAX, "long long unsigned",
6193                        long_long_unsigned_type_node);
6194   record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
6195   record_builtin_type (RID_MAX, "short unsigned int", short_unsigned_type_node);
6196   record_builtin_type (RID_MAX, "unsigned short", short_unsigned_type_node);
6197
6198   ptrdiff_type_node
6199     = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
6200
6201   /* Define both `signed char' and `unsigned char'.  */
6202   record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
6203   record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
6204
6205   /* `unsigned long' is the standard type for sizeof.
6206      Note that stddef.h uses `unsigned long',
6207      and this must agree, even if long and int are the same size.  */
6208   set_sizetype
6209     (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE))));
6210
6211   /* Create the widest literal types. */
6212   widest_integer_literal_type_node = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
6213   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6214                         widest_integer_literal_type_node));
6215
6216   widest_unsigned_literal_type_node = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
6217   pushdecl (build_decl (TYPE_DECL, NULL_TREE,
6218                         widest_unsigned_literal_type_node));
6219
6220   /* These are types that type_for_size and type_for_mode use.  */
6221   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
6222   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
6223   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
6224   pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
6225 #if HOST_BITS_PER_WIDE_INT >= 64
6226   pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
6227 #endif
6228   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
6229   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
6230   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
6231   pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
6232 #if HOST_BITS_PER_WIDE_INT >= 64
6233   pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
6234 #endif
6235
6236   build_common_tree_nodes_2 (flag_short_double);
6237
6238   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
6239   java_short_type_node = record_builtin_java_type ("__java_short", 16);
6240   java_int_type_node = record_builtin_java_type ("__java_int", 32);
6241   java_long_type_node = record_builtin_java_type ("__java_long", 64);
6242   java_float_type_node = record_builtin_java_type ("__java_float", -32);
6243   java_double_type_node = record_builtin_java_type ("__java_double", -64);
6244   java_char_type_node = record_builtin_java_type ("__java_char", -16);
6245   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
6246
6247   integer_two_node = build_int_2 (2, 0);
6248   TREE_TYPE (integer_two_node) = integer_type_node;
6249   integer_three_node = build_int_2 (3, 0);
6250   TREE_TYPE (integer_three_node) = integer_type_node;
6251
6252   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
6253   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
6254   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
6255   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
6256   TYPE_PRECISION (boolean_type_node) = 1;
6257   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
6258   boolean_false_node = build_int_2 (0, 0);
6259   TREE_TYPE (boolean_false_node) = boolean_type_node;
6260   boolean_true_node = build_int_2 (1, 0);
6261   TREE_TYPE (boolean_true_node) = boolean_type_node;
6262
6263   signed_size_zero_node = build_int_2 (0, 0);
6264   record_builtin_type (RID_FLOAT, NULL_PTR, float_type_node);
6265   record_builtin_type (RID_DOUBLE, NULL_PTR, double_type_node);
6266   record_builtin_type (RID_MAX, "long double", long_double_type_node);
6267
6268   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
6269                         complex_integer_type_node));
6270   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
6271                         complex_float_type_node));
6272   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
6273                         complex_double_type_node));
6274   pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
6275                         complex_long_double_type_node));
6276
6277   TREE_TYPE (signed_size_zero_node) = make_signed_type (TYPE_PRECISION (sizetype));
6278
6279   record_builtin_type (RID_VOID, NULL_PTR, void_type_node);
6280   void_list_node = build_tree_list (NULL_TREE, void_type_node);
6281   TREE_PARMLIST (void_list_node) = 1;
6282
6283   /* Used for expressions that do nothing, but are not errors.  */
6284   void_zero_node = build_int_2 (0, 0);
6285   TREE_TYPE (void_zero_node) = void_type_node;
6286
6287   string_type_node = build_pointer_type (char_type_node);
6288   const_string_type_node
6289     = build_pointer_type (build_qualified_type (char_type_node,
6290                                                 TYPE_QUAL_CONST));
6291   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
6292 #if 0
6293   record_builtin_type (RID_MAX, NULL_PTR, string_type_node);
6294 #endif
6295
6296   /* Make a type to be the domain of a few array types
6297      whose domains don't really matter.
6298      200 is small enough that it always fits in size_t.  */
6299   array_domain_type = build_index_type (build_int_2 (200, 0));
6300
6301   /* Make a type for arrays of characters.
6302      With luck nothing will ever really depend on the length of this
6303      array type.  */
6304   char_array_type_node
6305     = build_array_type (char_type_node, array_domain_type);
6306   /* Likewise for arrays of ints.  */
6307   int_array_type_node
6308     = build_array_type (integer_type_node, array_domain_type);
6309
6310   if (flag_new_abi)
6311     delta_type_node = ptrdiff_type_node;
6312   else if (flag_huge_objects)
6313     delta_type_node = long_integer_type_node;
6314   else
6315     delta_type_node = short_integer_type_node;
6316
6317   if (flag_new_abi)
6318     vtable_index_type = ptrdiff_type_node;
6319   else
6320     vtable_index_type = delta_type_node;
6321
6322   default_function_type
6323     = build_function_type (integer_type_node, NULL_TREE);
6324
6325   ptr_type_node = build_pointer_type (void_type_node);
6326   const_ptr_type_node
6327     = build_pointer_type (build_qualified_type (void_type_node,
6328                                                 TYPE_QUAL_CONST));
6329   c_common_nodes_and_builtins (1, flag_no_builtin, flag_no_nonansi_builtin);
6330   lang_type_promotes_to = convert_type_from_ellipsis;
6331
6332   void_ftype_ptr
6333     = build_exception_variant (void_ftype_ptr, empty_except_spec);
6334
6335   /* C++ extensions */
6336
6337   unknown_type_node = make_node (UNKNOWN_TYPE);
6338   record_unknown_type (unknown_type_node, "unknown type");
6339
6340   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
6341   TREE_TYPE (unknown_type_node) = unknown_type_node;
6342
6343   TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0);
6344
6345   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
6346      result.  */
6347   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
6348   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
6349
6350   /* This is special for C++ so functions can be overloaded.  */
6351   wchar_type_node = get_identifier (flag_short_wchar
6352                                     ? "short unsigned int"
6353                                     : WCHAR_TYPE);
6354   wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
6355   wchar_type_size = TYPE_PRECISION (wchar_type_node);
6356   signed_wchar_type_node = make_signed_type (wchar_type_size);
6357   unsigned_wchar_type_node = make_unsigned_type (wchar_type_size);
6358   wchar_type_node
6359     = TREE_UNSIGNED (wchar_type_node)
6360       ? unsigned_wchar_type_node
6361       : signed_wchar_type_node;
6362   record_builtin_type (RID_WCHAR, "__wchar_t", wchar_type_node);
6363
6364   /* Artificial declaration of wchar_t -- can be bashed */
6365   wchar_decl_node = build_decl (TYPE_DECL, get_identifier ("wchar_t"),
6366                                 wchar_type_node);
6367   pushdecl (wchar_decl_node);
6368
6369   /* This is for wide string constants.  */
6370   wchar_array_type_node
6371     = build_array_type (wchar_type_node, array_domain_type);
6372
6373   if (flag_vtable_thunks)
6374     {
6375       /* Make sure we get a unique function type, so we can give
6376          its pointer type a name.  (This wins for gdb.) */
6377       tree vfunc_type = make_node (FUNCTION_TYPE);
6378       TREE_TYPE (vfunc_type) = integer_type_node;
6379       TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
6380       layout_type (vfunc_type);
6381
6382       vtable_entry_type = build_pointer_type (vfunc_type);
6383     }
6384   else
6385     {
6386       vtable_entry_type = make_aggr_type (RECORD_TYPE);
6387       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
6388                                    delta_type_node);
6389       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
6390                                    delta_type_node);
6391       fields[2] = build_lang_decl (FIELD_DECL, pfn_identifier,
6392                                    ptr_type_node);
6393       finish_builtin_type (vtable_entry_type, VTBL_PTR_TYPE, fields, 2,
6394                            double_type_node);
6395
6396       /* Make this part of an invisible union.  */
6397       fields[3] = copy_node (fields[2]);
6398       TREE_TYPE (fields[3]) = delta_type_node;
6399       DECL_NAME (fields[3]) = delta2_identifier;
6400       DECL_MODE (fields[3]) = TYPE_MODE (delta_type_node);
6401       DECL_SIZE (fields[3]) = TYPE_SIZE (delta_type_node);
6402       DECL_SIZE_UNIT (fields[3]) = TYPE_SIZE_UNIT (delta_type_node);
6403       TREE_UNSIGNED (fields[3]) = 0;
6404       TREE_CHAIN (fields[2]) = fields[3];
6405       vtable_entry_type = build_qualified_type (vtable_entry_type,
6406                                                 TYPE_QUAL_CONST);
6407     }
6408   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
6409
6410   vtbl_type_node
6411     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
6412   layout_type (vtbl_type_node);
6413   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
6414   record_builtin_type (RID_MAX, NULL_PTR, vtbl_type_node);
6415   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
6416   layout_type (vtbl_ptr_type_node);
6417   record_builtin_type (RID_MAX, NULL_PTR, vtbl_ptr_type_node);
6418
6419   std_node = build_decl (NAMESPACE_DECL,
6420                          get_identifier (flag_honor_std ? "fake std":"std"),
6421                          void_type_node);
6422   pushdecl (std_node);
6423   
6424   if (flag_new_abi)
6425     {
6426       push_namespace (get_identifier ("__cxxabiv1"));
6427       abi_node = current_namespace;
6428       pop_namespace ();
6429     }
6430
6431   global_type_node = make_node (LANG_TYPE);
6432   record_unknown_type (global_type_node, "global type");
6433
6434   /* Now, C++.  */
6435   current_lang_name = lang_name_cplusplus;
6436
6437   {
6438     tree bad_alloc_type_node, newtype, deltype;
6439     if (flag_honor_std)
6440       push_namespace (get_identifier ("std"));
6441     bad_alloc_type_node = xref_tag
6442       (class_type_node, get_identifier ("bad_alloc"), 1);
6443     if (flag_honor_std)
6444       pop_namespace ();
6445     newtype = build_exception_variant
6446       (ptr_ftype_sizetype, add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1));
6447     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
6448     push_cp_library_fn (ansi_opname[(int) NEW_EXPR], newtype);
6449     push_cp_library_fn (ansi_opname[(int) VEC_NEW_EXPR], newtype);
6450     global_delete_fndecl = push_cp_library_fn (ansi_opname[(int) DELETE_EXPR],
6451                                                deltype);
6452     push_cp_library_fn (ansi_opname[(int) VEC_DELETE_EXPR], deltype);
6453   }
6454
6455   abort_fndecl
6456     = build_library_fn_ptr ("__pure_virtual", void_ftype);
6457
6458   /* Perform other language dependent initializations.  */
6459   init_class_processing ();
6460   init_init_processing ();
6461   init_search_processing ();
6462   init_rtti_processing ();
6463
6464   if (flag_exceptions)
6465     init_exception_processing ();
6466   if (flag_no_inline)
6467     {
6468       flag_inline_functions = 0;
6469     }
6470
6471   if (! supports_one_only ())
6472     flag_weak = 0;
6473
6474   /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__.  */
6475   make_fname_decl = cp_make_fname_decl;
6476   declare_function_name ();
6477
6478   /* Prepare to check format strings against argument lists.  */
6479   init_function_format_info ();
6480
6481   /* Show we use EH for cleanups.  */
6482   using_eh_for_cleanups ();
6483
6484   print_error_function = lang_print_error_function;
6485   lang_get_alias_set = &c_get_alias_set;
6486   valid_lang_attribute = cp_valid_lang_attribute;
6487
6488   /* Maintain consistency.  Perhaps we should just complain if they
6489      say -fwritable-strings?  */
6490   if (flag_writable_strings)
6491     flag_const_strings = 0;
6492
6493   /* Add GC roots for all of our global variables.  */
6494   ggc_add_tree_root (c_global_trees, sizeof c_global_trees / sizeof(tree));
6495   ggc_add_tree_root (cp_global_trees, sizeof cp_global_trees / sizeof(tree));
6496   ggc_add_tree_root (&integer_three_node, 1);
6497   ggc_add_tree_root (&integer_two_node, 1);
6498   ggc_add_tree_root (&signed_size_zero_node, 1);
6499   ggc_add_tree_root (&size_one_node, 1);
6500   ggc_add_tree_root (&size_zero_node, 1);
6501   ggc_add_root (&global_binding_level, 1, sizeof global_binding_level,
6502                 mark_binding_level);
6503   ggc_add_root (&scope_chain, 1, sizeof scope_chain, &mark_saved_scope);
6504   ggc_add_tree_root (&static_ctors, 1);
6505   ggc_add_tree_root (&static_dtors, 1);
6506   ggc_add_tree_root (&lastiddecl, 1);
6507
6508   ggc_add_tree_root (&last_function_parm_tags, 1);
6509   ggc_add_tree_root (&current_function_return_value, 1);
6510   ggc_add_tree_root (&current_function_parms, 1);
6511   ggc_add_tree_root (&current_function_parm_tags, 1);
6512   ggc_add_tree_root (&last_function_parms, 1);
6513   ggc_add_tree_root (&error_mark_list, 1);
6514
6515   ggc_add_tree_root (&global_namespace, 1);
6516   ggc_add_tree_root (&global_type_node, 1);
6517   ggc_add_tree_root (&anonymous_namespace_name, 1);
6518
6519   ggc_add_tree_root (&got_object, 1);
6520   ggc_add_tree_root (&got_scope, 1);
6521
6522   ggc_add_tree_root (&current_lang_name, 1);
6523   ggc_add_tree_root (&static_aggregates, 1);
6524 }
6525
6526 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
6527    decl, NAME is the initialization string and TYPE_DEP indicates whether
6528    NAME depended on the type of the function. We make use of that to detect
6529    __PRETTY_FUNCTION__ inside a template fn.  Because we build a tree for
6530    the function before emitting any of it, we don't need to treat the
6531    VAR_DECL specially. We can decide whether to emit it later, if it was
6532    used.  */
6533
6534 static tree
6535 cp_make_fname_decl (id, name, type_dep)
6536      tree id;
6537      const char *name;
6538      int type_dep;
6539 {
6540   tree decl, type, init;
6541   size_t length = strlen (name);
6542   tree domain = NULL_TREE;
6543   
6544   if (!processing_template_decl)
6545     type_dep = 0;
6546   if (!type_dep)
6547     domain = build_index_type (build_int_2 (length, 0));
6548
6549   type =  build_cplus_array_type
6550           (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
6551            domain);
6552
6553   decl = build_decl (VAR_DECL, id, type);
6554   TREE_STATIC (decl) = 1;
6555   TREE_READONLY (decl) = 1;
6556   DECL_SOURCE_LINE (decl) = 0;
6557   DECL_ARTIFICIAL (decl) = 1;
6558   DECL_IN_SYSTEM_HEADER (decl) = 1;
6559   pushdecl (decl);
6560   if (processing_template_decl)
6561     decl = push_template_decl (decl);
6562   if (type_dep)
6563     {
6564       init = build (FUNCTION_NAME, type);
6565       DECL_PRETTY_FUNCTION_P (decl) = 1;
6566     }
6567   else
6568     {
6569       init = build_string (length + 1, name);
6570       TREE_TYPE (init) = type;
6571     }
6572   DECL_INITIAL (decl) = init;
6573   cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
6574   
6575   /* We will have to make sure we only emit this, if it is actually used. */
6576   return decl;
6577 }
6578
6579 /* Function to print any language-specific context for an error message.  */
6580
6581 static void
6582 lang_print_error_function (file)
6583      const char *file;
6584 {
6585   default_print_error_function (file);
6586   maybe_print_template_context ();
6587 }
6588
6589 /* Entry point for the benefit of c_common_nodes_and_builtins.
6590
6591    Make a definition for a builtin function named NAME and whose data type
6592    is TYPE.  TYPE should be a function type with argument types.
6593
6594    CLASS and CODE tell later passes how to compile calls to this function.
6595    See tree.h for possible values.
6596
6597    If LIBNAME is nonzero, use that for DECL_ASSEMBLER_NAME,
6598    the name to be called if we can't opencode the function.  */
6599
6600 tree
6601 builtin_function (name, type, code, class, libname)
6602      const char *name;
6603      tree type;
6604      int code;
6605      enum built_in_class class;
6606      const char *libname;
6607 {
6608   tree decl = build_library_fn_1 (get_identifier (name), type);
6609   DECL_BUILT_IN_CLASS (decl) = class;
6610   DECL_FUNCTION_CODE (decl) = code;
6611
6612   my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 392);
6613
6614   /* Since `pushdecl' relies on DECL_ASSEMBLER_NAME instead of DECL_NAME,
6615      we cannot change DECL_ASSEMBLER_NAME until we have installed this
6616      function in the namespace.  */
6617   pushdecl (decl);
6618   if (libname)
6619     DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
6620   make_function_rtl (decl);
6621   return decl;
6622 }
6623
6624 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
6625    function.  Not called directly.  */
6626
6627 static tree
6628 build_library_fn_1 (name, type)
6629      tree name;
6630      tree type;
6631 {
6632   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
6633   DECL_EXTERNAL (fn) = 1;
6634   TREE_PUBLIC (fn) = 1;
6635   DECL_ARTIFICIAL (fn) = 1;
6636   TREE_NOTHROW (fn) = 1;
6637   return fn;
6638 }
6639
6640 /* Returns the _DECL for a library function with C linkage.
6641    We assume that such functions never throw; if this is incorrect,
6642    callers should unset TREE_NOTHROW.  */
6643
6644 tree
6645 build_library_fn (name, type)
6646      tree name;
6647      tree type;
6648 {
6649   tree fn = build_library_fn_1 (name, type);
6650   make_function_rtl (fn);
6651   return fn;
6652 }
6653
6654 /* Returns the _DECL for a library function with C++ linkage.  */
6655
6656 tree
6657 build_cp_library_fn (name, type)
6658      tree name;
6659      tree type;
6660 {
6661   tree fn = build_library_fn_1 (name, type);
6662   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
6663   set_mangled_name_for_decl (fn);
6664   make_function_rtl (fn);
6665   return fn;
6666 }
6667
6668 /* Like build_library_fn, but takes a C string instead of an
6669    IDENTIFIER_NODE.  */
6670
6671 tree
6672 build_library_fn_ptr (name, type)
6673      const char *name;
6674      tree type;
6675 {
6676   return build_library_fn (get_identifier (name), type);
6677 }
6678
6679 /* Like build_cp_library_fn, but takes a C string instead of an
6680    IDENTIFIER_NODE.  */
6681
6682 tree
6683 build_cp_library_fn_ptr (name, type)
6684      const char *name;
6685      tree type;
6686 {
6687   return build_cp_library_fn (get_identifier (name), type);
6688 }
6689
6690 /* Like build_library_fn, but also pushes the function so that we will
6691    be able to find it via IDENTIFIER_GLOBAL_VALUE.  */
6692
6693 tree
6694 push_library_fn (name, type)
6695      tree name, type;
6696 {
6697   tree fn = build_library_fn (name, type);
6698   pushdecl_top_level (fn);
6699   return fn;
6700 }
6701
6702 /* Like build_cp_library_fn, but also pushes the function so that it
6703    will be found by normal lookup.  */
6704
6705 tree
6706 push_cp_library_fn (name, type)
6707      tree name;
6708      tree type;
6709 {
6710   tree fn = build_cp_library_fn (name, type);
6711   pushdecl (fn);
6712   return fn;
6713 }
6714
6715 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
6716    a FUNCTION_TYPE.  */
6717
6718 tree
6719 push_void_library_fn (name, parmtypes)
6720      tree name, parmtypes;
6721 {
6722   tree type = build_function_type (void_type_node, parmtypes);
6723   return push_library_fn (name, type);
6724 }
6725
6726 /* Like push_library_fn, but also note that this function throws
6727    and does not return.  Used for __throw_foo and the like.  */
6728
6729 tree
6730 push_throw_library_fn (name, type)
6731      tree name, type;
6732 {
6733   tree fn = push_library_fn (name, type);
6734   TREE_THIS_VOLATILE (fn) = 1;
6735   TREE_NOTHROW (fn) = 0;
6736   return fn;
6737 }
6738 \f
6739 /* When we call finish_struct for an anonymous union, we create
6740    default copy constructors and such.  But, an anonymous union
6741    shouldn't have such things; this function undoes the damage to the
6742    anonymous union type T.
6743
6744    (The reason that we create the synthesized methods is that we don't
6745    distinguish `union { int i; }' from `typedef union { int i; } U'.
6746    The first is an anonymous union; the second is just an ordinary
6747    union type.)  */
6748
6749 void
6750 fixup_anonymous_aggr (t)
6751      tree t;
6752 {
6753   tree *q;
6754
6755   /* Wipe out memory of synthesized methods */
6756   TYPE_HAS_CONSTRUCTOR (t) = 0;
6757   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
6758   TYPE_HAS_INIT_REF (t) = 0;
6759   TYPE_HAS_CONST_INIT_REF (t) = 0;
6760   TYPE_HAS_ASSIGN_REF (t) = 0;
6761   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
6762
6763   /* Splice the implicitly generated functions out of the TYPE_METHODS
6764      list.  */
6765   q = &TYPE_METHODS (t);
6766   while (*q)
6767     {
6768       if (DECL_ARTIFICIAL (*q))
6769         *q = TREE_CHAIN (*q);
6770       else
6771         q = &TREE_CHAIN (*q);
6772     }
6773
6774   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
6775   if (TYPE_METHODS (t))
6776     error ("an anonymous union cannot have function members");
6777 }
6778
6779 /* Make sure that a declaration with no declarator is well-formed, i.e.
6780    just defines a tagged type or anonymous union.
6781
6782    Returns the type defined, if any.  */
6783
6784 tree
6785 check_tag_decl (declspecs)
6786      tree declspecs;
6787 {
6788   int found_type = 0;
6789   int saw_friend = 0;
6790   tree ob_modifier = NULL_TREE;
6791   register tree link;
6792   register tree t = NULL_TREE;
6793
6794   for (link = declspecs; link; link = TREE_CHAIN (link))
6795     {
6796       register tree value = TREE_VALUE (link);
6797
6798       if (TYPE_P (value)
6799           || (TREE_CODE (value) == IDENTIFIER_NODE
6800               && IDENTIFIER_GLOBAL_VALUE (value)
6801               && TYPE_P (IDENTIFIER_GLOBAL_VALUE (value))))
6802         {
6803           ++found_type;
6804
6805           if (IS_AGGR_TYPE (value) || TREE_CODE (value) == ENUMERAL_TYPE)
6806             {
6807               my_friendly_assert (TYPE_MAIN_DECL (value) != NULL_TREE, 261);
6808               t = value;
6809             }
6810         }
6811       else if (value == ridpointers[(int) RID_FRIEND])
6812         {
6813           if (current_class_type == NULL_TREE
6814               || current_scope () != current_class_type)
6815             ob_modifier = value;
6816           else
6817             saw_friend = 1;
6818         }
6819       else if (value == ridpointers[(int) RID_STATIC]
6820                || value == ridpointers[(int) RID_EXTERN]
6821                || value == ridpointers[(int) RID_AUTO]
6822                || value == ridpointers[(int) RID_REGISTER]
6823                || value == ridpointers[(int) RID_INLINE]
6824                || value == ridpointers[(int) RID_VIRTUAL]
6825                || value == ridpointers[(int) RID_CONST]
6826                || value == ridpointers[(int) RID_VOLATILE]
6827                || value == ridpointers[(int) RID_EXPLICIT])
6828         ob_modifier = value;
6829     }
6830
6831   if (found_type > 1)
6832     error ("multiple types in one declaration");
6833
6834   if (t == NULL_TREE && ! saw_friend)
6835     pedwarn ("declaration does not declare anything");
6836
6837   /* Check for an anonymous union.  We're careful
6838      accessing TYPE_IDENTIFIER because some built-in types, like
6839      pointer-to-member types, do not have TYPE_NAME.  */
6840   else if (t && IS_AGGR_TYPE_CODE (TREE_CODE (t))
6841            && TYPE_NAME (t)
6842            && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
6843     {
6844       /* Anonymous unions are objects, so they can have specifiers.  */;
6845       SET_ANON_AGGR_TYPE_P (t);
6846
6847       if (TREE_CODE (t) != UNION_TYPE && pedantic && ! in_system_header)
6848         pedwarn ("ISO C++ prohibits anonymous structs");
6849     }
6850
6851   else if (ob_modifier)
6852     {
6853       if (ob_modifier == ridpointers[(int) RID_INLINE]
6854           || ob_modifier == ridpointers[(int) RID_VIRTUAL])
6855         cp_error ("`%D' can only be specified for functions", ob_modifier);
6856       else if (ob_modifier == ridpointers[(int) RID_FRIEND])
6857         cp_error ("`%D' can only be specified inside a class", ob_modifier);
6858       else if (ob_modifier == ridpointers[(int) RID_EXPLICIT])
6859         cp_error ("`%D' can only be specified for constructors",
6860                   ob_modifier);
6861       else
6862         cp_error ("`%D' can only be specified for objects and functions",
6863                   ob_modifier);
6864     }
6865
6866   return t;
6867 }
6868
6869 /* Called when a declaration is seen that contains no names to declare.
6870    If its type is a reference to a structure, union or enum inherited
6871    from a containing scope, shadow that tag name for the current scope
6872    with a forward reference.
6873    If its type defines a new named structure or union
6874    or defines an enum, it is valid but we need not do anything here.
6875    Otherwise, it is an error.
6876
6877    C++: may have to grok the declspecs to learn about static,
6878    complain for anonymous unions.  */
6879
6880 void
6881 shadow_tag (declspecs)
6882      tree declspecs;
6883 {
6884   tree t = check_tag_decl (declspecs);
6885
6886   if (t)
6887     maybe_process_partial_specialization (t);
6888
6889   /* This is where the variables in an anonymous union are
6890      declared.  An anonymous union declaration looks like:
6891      union { ... } ;
6892      because there is no declarator after the union, the parser
6893      sends that declaration here.  */
6894   if (t && ANON_AGGR_TYPE_P (t))
6895     {
6896       fixup_anonymous_aggr (t);
6897
6898       if (TYPE_FIELDS (t))
6899         {
6900           tree decl = grokdeclarator (NULL_TREE, declspecs, NORMAL, 0,
6901                                       NULL_TREE);
6902           finish_anon_union (decl);
6903         }
6904     }
6905 }
6906 \f
6907 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
6908
6909 tree
6910 groktypename (typename)
6911      tree typename;
6912 {
6913   if (TREE_CODE (typename) != TREE_LIST)
6914     return typename;
6915   return grokdeclarator (TREE_VALUE (typename),
6916                          TREE_PURPOSE (typename),
6917                          TYPENAME, 0, NULL_TREE);
6918 }
6919
6920 /* Decode a declarator in an ordinary declaration or data definition.
6921    This is called as soon as the type information and variable name
6922    have been parsed, before parsing the initializer if any.
6923    Here we create the ..._DECL node, fill in its type,
6924    and put it on the list of decls for the current context.
6925    The ..._DECL node is returned as the value.
6926
6927    Exception: for arrays where the length is not specified,
6928    the type is left null, to be filled in by `cp_finish_decl'.
6929
6930    Function definitions do not come here; they go to start_function
6931    instead.  However, external and forward declarations of functions
6932    do go through here.  Structure field declarations are done by
6933    grokfield and not through here.  */
6934
6935 tree
6936 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
6937      tree declarator, declspecs;
6938      int initialized;
6939      tree attributes, prefix_attributes;
6940 {
6941   register tree decl;
6942   register tree type, tem;
6943   tree context;
6944   extern int have_extern_spec;
6945   extern int used_extern_spec;
6946   tree attrlist;
6947
6948 #if 0
6949   /* See code below that used this.  */
6950   int init_written = initialized;
6951 #endif
6952
6953   /* This should only be done once on the top most decl.  */
6954   if (have_extern_spec && !used_extern_spec)
6955     {
6956       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"),
6957                                   declspecs);
6958       used_extern_spec = 1;
6959     }
6960
6961   if (attributes || prefix_attributes)
6962     attrlist = build_tree_list (attributes, prefix_attributes);
6963   else
6964     attrlist = NULL_TREE;
6965
6966   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
6967                          attrlist);
6968
6969   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE)
6970     return NULL_TREE;
6971
6972   type = TREE_TYPE (decl);
6973
6974   if (type == error_mark_node)
6975     return NULL_TREE;
6976
6977   context = DECL_CONTEXT (decl);
6978
6979   if (initialized && context && TREE_CODE (context) == NAMESPACE_DECL
6980       && context != current_namespace && TREE_CODE (decl) == VAR_DECL)
6981     {
6982       /* When parsing the initializer, lookup should use the object's
6983          namespace. */
6984       push_decl_namespace (context);
6985     }
6986
6987   /* We are only interested in class contexts, later. */
6988   if (context && TREE_CODE (context) == NAMESPACE_DECL)
6989     context = NULL_TREE;
6990
6991   if (initialized)
6992     /* Is it valid for this decl to have an initializer at all?
6993        If not, set INITIALIZED to zero, which will indirectly
6994        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
6995     switch (TREE_CODE (decl))
6996       {
6997       case TYPE_DECL:
6998         /* typedef foo = bar  means give foo the same type as bar.
6999            We haven't parsed bar yet, so `cp_finish_decl' will fix that up.
7000            Any other case of an initialization in a TYPE_DECL is an error.  */
7001         if (pedantic || list_length (declspecs) > 1)
7002           {
7003             cp_error ("typedef `%D' is initialized", decl);
7004             initialized = 0;
7005           }
7006         break;
7007
7008       case FUNCTION_DECL:
7009         cp_error ("function `%#D' is initialized like a variable", decl);
7010         initialized = 0;
7011         break;
7012
7013       default:
7014         break;
7015       }
7016
7017   if (initialized)
7018     {
7019       if (! toplevel_bindings_p ()
7020           && DECL_EXTERNAL (decl))
7021         cp_warning ("declaration of `%#D' has `extern' and is initialized",
7022                     decl);
7023       DECL_EXTERNAL (decl) = 0;
7024       if (toplevel_bindings_p ())
7025         TREE_STATIC (decl) = 1;
7026
7027       /* Tell `pushdecl' this is an initialized decl
7028          even though we don't yet have the initializer expression.
7029          Also tell `cp_finish_decl' it may store the real initializer.  */
7030       DECL_INITIAL (decl) = error_mark_node;
7031     }
7032
7033 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
7034   SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
7035 #endif
7036
7037   /* Set attributes here so if duplicate decl, will have proper attributes.  */
7038   cplus_decl_attributes (decl, attributes, prefix_attributes);
7039
7040   if (context && COMPLETE_TYPE_P (complete_type (context)))
7041     {
7042       push_nested_class (context, 2);
7043
7044       if (TREE_CODE (decl) == VAR_DECL)
7045         {
7046           tree field = lookup_field (context, DECL_NAME (decl), 0, 0);
7047           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
7048             cp_error ("`%#D' is not a static member of `%#T'", decl, context);
7049           else
7050             {
7051               if (DECL_CONTEXT (field) != context)
7052                 {
7053                   cp_pedwarn ("ISO C++ does not permit `%T::%D' to be defined as `%T::%D'",
7054                               DECL_CONTEXT (field), DECL_NAME (decl),
7055                               context, DECL_NAME (decl));
7056                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
7057                 }
7058               /* Static data member are tricky; an in-class initialization
7059                  still doesn't provide a definition, so the in-class
7060                  declaration will have DECL_EXTERNAL set, but will have an
7061                  initialization.  Thus, duplicate_decls won't warn
7062                  about this situation, and so we check here.  */
7063               if (DECL_INITIAL (decl) && DECL_INITIAL (field))
7064                 cp_error ("duplicate initialization of %D", decl);
7065               if (duplicate_decls (decl, field))
7066                 decl = field;
7067             }
7068         }
7069       else
7070         {
7071           tree field = check_classfn (context, decl);
7072           if (field && duplicate_decls (decl, field))
7073             decl = field;
7074         }
7075
7076       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
7077       DECL_IN_AGGR_P (decl) = 0;
7078       if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
7079           || CLASSTYPE_USE_TEMPLATE (context))
7080         {
7081           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
7082           /* [temp.expl.spec] An explicit specialization of a static data
7083              member of a template is a definition if the declaration
7084              includes an initializer; otherwise, it is a declaration.
7085
7086              We check for processing_specialization so this only applies
7087              to the new specialization syntax.  */
7088           if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
7089             DECL_EXTERNAL (decl) = 1;
7090         }
7091
7092       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
7093         cp_pedwarn ("declaration of `%#D' outside of class is not definition",
7094                     decl);
7095     }
7096
7097   /* Enter this declaration into the symbol table.  */
7098   tem = maybe_push_decl (decl);
7099
7100   if (processing_template_decl)
7101     tem = push_template_decl (tem);
7102
7103 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7104   /* Tell the back-end to use or not use .common as appropriate.  If we say
7105      -fconserve-space, we want this to save .data space, at the expense of
7106      wrong semantics.  If we say -fno-conserve-space, we want this to
7107      produce errors about redefs; to do this we force variables into the
7108      data segment.  */
7109   DECL_COMMON (tem) = flag_conserve_space || ! TREE_PUBLIC (tem);
7110 #endif
7111
7112   if (! processing_template_decl)
7113     start_decl_1 (tem);
7114
7115   return tem;
7116 }
7117
7118 void
7119 start_decl_1 (decl)
7120      tree decl;
7121 {
7122   tree type = TREE_TYPE (decl);
7123   int initialized = (DECL_INITIAL (decl) != NULL_TREE);
7124
7125   if (type == error_mark_node)
7126     return;
7127
7128   /* If this type of object needs a cleanup, but we're not allowed to
7129      add any more objects with cleanups to the current scope, create a
7130      new binding level.  */
7131   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7132       && current_binding_level->more_cleanups_ok == 0)
7133     {
7134       keep_next_level (2);
7135       pushlevel (1);
7136       clear_last_expr ();
7137       add_scope_stmt (/*begin_p=*/1, /*partial_p=*/1);
7138     }
7139
7140   if (initialized)
7141     /* Is it valid for this decl to have an initializer at all?
7142        If not, set INITIALIZED to zero, which will indirectly
7143        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
7144     {
7145       /* Don't allow initializations for incomplete types except for
7146          arrays which might be completed by the initialization.  */
7147       if (COMPLETE_TYPE_P (complete_type (type)))
7148         ;                       /* A complete type is ok.  */
7149       else if (TREE_CODE (type) != ARRAY_TYPE)
7150         {
7151           cp_error ("variable `%#D' has initializer but incomplete type",
7152                     decl);
7153           initialized = 0;
7154           type = TREE_TYPE (decl) = error_mark_node;
7155         }
7156       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
7157         {
7158           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
7159             cp_error ("elements of array `%#D' have incomplete type", decl);
7160           /* else we already gave an error in start_decl.  */
7161           initialized = 0;
7162         }
7163     }
7164
7165   if (!initialized
7166       && TREE_CODE (decl) != TYPE_DECL
7167       && TREE_CODE (decl) != TEMPLATE_DECL
7168       && type != error_mark_node
7169       && IS_AGGR_TYPE (type) 
7170       && ! DECL_EXTERNAL (decl))
7171     {
7172       if ((! processing_template_decl || ! uses_template_parms (type))
7173           && !COMPLETE_TYPE_P (complete_type (type)))
7174         {
7175           cp_error ("aggregate `%#D' has incomplete type and cannot be initialized",
7176                  decl);
7177           /* Change the type so that assemble_variable will give
7178              DECL an rtl we can live with: (mem (const_int 0)).  */
7179           type = TREE_TYPE (decl) = error_mark_node;
7180         }
7181       else
7182         {
7183           /* If any base type in the hierarchy of TYPE needs a constructor,
7184              then we set initialized to 1.  This way any nodes which are
7185              created for the purposes of initializing this aggregate
7186              will live as long as it does.  This is necessary for global
7187              aggregates which do not have their initializers processed until
7188              the end of the file.  */
7189           initialized = TYPE_NEEDS_CONSTRUCTING (type);
7190         }
7191     }
7192
7193   if (! initialized)
7194     DECL_INITIAL (decl) = NULL_TREE;
7195 }
7196
7197 /* Handle initialization of references.
7198    These three arguments are from `cp_finish_decl', and have the
7199    same meaning here that they do there.
7200
7201    Quotes on semantics can be found in ARM 8.4.3.  */
7202
7203 static void
7204 grok_reference_init (decl, type, init)
7205      tree decl, type, init;
7206 {
7207   tree tmp;
7208
7209   if (init == NULL_TREE)
7210     {
7211       if ((DECL_LANG_SPECIFIC (decl) == 0
7212            || DECL_IN_AGGR_P (decl) == 0)
7213           && ! DECL_THIS_EXTERN (decl))
7214         cp_error ("`%D' declared as reference but not initialized", decl);
7215       return;
7216     }
7217
7218   if (init == error_mark_node)
7219     return;
7220
7221   if (TREE_CODE (init) == CONSTRUCTOR)
7222     {
7223       cp_error ("ISO C++ forbids use of initializer list to initialize reference `%D'", decl);
7224       return;
7225     }
7226
7227   if (TREE_CODE (init) == TREE_LIST)
7228     init = build_compound_expr (init);
7229
7230   if (TREE_CODE (TREE_TYPE (init)) == REFERENCE_TYPE)
7231     init = convert_from_reference (init);
7232
7233   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
7234       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
7235     {
7236       /* Note: default conversion is only called in very special cases.  */
7237       init = default_conversion (init);
7238     }
7239
7240   /* Convert INIT to the reference type TYPE.  This may involve the
7241      creation of a temporary, whose lifetime must be the same as that
7242      of the reference.  If so, a DECL_STMT for the temporary will be
7243      added just after the DECL_STMT for DECL.  That's why we don't set
7244      DECL_INITIAL for local references (instead assigning to them
7245      explicitly); we need to allow the temporary to be initialized
7246      first.  */
7247   tmp = convert_to_reference
7248     (type, init, CONV_IMPLICIT,
7249      LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND, decl);
7250
7251   if (tmp == error_mark_node)
7252     return;
7253   else if (tmp != NULL_TREE)
7254     {
7255       init = tmp;
7256       tmp = save_expr (tmp);
7257       if (building_stmt_tree ())
7258         {
7259           /* Initialize the declaration.  */
7260           tmp = build (INIT_EXPR, TREE_TYPE (decl), decl, tmp);
7261           finish_expr_stmt (tmp);
7262         }
7263       else
7264         DECL_INITIAL (decl) = tmp;
7265     }
7266   else
7267     {
7268       cp_error ("cannot initialize `%T' from `%T'", type, TREE_TYPE (init));
7269       return;
7270     }
7271
7272   if (TREE_STATIC (decl) && ! TREE_CONSTANT (DECL_INITIAL (decl)))
7273     {
7274       expand_static_init (decl, DECL_INITIAL (decl));
7275       DECL_INITIAL (decl) = NULL_TREE;
7276     }
7277   return;
7278 }
7279
7280 /* Fill in DECL_INITIAL with some magical value to prevent expand_decl from
7281    mucking with forces it does not comprehend (i.e. initialization with a
7282    constructor).  If we are at global scope and won't go into COMMON, fill
7283    it in with a dummy CONSTRUCTOR to force the variable into .data;
7284    otherwise we can use error_mark_node.  */
7285
7286 static tree
7287 obscure_complex_init (decl, init)
7288      tree decl, init;
7289 {
7290   if (! flag_no_inline && TREE_STATIC (decl))
7291     {
7292       if (extract_init (decl, init))
7293         return NULL_TREE;
7294     }
7295
7296 #if ! defined (ASM_OUTPUT_BSS) && ! defined (ASM_OUTPUT_ALIGNED_BSS)
7297   if (toplevel_bindings_p () && ! DECL_COMMON (decl))
7298     DECL_INITIAL (decl) = build (CONSTRUCTOR, TREE_TYPE (decl), NULL_TREE,
7299                                  NULL_TREE);
7300   else
7301 #endif
7302     DECL_INITIAL (decl) = error_mark_node;
7303
7304   return init;
7305 }
7306
7307 /* When parsing `int a[] = {1, 2};' we don't know the size of the
7308    array until we finish parsing the initializer.  If that's the
7309    situation we're in, update DECL accordingly.  */
7310
7311 static void
7312 maybe_deduce_size_from_array_init (decl, init)
7313      tree decl;
7314      tree init;
7315 {
7316   tree type = TREE_TYPE (decl);
7317
7318   if (TREE_CODE (type) == ARRAY_TYPE
7319       && TYPE_DOMAIN (type) == NULL_TREE
7320       && TREE_CODE (decl) != TYPE_DECL)
7321     {
7322       int do_default
7323         = (TREE_STATIC (decl)
7324            /* Even if pedantic, an external linkage array
7325               may have incomplete type at first.  */
7326            ? pedantic && ! DECL_EXTERNAL (decl)
7327            : !DECL_EXTERNAL (decl));
7328       tree initializer = init ? init : DECL_INITIAL (decl);
7329       int failure = complete_array_type (type, initializer, do_default);
7330
7331       if (failure == 1)
7332         cp_error ("initializer fails to determine size of `%D'", decl);
7333
7334       if (failure == 2)
7335         {
7336           if (do_default)
7337             cp_error ("array size missing in `%D'", decl);
7338           /* If a `static' var's size isn't known, make it extern as
7339              well as static, so it does not get allocated.  If it's not
7340              `static', then don't mark it extern; finish_incomplete_decl
7341              will give it a default size and it will get allocated.  */
7342           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
7343             DECL_EXTERNAL (decl) = 1;
7344         }
7345
7346       if (pedantic && TYPE_DOMAIN (type) != NULL_TREE
7347           && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
7348                               integer_zero_node))
7349         cp_error ("zero-size array `%D'", decl);
7350
7351       layout_decl (decl, 0);
7352     }
7353 }
7354
7355 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
7356    any appropriate error messages regarding the layout.  */
7357
7358 static void
7359 layout_var_decl (decl)
7360      tree decl;
7361 {
7362   tree type = TREE_TYPE (decl);
7363 #if 0
7364   tree ttype = target_type (type);
7365 #endif
7366
7367   /* If we haven't already layed out this declaration, do so now.
7368      Note that we must not call complete type for an external object
7369      because it's type might involve templates that we are not
7370      supposed to isntantiate yet.  (And it's perfectly legal to say
7371      `extern X x' for some incomplete type `X'.)  */
7372   if (!DECL_EXTERNAL (decl))
7373     complete_type (type);
7374   if (!DECL_SIZE (decl) && COMPLETE_TYPE_P (type))
7375     layout_decl (decl, 0);
7376
7377   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
7378     {
7379       /* An automatic variable with an incomplete type: that is an error.
7380          Don't talk about array types here, since we took care of that
7381          message in grokdeclarator.  */
7382       cp_error ("storage size of `%D' isn't known", decl);
7383       TREE_TYPE (decl) = error_mark_node;
7384     }
7385 #if 0
7386   /* Keep this code around in case we later want to control debug info
7387      based on whether a type is "used".  (jason 1999-11-11) */
7388
7389   else if (!DECL_EXTERNAL (decl) && IS_AGGR_TYPE (ttype))
7390     /* Let debugger know it should output info for this type.  */
7391     note_debug_info_needed (ttype);
7392
7393   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
7394     note_debug_info_needed (DECL_CONTEXT (decl));
7395 #endif
7396
7397   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
7398       && DECL_SIZE (decl) != NULL_TREE
7399       && ! TREE_CONSTANT (DECL_SIZE (decl)))
7400     {
7401       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
7402         constant_expression_warning (DECL_SIZE (decl));
7403       else
7404         cp_error ("storage size of `%D' isn't constant", decl);
7405     }
7406 }
7407
7408 /* If a local static variable is declared in an inline function, or if
7409    we have a weak definition, we must endeavor to create only one
7410    instance of the variable at link-time.  */
7411
7412 static void
7413 maybe_commonize_var (decl)
7414      tree decl;
7415 {
7416   /* Static data in a function with comdat linkage also has comdat
7417      linkage.  */
7418   if (TREE_STATIC (decl)
7419       /* Don't mess with __FUNCTION__.  */
7420       && ! DECL_ARTIFICIAL (decl)
7421       && current_function_decl
7422       && DECL_CONTEXT (decl) == current_function_decl
7423       && (DECL_THIS_INLINE (current_function_decl)
7424           || DECL_TEMPLATE_INSTANTIATION (current_function_decl))
7425       && TREE_PUBLIC (current_function_decl))
7426     {
7427       /* Rather than try to get this right with inlining, we suppress
7428          inlining of such functions.  */
7429       current_function_cannot_inline
7430         = "function with static variable cannot be inline";
7431
7432       /* If flag_weak, we don't need to mess with this, as we can just
7433          make the function weak, and let it refer to its unique local
7434          copy.  This works because we don't allow the function to be
7435          inlined.  */
7436       if (! flag_weak)
7437         {
7438           if (DECL_INTERFACE_KNOWN (current_function_decl))
7439             {
7440               TREE_PUBLIC (decl) = 1;
7441               DECL_EXTERNAL (decl) = DECL_EXTERNAL (current_function_decl);
7442             }
7443           else if (DECL_INITIAL (decl) == NULL_TREE
7444                    || DECL_INITIAL (decl) == error_mark_node)
7445             {
7446               TREE_PUBLIC (decl) = 1;
7447               DECL_COMMON (decl) = 1;
7448             }
7449           /* else we lose. We can only do this if we can use common,
7450              which we can't if it has been initialized.  */
7451
7452           if (TREE_PUBLIC (decl))
7453             DECL_ASSEMBLER_NAME (decl)
7454               = build_static_name (current_function_decl, DECL_NAME (decl));
7455           else
7456             {
7457               cp_warning_at ("sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)", decl);
7458               cp_warning_at ("  you can work around this by removing the initializer", decl);
7459             }
7460         }
7461     }
7462   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
7463     /* Set it up again; we might have set DECL_INITIAL since the last
7464        time.  */
7465     comdat_linkage (decl);
7466 }
7467
7468 /* Issue an error message if DECL is an uninitialized const variable.  */
7469
7470 static void
7471 check_for_uninitialized_const_var (decl)
7472      tree decl;
7473 {
7474   tree type = TREE_TYPE (decl);
7475
7476   /* ``Unless explicitly declared extern, a const object does not have
7477      external linkage and must be initialized. ($8.4; $12.1)'' ARM
7478      7.1.6 */
7479   if (TREE_CODE (decl) == VAR_DECL
7480       && TREE_CODE (type) != REFERENCE_TYPE
7481       && CP_TYPE_CONST_P (type)
7482       && !TYPE_NEEDS_CONSTRUCTING (type)
7483       && !DECL_INITIAL (decl))
7484     cp_error ("uninitialized const `%D'", decl);
7485 }
7486
7487 /* Verify INIT (the initializer for DECL), and record the
7488    initialization in DECL_INITIAL, if appropriate.  Returns a new
7489    value for INIT.  */
7490
7491 static tree
7492 check_initializer (decl, init)
7493      tree decl;
7494      tree init;
7495 {
7496   tree type;
7497
7498   if (TREE_CODE (decl) == FIELD_DECL)
7499     return init;
7500
7501   type = TREE_TYPE (decl);
7502
7503   /* If `start_decl' didn't like having an initialization, ignore it now.  */
7504   if (init != NULL_TREE && DECL_INITIAL (decl) == NULL_TREE)
7505     init = NULL_TREE;
7506
7507   /* Check the initializer.  */
7508   if (init)
7509     {
7510       /* Things that are going to be initialized need to have complete
7511          type.  */
7512       TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7513
7514       if (type == error_mark_node)
7515         /* We will have already complained.  */
7516         init = NULL_TREE;
7517       else if (COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7518         {
7519           cp_error ("variable-sized object `%D' may not be initialized", decl);
7520           init = NULL_TREE;
7521         }
7522       else if (TREE_CODE (type) == ARRAY_TYPE
7523                && !COMPLETE_TYPE_P (TREE_TYPE (type)))
7524         {
7525           cp_error ("elements of array `%#D' have incomplete type", decl);
7526           init = NULL_TREE;
7527         }
7528       else if (!COMPLETE_TYPE_P (type))
7529         {
7530           cp_error ("`%D' has incomplete type", decl);
7531           TREE_TYPE (decl) = error_mark_node;
7532           init = NULL_TREE;
7533         }
7534     }
7535
7536   if (TREE_CODE (decl) == CONST_DECL)
7537     {
7538       my_friendly_assert (TREE_CODE (decl) != REFERENCE_TYPE, 148);
7539
7540       DECL_INITIAL (decl) = init;
7541
7542       /* This will keep us from needing to worry about our obstacks.  */
7543       my_friendly_assert (init != NULL_TREE, 149);
7544       init = NULL_TREE;
7545     }
7546   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
7547     {
7548       if (TREE_STATIC (decl))
7549         make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
7550       grok_reference_init (decl, type, init);
7551       init = NULL_TREE;
7552     }
7553   else if (init)
7554     {
7555       if (TYPE_HAS_CONSTRUCTOR (type) || TYPE_NEEDS_CONSTRUCTING (type))
7556         {
7557           if (TREE_CODE (type) == ARRAY_TYPE)
7558             init = digest_init (type, init, (tree *) 0);
7559           else if (TREE_CODE (init) == CONSTRUCTOR
7560                    && TREE_HAS_CONSTRUCTOR (init))
7561             {
7562               if (TYPE_NON_AGGREGATE_CLASS (type))
7563                 {
7564                   cp_error ("`%D' must be initialized by constructor, not by `{...}'",
7565                             decl);
7566                   init = error_mark_node;
7567                 }
7568               else
7569                 goto dont_use_constructor;
7570             }
7571         }
7572       else
7573         {
7574         dont_use_constructor:
7575           if (TREE_CODE (init) != TREE_VEC)
7576             init = store_init_value (decl, init);
7577         }
7578
7579       if (init)
7580         /* We must hide the initializer so that expand_decl
7581            won't try to do something it does not understand.  */
7582         init = obscure_complex_init (decl, init);
7583     }
7584   else if (DECL_EXTERNAL (decl))
7585     ;
7586   else if (TYPE_P (type)
7587            && (IS_AGGR_TYPE (type) || TYPE_NEEDS_CONSTRUCTING (type)))
7588     {
7589       tree core_type = strip_array_types (type);
7590
7591       if (! TYPE_NEEDS_CONSTRUCTING (core_type))
7592         {
7593           if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
7594             cp_error ("structure `%D' with uninitialized const members", decl);
7595           if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
7596             cp_error ("structure `%D' with uninitialized reference members",
7597                       decl);
7598         }
7599
7600       check_for_uninitialized_const_var (decl);
7601
7602       if (COMPLETE_TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
7603         init = obscure_complex_init (decl, NULL_TREE);
7604
7605     }
7606   else
7607     check_for_uninitialized_const_var (decl);
7608
7609   return init;
7610 }
7611
7612 /* If DECL is not a local variable, give it RTL.  */
7613
7614 static void
7615 make_rtl_for_nonlocal_decl (decl, init, asmspec)
7616      tree decl;
7617      tree init;
7618      const char *asmspec;
7619 {
7620   int toplev;
7621   tree type;
7622
7623   type = TREE_TYPE (decl);
7624   toplev = toplevel_bindings_p ();
7625
7626   /* Handle non-variables up front.  */
7627   if (TREE_CODE (decl) != VAR_DECL)
7628     {
7629       rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7630       return;
7631     }
7632
7633   /* Set the DECL_ASSEMBLER_NAME for the variable.  */
7634   if (asmspec)
7635     DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
7636
7637   if (DECL_VIRTUAL_P (decl))
7638     make_decl_rtl (decl, NULL_PTR, toplev);
7639   else if (TREE_READONLY (decl)
7640            && DECL_INITIAL (decl) != NULL_TREE
7641            && DECL_INITIAL (decl) != error_mark_node
7642            && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
7643     {
7644       DECL_INITIAL (decl) = save_expr (DECL_INITIAL (decl));
7645
7646       if (toplev && ! TREE_PUBLIC (decl))
7647         {
7648           /* If this is a static const, change its apparent linkage
7649              if it belongs to a #pragma interface.  */
7650           if (!interface_unknown)
7651             {
7652               TREE_PUBLIC (decl) = 1;
7653               DECL_EXTERNAL (decl) = interface_only;
7654             }
7655           make_decl_rtl (decl, asmspec, toplev);
7656         }
7657       else if (toplev)
7658         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7659     }
7660   else if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7661     {
7662       my_friendly_assert (TREE_STATIC (decl), 19990828);
7663
7664       if (init == NULL_TREE
7665 #ifdef DEFAULT_STATIC_DEFS
7666           /* If this code is dead, then users must
7667              explicitly declare static member variables
7668              outside the class def'n as well.  */
7669           && TYPE_NEEDS_CONSTRUCTING (type)
7670 #endif
7671           )
7672         {
7673           DECL_EXTERNAL (decl) = 1;
7674           make_decl_rtl (decl, asmspec, 1);
7675         }
7676       else
7677         rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7678     }
7679   else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL
7680            || (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)))
7681     rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
7682 }
7683
7684 /* Create RTL for the local static variable DECL.  */
7685
7686 void
7687 make_rtl_for_local_static (decl)
7688      tree decl;
7689 {
7690   const char *asmspec = NULL;
7691
7692   /* If we inlined this variable, we could see it's declaration
7693      again.  */
7694   if (DECL_RTL (decl))
7695     return;
7696
7697   if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7698     {
7699       /* The only way this situaton can occur is if the
7700          user specified a name for this DECL using the
7701          `attribute' syntax.  */
7702       asmspec = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
7703       DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
7704     }
7705
7706   rest_of_decl_compilation (decl, asmspec, /*top_level=*/0, /*at_end=*/0);
7707 }
7708
7709 /* The old ARM scoping rules injected variables declared in the
7710    initialization statement of a for-statement into the surrounding
7711    scope.  We support this usage, in order to be backward-compatible.
7712    DECL is a just-declared VAR_DECL; if necessary inject its
7713    declaration into the surrounding scope.  */
7714
7715 void
7716 maybe_inject_for_scope_var (decl)
7717      tree decl;
7718 {
7719   if (current_binding_level->is_for_scope)
7720     {
7721       struct binding_level *outer
7722         = current_binding_level->level_chain;
7723
7724       /* Check to see if the same name is already bound at the outer
7725          level, either because it was directly declared, or because a
7726          dead for-decl got preserved.  In either case, the code would
7727          not have been valid under the ARM scope rules, so clear
7728          is_for_scope for the current_binding_level.
7729
7730          Otherwise, we need to preserve the temp slot for decl to last
7731          into the outer binding level.  */
7732
7733       tree outer_binding
7734         = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
7735
7736       if (outer_binding && BINDING_LEVEL (outer_binding) == outer
7737           && (TREE_CODE (BINDING_VALUE (outer_binding))
7738               == VAR_DECL)
7739           && DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
7740         {
7741           BINDING_VALUE (outer_binding)
7742             = DECL_SHADOWED_FOR_VAR (BINDING_VALUE (outer_binding));
7743           current_binding_level->is_for_scope = 0;
7744         }
7745       else if (DECL_IN_MEMORY_P (decl))
7746         preserve_temp_slots (DECL_RTL (decl));
7747     }
7748 }
7749
7750 /* Generate code to initialize DECL (a local variable).  */
7751
7752 void
7753 initialize_local_var (decl, init, flags)
7754      tree decl;
7755      tree init;
7756      int flags;
7757 {
7758   tree type = TREE_TYPE (decl);
7759
7760   /* If the type is bogus, don't bother initializing the variable.  */
7761   if (type == error_mark_node)
7762     return;
7763
7764   if (DECL_SIZE (decl) == NULL_TREE && !TREE_STATIC (decl))
7765     {
7766       /* If we used it already as memory, it must stay in memory.  */
7767       DECL_INITIAL (decl) = NULL_TREE;
7768       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7769     }
7770
7771   /* Local statics are handled differently from ordinary automatic
7772      variables.  */
7773   if (TREE_STATIC (decl))
7774     {
7775       if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
7776           || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7777         expand_static_init (decl, init);
7778       return;
7779     }
7780
7781   if (DECL_SIZE (decl) && type != error_mark_node)
7782     {
7783       int already_used;
7784
7785       /* Compute and store the initial value.  */
7786       already_used = TREE_USED (decl) || TREE_USED (type);
7787
7788       if (init || TYPE_NEEDS_CONSTRUCTING (type))
7789         {
7790           int saved_stmts_are_full_exprs_p;
7791
7792           emit_line_note (DECL_SOURCE_FILE (decl),
7793                           DECL_SOURCE_LINE (decl));
7794           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p;
7795           stmts_are_full_exprs_p = 1;
7796           finish_expr_stmt (build_aggr_init (decl, init, flags));
7797           stmts_are_full_exprs_p = saved_stmts_are_full_exprs_p;
7798         }
7799
7800       /* Set this to 0 so we can tell whether an aggregate which was
7801          initialized was ever used.  Don't do this if it has a
7802          destructor, so we don't complain about the 'resource
7803          allocation is initialization' idiom.  Now set
7804          attribute((unused)) on types so decls of that type will be
7805          marked used. (see TREE_USED, above.)  */
7806       if (TYPE_NEEDS_CONSTRUCTING (type)
7807           && ! already_used
7808           && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7809           && DECL_NAME (decl))
7810         TREE_USED (decl) = 0;
7811       else if (already_used)
7812         TREE_USED (decl) = 1;
7813     }
7814 }
7815
7816 /* Generate code to destroy DECL (a local variable).  */
7817
7818 static void
7819 destroy_local_var (decl)
7820      tree decl;
7821 {
7822   tree type = TREE_TYPE (decl);
7823   tree cleanup;
7824
7825   /* Only variables get cleaned up.  */
7826   if (TREE_CODE (decl) != VAR_DECL)
7827     return;
7828
7829   /* And only things with destructors need cleaning up.  */
7830   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7831     return;
7832
7833   if (TREE_CODE (decl) == VAR_DECL &&
7834       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)))
7835     /* We don't clean up things that aren't defined in this
7836        translation unit, or that need a static cleanup.  The latter
7837        are handled by finish_file.  */
7838     return;
7839
7840   /* Compute the cleanup.  */
7841   cleanup = maybe_build_cleanup (decl);
7842
7843   /* Record the cleanup required for this declaration.  */
7844   if (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node
7845       && cleanup)
7846     finish_decl_cleanup (decl, cleanup);
7847 }
7848
7849 /* Let the back-end know about DECL.  */
7850
7851 void
7852 emit_local_var (decl)
7853      tree decl;
7854 {
7855   /* Create RTL for this variable.  */
7856   if (DECL_RTL (decl))
7857     /* Only a RESULT_DECL should have non-NULL RTL when arriving here.
7858        All other local variables are assigned RTL in this function.  */
7859     my_friendly_assert (TREE_CODE (decl) == RESULT_DECL,
7860                         19990828);
7861   else
7862     {
7863       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7864         /* The user must have specified an assembler name for this
7865            variable.  Set that up now.  */
7866         rest_of_decl_compilation
7867           (decl, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)),
7868            /*top_level=*/0, /*at_end=*/0);
7869       else
7870         expand_decl (decl);
7871     }
7872
7873   /* Actually do the initialization.  */
7874   expand_start_target_temps ();
7875   expand_decl_init (decl);
7876   expand_end_target_temps ();
7877 }
7878
7879 /* Finish processing of a declaration;
7880    install its line number and initial value.
7881    If the length of an array type is not known before,
7882    it must be determined now, from the initial value, or it is an error.
7883
7884    INIT0 holds the value of an initializer that should be allowed to escape
7885    the normal rules.
7886
7887    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
7888    if the (init) syntax was used.  */
7889
7890 void
7891 cp_finish_decl (decl, init, asmspec_tree, flags)
7892      tree decl, init;
7893      tree asmspec_tree;
7894      int flags;
7895 {
7896   register tree type;
7897   tree ttype = NULL_TREE;
7898   const char *asmspec = NULL;
7899   int was_readonly = 0;
7900
7901   if (! decl)
7902     {
7903       if (init)
7904         error ("assignment (not initialization) in declaration");
7905       return;
7906     }
7907
7908   /* If a name was specified, get the string.  */
7909   if (asmspec_tree)
7910       asmspec = TREE_STRING_POINTER (asmspec_tree);
7911
7912   if (init && TREE_CODE (init) == NAMESPACE_DECL)
7913     {
7914       cp_error ("cannot initialize `%D' to namespace `%D'",
7915                 decl, init);
7916       init = NULL_TREE;
7917     }
7918
7919   if (current_class_type
7920       && CP_DECL_CONTEXT (decl) == current_class_type
7921       && TYPE_BEING_DEFINED (current_class_type)
7922       && (DECL_INITIAL (decl) || init))
7923     DECL_DEFINED_IN_CLASS_P (decl) = 1;
7924
7925   if (TREE_CODE (decl) == VAR_DECL
7926       && DECL_CONTEXT (decl)
7927       && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL
7928       && DECL_CONTEXT (decl) != current_namespace
7929       && init)
7930     {
7931       /* Leave the namespace of the object. */
7932       pop_decl_namespace ();
7933     }
7934
7935   type = TREE_TYPE (decl);
7936
7937   if (type == error_mark_node)
7938     return;
7939   
7940   /* Add this declaration to the statement-tree.  */
7941   if (building_stmt_tree () && at_function_scope_p ())
7942     add_decl_stmt (decl);
7943
7944   if (TYPE_HAS_MUTABLE_P (type))
7945     TREE_READONLY (decl) = 0;
7946
7947   if (processing_template_decl)
7948     {
7949       if (init && DECL_INITIAL (decl))
7950         DECL_INITIAL (decl) = init;
7951       goto finish_end0;
7952     }
7953
7954   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
7955   my_friendly_assert (TREE_CODE (decl) != PARM_DECL, 19990828);
7956
7957   /* Take care of TYPE_DECLs up front.  */
7958   if (TREE_CODE (decl) == TYPE_DECL)
7959     {
7960       if (init && DECL_INITIAL (decl))
7961         {
7962           /* typedef foo = bar; store the type of bar as the type of foo.  */
7963           TREE_TYPE (decl) = type = TREE_TYPE (init);
7964           DECL_INITIAL (decl) = init = NULL_TREE;
7965         }
7966       if (type != error_mark_node
7967           && IS_AGGR_TYPE (type) && DECL_NAME (decl))
7968         {
7969           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7970             cp_warning ("shadowing previous type declaration of `%#D'", decl);
7971           set_identifier_type_value (DECL_NAME (decl), type);
7972           CLASSTYPE_GOT_SEMICOLON (type) = 1;
7973         }
7974       GNU_xref_decl (current_function_decl, decl);
7975
7976       /* If we have installed this as the canonical typedef for this
7977          type, and that type has not been defined yet, delay emitting
7978          the debug information for it, as we will emit it later.  */
7979       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7980           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7981         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7982
7983       rest_of_decl_compilation (decl, NULL_PTR,
7984                                 DECL_CONTEXT (decl) == NULL_TREE, at_eof);
7985       goto finish_end;
7986     }
7987
7988   if (TREE_CODE (decl) != FUNCTION_DECL)
7989     ttype = target_type (type);
7990
7991   if (! DECL_EXTERNAL (decl) && TREE_READONLY (decl)
7992       && TYPE_NEEDS_CONSTRUCTING (type))
7993     {
7994       /* Currently, GNU C++ puts constants in text space, making them
7995          impossible to initialize.  In the future, one would hope for
7996          an operating system which understood the difference between
7997          initialization and the running of a program.  */
7998       was_readonly = 1;
7999       TREE_READONLY (decl) = 0;
8000     }
8001
8002   if (TREE_CODE (decl) == FIELD_DECL && asmspec)
8003     {
8004       /* This must override the asm specifier which was placed by
8005          grokclassfn.  Lay this out fresh.  */
8006       DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
8007       DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
8008       make_decl_rtl (decl, asmspec, 0);
8009     }
8010
8011   /* Deduce size of array from initialization, if not already known.  */
8012   maybe_deduce_size_from_array_init (decl, init);
8013   init = check_initializer (decl, init);
8014
8015   GNU_xref_decl (current_function_decl, decl);
8016
8017   if (TREE_CODE (decl) == VAR_DECL)
8018     layout_var_decl (decl);
8019
8020   /* Output the assembler code and/or RTL code for variables and functions,
8021      unless the type is an undefined structure or union.
8022      If not, it will get done when the type is completed.  */
8023   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL
8024       || TREE_CODE (decl) == RESULT_DECL)
8025     {
8026       if (TREE_CODE (decl) == VAR_DECL)
8027         maybe_commonize_var (decl);
8028
8029       make_rtl_for_nonlocal_decl (decl, init, asmspec);
8030
8031       if (TREE_CODE (type) == FUNCTION_TYPE
8032           || TREE_CODE (type) == METHOD_TYPE)
8033         abstract_virtuals_error (decl,
8034                                  strip_array_types (TREE_TYPE (type)));
8035       else
8036         abstract_virtuals_error (decl, strip_array_types (type));
8037
8038       if (TREE_CODE (decl) == FUNCTION_DECL)
8039         ;
8040       else if (DECL_EXTERNAL (decl)
8041                && ! (DECL_LANG_SPECIFIC (decl)
8042                      && DECL_NOT_REALLY_EXTERN (decl)))
8043         {
8044           if (init)
8045             DECL_INITIAL (decl) = init;
8046         }
8047       else if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
8048         {
8049           /* This is a local declaration.  */
8050           if (doing_semantic_analysis_p ())
8051             maybe_inject_for_scope_var (decl);
8052           /* Initialize the local variable.  But, if we're building a
8053              statement-tree, we'll do the initialization when we
8054              expand the tree.  */
8055           if (processing_template_decl)
8056             {
8057               if (init || DECL_INITIAL (decl) == error_mark_node)
8058                 DECL_INITIAL (decl) = init;
8059             }
8060           else
8061             {
8062               /* If we're not building RTL, then we need to do so
8063                  now.  */
8064               if (!building_stmt_tree ())
8065                 emit_local_var (decl);
8066               /* Initialize the variable.  */
8067               initialize_local_var (decl, init, flags);
8068               /* Clean up the variable.  */
8069               destroy_local_var (decl);
8070             }
8071         }
8072       else if (TREE_STATIC (decl) && type != error_mark_node)
8073         {
8074           /* Cleanups for static variables are handled by `finish_file'.  */
8075           if (TYPE_NEEDS_CONSTRUCTING (type) || init != NULL_TREE
8076               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
8077             expand_static_init (decl, init);
8078         }
8079     finish_end0:
8080
8081       /* Undo call to `pushclass' that was done in `start_decl'
8082          due to initialization of qualified member variable.
8083          I.e., Foo::x = 10;  */
8084       {
8085         tree context = CP_DECL_CONTEXT (decl);
8086         if (context
8087             && TYPE_P (context)
8088             && (TREE_CODE (decl) == VAR_DECL
8089                 /* We also have a pushclass done that we need to undo here
8090                    if we're at top level and declare a method.  */
8091                 || TREE_CODE (decl) == FUNCTION_DECL)
8092             /* If size hasn't been set, we're still defining it,
8093                and therefore inside the class body; don't pop
8094                the binding level..  */
8095             && COMPLETE_TYPE_P (context)
8096             && context == current_class_type)
8097           pop_nested_class ();
8098       }
8099     }
8100
8101  finish_end:
8102
8103   if (was_readonly)
8104     TREE_READONLY (decl) = 1;
8105 }
8106
8107 /* This is here for a midend callback from c-common.c */
8108
8109 void
8110 finish_decl (decl, init, asmspec_tree)
8111      tree decl, init;
8112      tree asmspec_tree;
8113 {
8114   cp_finish_decl (decl, init, asmspec_tree, 0);
8115 }
8116
8117 /* Returns a declaration for a VAR_DECL as if:
8118
8119      extern "C" TYPE NAME;
8120
8121    had been seen.  Used to create compiler-generated global
8122    variables.  */
8123
8124 tree
8125 declare_global_var (name, type)
8126      tree name;
8127      tree type;
8128 {
8129   tree decl;
8130
8131   push_to_top_level ();
8132   decl = build_decl (VAR_DECL, name, type);
8133   TREE_PUBLIC (decl) = 1;
8134   DECL_EXTERNAL (decl) = 1;
8135   DECL_ARTIFICIAL (decl) = 1;
8136   pushdecl (decl);
8137   cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
8138   pop_from_top_level ();
8139
8140   return decl;
8141 }
8142
8143 /* Returns a pointer to the `atexit' function.  Note that if
8144    FLAG_USE_CXA_ATEXIT is non-zero, then this will actually be the new
8145    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
8146
8147 static tree
8148 get_atexit_node ()
8149 {
8150   tree atexit_fndecl;
8151   tree arg_types;
8152   tree fn_type;
8153   tree fn_ptr_type;
8154   const char *name;
8155
8156   if (atexit_node)
8157     return atexit_node;
8158
8159   if (flag_use_cxa_atexit)
8160     {
8161       /* The declaration for `__cxa_atexit' is:
8162
8163            int __cxa_atexit (void (*)(void *), void *, void *)
8164
8165          We build up the argument types and then then function type
8166          itself.  */
8167
8168       /* First, build the pointer-to-function type for the first
8169          argument.  */
8170       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8171       fn_type = build_function_type (void_type_node, arg_types);
8172       fn_ptr_type = build_pointer_type (fn_type);
8173       /* Then, build the rest of the argument types.  */
8174       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
8175       arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
8176       arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
8177       /* And the final __cxa_atexit type.  */
8178       fn_type = build_function_type (integer_type_node, arg_types);
8179       fn_ptr_type = build_pointer_type (fn_type);
8180       name = "__cxa_atexit";
8181     }
8182   else
8183     {
8184       /* The declaration for `atexit' is:
8185
8186            int atexit (void (*)());
8187
8188          We build up the argument types and then then function type
8189          itself.  */
8190       fn_type = build_function_type (void_type_node, void_list_node);
8191       fn_ptr_type = build_pointer_type (fn_type);
8192       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
8193       /* Build the final atexit type.  */
8194       fn_type = build_function_type (integer_type_node, arg_types);
8195       name = "atexit";
8196     }
8197
8198   /* Now, build the function declaration.  */
8199   push_lang_context (lang_name_c);
8200   atexit_fndecl = build_library_fn_ptr (name, fn_type);
8201   mark_used (atexit_fndecl);
8202   pop_lang_context ();
8203   atexit_node = default_conversion (atexit_fndecl);
8204
8205   return atexit_node;
8206 }
8207
8208 /* Returns the __dso_handle VAR_DECL.  */
8209
8210 static tree
8211 get_dso_handle_node ()
8212 {
8213   if (dso_handle_node)
8214     return dso_handle_node;
8215
8216   /* Declare the variable.  */
8217   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8218                                         ptr_type_node);
8219
8220   return dso_handle_node;
8221 }
8222
8223 /* Begin a new function with internal linkage whose job will be simply
8224    to destroy some particular variable.  */
8225
8226 static tree
8227 start_cleanup_fn ()
8228 {
8229   static int counter = 0;
8230   int old_interface_unknown = interface_unknown;
8231   char name[32];
8232   tree parmtypes;
8233   tree fntype;
8234   tree fndecl;
8235
8236   push_to_top_level ();
8237
8238   /* No need to mangle this.  */
8239   push_lang_context (lang_name_c);
8240
8241   interface_unknown = 1;
8242
8243   /* Build the parameter-types.  */
8244   parmtypes = void_list_node;
8245   /* Functions passed to __cxa_atexit take an additional parameter.
8246      We'll just ignore it.  After we implement the new calling
8247      convention for destructors, we can eliminate the use of
8248      additional cleanup functions entirely in the -fnew-abi case.  */
8249   if (flag_use_cxa_atexit)
8250     parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
8251   /* Build the function type itself.  */
8252   fntype = build_function_type (void_type_node, parmtypes);
8253   /* Build the name of the function.  */
8254   sprintf (name, "__tcf_%d", counter++);
8255   /* Build the function declaration.  */
8256   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8257   /* It's a function with internal linkage, generated by the
8258      compiler.  */
8259   TREE_PUBLIC (fndecl) = 0;
8260   DECL_ARTIFICIAL (fndecl) = 1;
8261   /* Build the parameter.  */
8262   if (flag_use_cxa_atexit)
8263     {
8264       tree parmdecl;
8265
8266       parmdecl = build_decl (PARM_DECL, NULL_TREE, ptr_type_node);
8267       DECL_CONTEXT (parmdecl) = fndecl;
8268       DECL_ARG_TYPE (parmdecl) = ptr_type_node;
8269       TREE_USED (parmdecl) = 1;
8270       DECL_ARGUMENTS (fndecl) = parmdecl;
8271     }
8272
8273   pushdecl (fndecl);
8274   start_function (/*specs=*/NULL_TREE, fndecl, NULL_TREE, SF_PRE_PARSED);
8275   do_pushlevel ();
8276
8277   interface_unknown = old_interface_unknown;
8278
8279   pop_lang_context ();
8280
8281   return current_function_decl;
8282 }
8283
8284 /* Finish the cleanup function begun by start_cleanup_fn.  */
8285
8286 static void
8287 end_cleanup_fn ()
8288 {
8289   do_poplevel ();
8290
8291   expand_body (finish_function (0));
8292
8293   pop_from_top_level ();
8294 }
8295
8296 /* Generate code to handle the destruction of DECL, an object with
8297    static storage duration.  */
8298
8299 void
8300 register_dtor_fn (decl)
8301      tree decl;
8302 {
8303   tree cleanup;
8304   tree compound_stmt;
8305   tree args;
8306   tree fcall;
8307
8308   int saved_flag_access_control;
8309
8310   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8311     return;
8312
8313   /* Call build_cleanup before we enter the anonymous function so that
8314      any access checks will be done relative to the current scope,
8315      rather than the scope of the anonymous function.  */
8316   build_cleanup (decl);
8317
8318   /* Now start the function.  */
8319   cleanup = start_cleanup_fn ();
8320
8321   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8322      to the original function, rather than the anonymous one.  That
8323      will make the back-end think that nested functions are in use,
8324      which causes confusion.  */
8325   saved_flag_access_control = flag_access_control;
8326   flag_access_control = 0;
8327   fcall = build_cleanup (decl);
8328   flag_access_control = saved_flag_access_control;
8329
8330   /* Create the body of the anonymous function.  */
8331   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
8332   finish_expr_stmt (fcall);
8333   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
8334   end_cleanup_fn ();
8335
8336   /* Call atexit with the cleanup function.  */
8337   mark_addressable (cleanup);
8338   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
8339   if (flag_use_cxa_atexit)
8340     {
8341       args = tree_cons (NULL_TREE, get_dso_handle_node (), NULL_TREE);
8342       args = tree_cons (NULL_TREE, null_pointer_node, args);
8343       args = tree_cons (NULL_TREE, cleanup, args);
8344     }
8345   else
8346     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
8347   finish_expr_stmt (build_function_call (get_atexit_node (), args));
8348 }
8349
8350 void
8351 expand_static_init (decl, init)
8352      tree decl;
8353      tree init;
8354 {
8355   tree oldstatic = value_member (decl, static_aggregates);
8356
8357   if (oldstatic)
8358     {
8359       if (TREE_PURPOSE (oldstatic) && init != NULL_TREE)
8360         cp_error ("multiple initializations given for `%D'", decl);
8361     }
8362   else if (! toplevel_bindings_p ())
8363     {
8364       /* Emit code to perform this initialization but once.  */
8365       tree temp;
8366       tree if_stmt;
8367       tree then_clause;
8368       tree assignment;
8369       tree temp_init;
8370
8371       /* Emit code to perform this initialization but once.  This code
8372          looks like:
8373
8374            static int temp = 0;
8375            if (!temp) {
8376              // Do initialization.
8377              temp = 1;
8378              // Register variable for destruction at end of program.
8379            }
8380
8381          Note that the `temp' variable is only set to 1 *after* the
8382          initialization is complete.  This ensures that an exception,
8383          thrown during the construction, will cause the variable to
8384          reinitialized when we pass through this code again, as per:
8385
8386            [stmt.dcl]
8387
8388            If the initialization exits by throwing an exception, the
8389            initialization is not complete, so it will be tried again
8390            the next time control enters the declaration.
8391
8392          In theory, this process should be thread-safe, too; multiple
8393          threads should not be able to initialize the variable more
8394          than once.  We don't yet attempt to ensure thread-safety.  */
8395       temp = get_temp_name (integer_type_node, 1);
8396       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
8397
8398       /* Begin the conditional initialization.  */
8399       if_stmt = begin_if_stmt ();
8400       finish_if_stmt_cond (build_binary_op (EQ_EXPR, temp,
8401                                             integer_zero_node),
8402                            if_stmt);
8403       then_clause = begin_compound_stmt (/*has_no_scope=*/0);
8404
8405       /* Do the initialization itself.  */
8406       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
8407           || (init && TREE_CODE (init) == TREE_LIST))
8408         assignment = build_aggr_init (decl, init, 0);
8409       else if (init)
8410         /* The initialization we're doing here is just a bitwise
8411            copy.  */
8412         assignment = build (INIT_EXPR, TREE_TYPE (decl), decl, init);
8413       else
8414         assignment = NULL_TREE;
8415
8416       /* Once the assignment is complete, set TEMP to 1.  Since the
8417          construction of the static object is complete at this point,
8418          we want to make sure TEMP is set to 1 even if a temporary
8419          constructed during the initialization throws an exception
8420          when it is destroyed.  So, we combine the initialization and
8421          the assignment to TEMP into a single expression, ensuring
8422          that when we call finish_expr_stmt the cleanups will not be
8423          run until after TEMP is set to 1.  */
8424       temp_init = build_modify_expr (temp, NOP_EXPR, integer_one_node);
8425       if (assignment)
8426         {
8427           assignment = tree_cons (NULL_TREE, assignment,
8428                                   build_tree_list (NULL_TREE,
8429                                                    temp_init));
8430           assignment = build_compound_expr (assignment);
8431         }
8432       else
8433         assignment = temp_init;
8434       finish_expr_stmt (assignment);
8435
8436       /* Use atexit to register a function for destroying this static
8437          variable.  */
8438       register_dtor_fn (decl);
8439
8440       finish_compound_stmt (/*has_no_scope=*/0, then_clause);
8441       finish_then_clause (if_stmt);
8442       finish_if_stmt ();
8443     }
8444   else
8445     static_aggregates = tree_cons (init, decl, static_aggregates);
8446 }
8447
8448 /* Finish the declaration of a catch-parameter.  */
8449
8450 tree
8451 start_handler_parms (declspecs, declarator)
8452      tree declspecs;
8453      tree declarator;
8454 {
8455   tree decl;
8456   if (declspecs)
8457     {
8458       decl = grokdeclarator (declarator, declspecs, CATCHPARM,
8459                              1, NULL_TREE);
8460       if (decl == NULL_TREE)
8461         error ("invalid catch parameter");
8462     }
8463   else
8464     decl = NULL_TREE;
8465
8466   return decl;
8467 }
8468
8469 \f
8470 /* Make TYPE a complete type based on INITIAL_VALUE.
8471    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8472    2 if there was no information (in which case assume 0 if DO_DEFAULT).  */
8473
8474 int
8475 complete_array_type (type, initial_value, do_default)
8476      tree type, initial_value;
8477      int do_default;
8478 {
8479   register tree maxindex = NULL_TREE;
8480   int value = 0;
8481
8482   if (initial_value)
8483     {
8484       /* Note MAXINDEX  is really the maximum index,
8485          one less than the size.  */
8486       if (TREE_CODE (initial_value) == STRING_CST)
8487         {
8488           int eltsize
8489             = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8490           maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
8491                                    / eltsize) - 1, 0);
8492         }
8493       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8494         {
8495           tree elts = CONSTRUCTOR_ELTS (initial_value);
8496
8497           maxindex = ssize_int (-1);
8498           for (; elts; elts = TREE_CHAIN (elts))
8499             {
8500               if (TREE_PURPOSE (elts))
8501                 maxindex = TREE_PURPOSE (elts);
8502               else
8503                 maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1));
8504             }
8505           maxindex = copy_node (maxindex);
8506         }
8507       else
8508         {
8509           /* Make an error message unless that happened already.  */
8510           if (initial_value != error_mark_node)
8511             value = 1;
8512           else
8513             initial_value = NULL_TREE;
8514
8515           /* Prevent further error messages.  */
8516           maxindex = build_int_2 (0, 0);
8517         }
8518     }
8519
8520   if (!maxindex)
8521     {
8522       if (do_default)
8523         maxindex = build_int_2 (0, 0);
8524       value = 2;
8525     }
8526
8527   if (maxindex)
8528     {
8529       tree itype;
8530       tree domain;
8531
8532       domain = build_index_type (maxindex);
8533       TYPE_DOMAIN (type) = domain;
8534
8535       if (! TREE_TYPE (maxindex))
8536         TREE_TYPE (maxindex) = domain;
8537       if (initial_value)
8538         itype = TREE_TYPE (initial_value);
8539       else
8540         itype = NULL;
8541       if (itype && !TYPE_DOMAIN (itype))
8542         TYPE_DOMAIN (itype) = domain;
8543       /* The type of the main variant should never be used for arrays
8544          of different sizes.  It should only ever be completed with the
8545          size of the array.  */
8546       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
8547         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
8548     }
8549
8550   /* Lay out the type now that we can get the real answer.  */
8551
8552   layout_type (type);
8553
8554   return value;
8555 }
8556 \f
8557 /* Return zero if something is declared to be a member of type
8558    CTYPE when in the context of CUR_TYPE.  STRING is the error
8559    message to print in that case.  Otherwise, quietly return 1.  */
8560
8561 static int
8562 member_function_or_else (ctype, cur_type, flags)
8563      tree ctype, cur_type;
8564      enum overload_flags flags;
8565 {
8566   if (ctype && ctype != cur_type)
8567     {
8568       if (flags == DTOR_FLAG)
8569         error ("destructor for alien class `%s' cannot be a member",
8570                TYPE_NAME_STRING (ctype));
8571       else
8572         error ("constructor for alien class `%s' cannot be a member",
8573                TYPE_NAME_STRING (ctype));
8574       return 0;
8575     }
8576   return 1;
8577 }
8578 \f
8579 /* Subroutine of `grokdeclarator'.  */
8580
8581 /* Generate errors possibly applicable for a given set of specifiers.
8582    This is for ARM $7.1.2.  */
8583
8584 static void
8585 bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises)
8586      tree object;
8587      const char *type;
8588      int virtualp, quals, friendp, raises, inlinep;
8589 {
8590   if (virtualp)
8591     cp_error ("`%D' declared as a `virtual' %s", object, type);
8592   if (inlinep)
8593     cp_error ("`%D' declared as an `inline' %s", object, type);
8594   if (quals)
8595     cp_error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
8596               object, type);
8597   if (friendp)
8598     cp_error_at ("`%D' declared as a friend", object);
8599   if (raises)
8600     cp_error_at ("`%D' declared with an exception specification", object);
8601 }
8602
8603 /* CTYPE is class type, or null if non-class.
8604    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8605    or METHOD_TYPE.
8606    DECLARATOR is the function's name.
8607    VIRTUALP is truthvalue of whether the function is virtual or not.
8608    FLAGS are to be passed through to `grokclassfn'.
8609    QUALS are qualifiers indicating whether the function is `const'
8610    or `volatile'.
8611    RAISES is a list of exceptions that this function can raise.
8612    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8613    not look, and -1 if we should not call `grokclassfn' at all.
8614
8615    Returns `NULL_TREE' if something goes wrong, after issuing
8616    applicable error messages.  */
8617
8618 static tree
8619 grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals,
8620             raises, check, friendp, publicp, inlinep, funcdef_flag,
8621             template_count, in_namespace)
8622      tree ctype, type;
8623      tree declarator;
8624      tree orig_declarator;
8625      int virtualp;
8626      enum overload_flags flags;
8627      tree quals, raises;
8628      int check, friendp, publicp, inlinep, funcdef_flag, template_count;
8629      tree in_namespace;
8630 {
8631   tree cname, decl;
8632   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8633   int has_default_arg = 0;
8634   tree t;
8635
8636   if (ctype)
8637     cname = TREE_CODE (TYPE_NAME (ctype)) == TYPE_DECL
8638       ? TYPE_IDENTIFIER (ctype) : TYPE_NAME (ctype);
8639   else
8640     cname = NULL_TREE;
8641
8642   if (raises)
8643     {
8644       type = build_exception_variant (type, raises);
8645     }
8646
8647   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8648   /* Propagate volatile out from type to decl. */
8649   if (TYPE_VOLATILE (type))
8650     TREE_THIS_VOLATILE (decl) = 1;
8651
8652   /* If this decl has namespace scope, set that up.  */
8653   if (in_namespace)
8654     set_decl_namespace (decl, in_namespace, friendp);
8655   else if (publicp && ! ctype)
8656     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8657
8658   /* `main' and builtins have implicit 'C' linkage.  */
8659   if ((MAIN_NAME_P (declarator)
8660        || (IDENTIFIER_LENGTH (declarator) > 10
8661            && IDENTIFIER_POINTER (declarator)[0] == '_'
8662            && IDENTIFIER_POINTER (declarator)[1] == '_'
8663            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
8664       && current_lang_name == lang_name_cplusplus
8665       && ctype == NULL_TREE
8666       /* NULL_TREE means global namespace.  */
8667       && DECL_CONTEXT (decl) == NULL_TREE)
8668     DECL_LANGUAGE (decl) = lang_c;
8669
8670   /* Should probably propagate const out from type to decl I bet (mrs).  */
8671   if (staticp)
8672     {
8673       DECL_STATIC_FUNCTION_P (decl) = 1;
8674       DECL_CONTEXT (decl) = ctype;
8675     }
8676
8677   if (ctype)
8678     DECL_CONTEXT (decl) = ctype;
8679
8680   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8681     {
8682       if (processing_template_decl)
8683         error ("cannot declare `::main' to be a template");
8684       if (inlinep)
8685         error ("cannot declare `::main' to be inline");
8686       else if (! publicp)
8687         error ("cannot declare `::main' to be static");
8688       inlinep = 0;
8689       publicp = 1;
8690     }
8691
8692   /* Members of anonymous types and local classes have no linkage; make
8693      them internal.  */
8694   if (ctype && (ANON_AGGRNAME_P (TYPE_IDENTIFIER (ctype))
8695                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8696     publicp = 0;
8697
8698   if (publicp)
8699     {
8700       /* [basic.link]: A name with no linkage (notably, the name of a class
8701          or enumeration declared in a local scope) shall not be used to
8702          declare an entity with linkage.
8703
8704          Only check this for public decls for now.  */
8705       t = no_linkage_check (TREE_TYPE (decl));
8706       if (t)
8707         {
8708           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8709             {
8710               if (DECL_LANGUAGE (decl) == lang_c)
8711                 /* Allow this; it's pretty common in C.  */;
8712               else
8713                 cp_pedwarn ("non-local function `%#D' uses anonymous type",
8714                             decl);
8715             }
8716           else
8717             cp_pedwarn ("non-local function `%#D' uses local type `%T'",
8718                         decl, t);
8719         }
8720     }
8721
8722   TREE_PUBLIC (decl) = publicp;
8723   if (! publicp)
8724     {
8725       DECL_INTERFACE_KNOWN (decl) = 1;
8726       DECL_NOT_REALLY_EXTERN (decl) = 1;
8727     }
8728
8729   if (inlinep)
8730     DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1;
8731
8732   DECL_EXTERNAL (decl) = 1;
8733   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
8734     {
8735       cp_error ("%smember function `%D' cannot have `%T' method qualifier",
8736                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
8737       quals = NULL_TREE;
8738     }
8739
8740   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
8741     grok_op_properties (decl, virtualp, check < 0);
8742
8743   if (ctype && decl_function_context (decl))
8744     DECL_NO_STATIC_CHAIN (decl) = 1;
8745
8746   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8747     if (TREE_PURPOSE (t)
8748         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8749       {
8750         has_default_arg = 1;
8751         break;
8752       }
8753
8754   if (friendp
8755       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8756     {
8757       if (funcdef_flag)
8758         cp_error
8759           ("defining explicit specialization `%D' in friend declaration",
8760            orig_declarator);
8761       else
8762         {
8763           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8764             {
8765               /* Something like `template <class T> friend void f<T>()'.  */
8766               cp_error ("invalid use of template-id `%D' in declaration of primary template",
8767                         orig_declarator);
8768               return NULL_TREE;
8769             }
8770
8771
8772           /* A friend declaration of the form friend void f<>().  Record
8773              the information in the TEMPLATE_ID_EXPR.  */
8774           SET_DECL_IMPLICIT_INSTANTIATION (decl);
8775           DECL_TEMPLATE_INFO (decl)
8776             = tree_cons (TREE_OPERAND (orig_declarator, 0),
8777                          TREE_OPERAND (orig_declarator, 1),
8778                          NULL_TREE);
8779
8780           if (has_default_arg)
8781             {
8782               cp_error ("default arguments are not allowed in declaration of friend template specialization `%D'",
8783                         decl);
8784               return NULL_TREE;
8785             }
8786
8787           if (inlinep)
8788             {
8789               cp_error ("`inline' is not allowed in declaration of friend template specialization `%D'",
8790                         decl);
8791               return NULL_TREE;
8792             }
8793         }
8794     }
8795
8796   if (has_default_arg)
8797     add_defarg_fn (decl);
8798
8799   /* Plain overloading: will not be grok'd by grokclassfn.  */
8800   if (! ctype && ! processing_template_decl
8801       && DECL_LANGUAGE (decl) != lang_c
8802       && (! DECL_USE_TEMPLATE (decl) || name_mangling_version < 1))
8803     set_mangled_name_for_decl (decl);
8804
8805   if (funcdef_flag)
8806     /* Make the init_value nonzero so pushdecl knows this is not
8807        tentative.  error_mark_node is replaced later with the BLOCK.  */
8808     DECL_INITIAL (decl) = error_mark_node;
8809
8810   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8811     TREE_NOTHROW (decl) = 1;
8812
8813   /* Caller will do the rest of this.  */
8814   if (check < 0)
8815     return decl;
8816
8817   if (flags == NO_SPECIAL && ctype && constructor_name (cname) == declarator)
8818     DECL_CONSTRUCTOR_P (decl) = 1;
8819
8820   /* Function gets the ugly name, field gets the nice one.  This call
8821      may change the type of the function (because of default
8822      parameters)!  */
8823   if (ctype != NULL_TREE)
8824     grokclassfn (ctype, decl, flags, quals);
8825
8826   decl = check_explicit_specialization (orig_declarator, decl,
8827                                         template_count,
8828                                         2 * (funcdef_flag != 0) +
8829                                         4 * (friendp != 0));
8830   if (decl == error_mark_node)
8831     return NULL_TREE;
8832
8833   if (ctype != NULL_TREE
8834       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
8835       && check)
8836     {
8837       tree old_decl;
8838
8839       old_decl = check_classfn (ctype, decl);
8840
8841       if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
8842         /* Because grokfndecl is always supposed to return a
8843            FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8844            here.  We depend on our callers to figure out that its
8845            really a template that's being returned.  */
8846         old_decl = DECL_TEMPLATE_RESULT (old_decl);
8847
8848       if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
8849           && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8850         {
8851           /* Remove the `this' parm added by grokclassfn.
8852              XXX Isn't this done in start_function, too?  */
8853           revert_static_member_fn (decl);
8854           last_function_parms = TREE_CHAIN (last_function_parms);
8855         }
8856       if (old_decl && DECL_ARTIFICIAL (old_decl))
8857         cp_error ("definition of implicitly-declared `%D'", old_decl);
8858
8859       if (old_decl)
8860         {
8861           /* Since we've smashed OLD_DECL to its
8862              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8863           if (TREE_CODE (decl) == TEMPLATE_DECL)
8864             decl = DECL_TEMPLATE_RESULT (decl);
8865
8866           /* Attempt to merge the declarations.  This can fail, in
8867              the case of some illegal specialization declarations.  */
8868           if (!duplicate_decls (decl, old_decl))
8869             cp_error ("no `%#D' member function declared in class `%T'",
8870                       decl, ctype);
8871           return old_decl;
8872         }
8873     }
8874
8875   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8876     return NULL_TREE;
8877
8878   if (ctype == NULL_TREE || check)
8879     return decl;
8880
8881   if (virtualp)
8882     {
8883       DECL_VIRTUAL_P (decl) = 1;
8884       if (DECL_VINDEX (decl) == NULL_TREE)
8885         DECL_VINDEX (decl) = error_mark_node;
8886       IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
8887     }
8888
8889   return decl;
8890 }
8891
8892 static tree
8893 grokvardecl (type, declarator, specbits_in, initialized, constp, in_namespace)
8894      tree type;
8895      tree declarator;
8896      RID_BIT_TYPE *specbits_in;
8897      int initialized;
8898      int constp;
8899      tree in_namespace;
8900 {
8901   tree decl;
8902   RID_BIT_TYPE specbits;
8903
8904   specbits = *specbits_in;
8905
8906   if (TREE_CODE (type) == OFFSET_TYPE)
8907     {
8908       /* If you declare a static member so that it
8909          can be initialized, the code will reach here.  */
8910       tree basetype = TYPE_OFFSET_BASETYPE (type);
8911       type = TREE_TYPE (type);
8912       decl = build_lang_decl (VAR_DECL, declarator, type);
8913       DECL_CONTEXT (decl) = basetype;
8914       DECL_ASSEMBLER_NAME (decl) = build_static_name (basetype, declarator);
8915     }
8916   else
8917     {
8918       tree context;
8919
8920       if (in_namespace)
8921         context = in_namespace;
8922       else if (namespace_bindings_p () || RIDBIT_SETP (RID_EXTERN, specbits))
8923         context = current_namespace;
8924       else
8925         context = NULL_TREE;
8926
8927       if (processing_template_decl && context)
8928         /* For global variables, declared in a template, we need the
8929            full lang_decl.  */
8930         decl = build_lang_decl (VAR_DECL, declarator, type);
8931       else
8932         decl = build_decl (VAR_DECL, declarator, type);
8933
8934       if (context)
8935         set_decl_namespace (decl, context, 0);
8936
8937       context = DECL_CONTEXT (decl);
8938       if (declarator && context && current_lang_name != lang_name_c)
8939         DECL_ASSEMBLER_NAME (decl) = build_static_name (context, declarator);
8940     }
8941
8942   if (in_namespace)
8943     set_decl_namespace (decl, in_namespace, 0);
8944
8945   if (RIDBIT_SETP (RID_EXTERN, specbits))
8946     {
8947       DECL_THIS_EXTERN (decl) = 1;
8948       DECL_EXTERNAL (decl) = !initialized;
8949     }
8950
8951   /* In class context, static means one per class,
8952      public access, and static storage.  */
8953   if (DECL_CLASS_SCOPE_P (decl))
8954     {
8955       TREE_PUBLIC (decl) = 1;
8956       TREE_STATIC (decl) = 1;
8957       DECL_EXTERNAL (decl) = 0;
8958     }
8959   /* At top level, either `static' or no s.c. makes a definition
8960      (perhaps tentative), and absence of `static' makes it public.  */
8961   else if (toplevel_bindings_p ())
8962     {
8963       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
8964                             && (DECL_THIS_EXTERN (decl) || ! constp));
8965       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8966     }
8967   /* Not at top level, only `static' makes a static definition.  */
8968   else
8969     {
8970       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
8971       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8972     }
8973
8974   if (TREE_PUBLIC (decl))
8975     {
8976       /* [basic.link]: A name with no linkage (notably, the name of a class
8977          or enumeration declared in a local scope) shall not be used to
8978          declare an entity with linkage.
8979
8980          Only check this for public decls for now.  */
8981       tree t = no_linkage_check (TREE_TYPE (decl));
8982       if (t)
8983         {
8984           if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8985             /* Ignore for now; `enum { foo } e' is pretty common.  */;
8986           else
8987             cp_pedwarn ("non-local variable `%#D' uses local type `%T'",
8988                         decl, t);
8989         }
8990     }
8991
8992   return decl;
8993 }
8994
8995 /* Create and return a canonical pointer to member function type, for
8996    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8997
8998 tree
8999 build_ptrmemfunc_type (type)
9000      tree type;
9001 {
9002   tree fields[4];
9003   tree t;
9004   tree u;
9005   tree unqualified_variant = NULL_TREE;
9006
9007   /* If a canonical type already exists for this type, use it.  We use
9008      this method instead of type_hash_canon, because it only does a
9009      simple equality check on the list of field members.  */
9010
9011   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
9012     return t;
9013
9014   /* Make sure that we always have the unqualified pointer-to-member
9015      type first.  */
9016   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9017     unqualified_variant
9018       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9019
9020   t = make_aggr_type (RECORD_TYPE);
9021   /* Let the front-end know this is a pointer to member function...  */
9022   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9023   /* ... and not really an aggregate.  */
9024   SET_IS_AGGR_TYPE (t, 0);
9025
9026   if (!flag_new_abi)
9027     {
9028       u = make_aggr_type (UNION_TYPE);
9029       SET_IS_AGGR_TYPE (u, 0);
9030       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9031       fields[1] = build_lang_decl (FIELD_DECL, delta2_identifier,
9032                                    delta_type_node);
9033       finish_builtin_type (u, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9034       TYPE_NAME (u) = NULL_TREE;
9035
9036       fields[0] = build_lang_decl (FIELD_DECL, delta_identifier,
9037                                    delta_type_node);
9038       fields[1] = build_lang_decl (FIELD_DECL, index_identifier,
9039                                    delta_type_node);
9040       fields[2] = build_lang_decl (FIELD_DECL, pfn_or_delta2_identifier, u);
9041       finish_builtin_type (t, "__ptrmemfunc_type", fields, 2, ptr_type_node);
9042     }
9043   else
9044     {
9045       fields[0] = build_lang_decl (FIELD_DECL, pfn_identifier, type);
9046       fields[1] = build_lang_decl (FIELD_DECL, delta_identifier,
9047                                    delta_type_node);
9048       finish_builtin_type (t, "__ptrmemfunc_type", fields, 1, ptr_type_node);
9049     }
9050
9051   /* Zap out the name so that the back-end will give us the debugging
9052      information for this anonymous RECORD_TYPE.  */
9053   TYPE_NAME (t) = NULL_TREE;
9054
9055   /* If this is not the unqualified form of this pointer-to-member
9056      type, set the TYPE_MAIN_VARIANT for this type to be the
9057      unqualified type.  Since they are actually RECORD_TYPEs that are
9058      not variants of each other, we must do this manually.  */
9059   if (CP_TYPE_QUALS (type) != TYPE_UNQUALIFIED)
9060     {
9061       t = build_qualified_type (t, CP_TYPE_QUALS (type));
9062       TYPE_MAIN_VARIANT (t) = unqualified_variant;
9063       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
9064       TYPE_NEXT_VARIANT (unqualified_variant) = t;
9065     }
9066
9067   /* Cache this pointer-to-member type so that we can find it again
9068      later.  */
9069   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
9070
9071   /* Seems to be wanted.  */
9072   CLASSTYPE_GOT_SEMICOLON (t) = 1;
9073
9074   return t;
9075 }
9076
9077 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9078    Check to see that the definition is valid.  Issue appropriate error
9079    messages.  Return 1 if the definition is particularly bad, or 0
9080    otherwise.  */
9081
9082 int
9083 check_static_variable_definition (decl, type)
9084      tree decl;
9085      tree type;
9086 {
9087   /* Motion 10 at San Diego: If a static const integral data member is
9088      initialized with an integral constant expression, the initializer
9089      may appear either in the declaration (within the class), or in
9090      the definition, but not both.  If it appears in the class, the
9091      member is a member constant.  The file-scope definition is always
9092      required.  */
9093   if (CLASS_TYPE_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
9094     {
9095       cp_error ("invalid in-class initialization of static data member of non-integral type `%T'",
9096                 type);
9097       /* If we just return the declaration, crashes will sometimes
9098          occur.  We therefore return void_type_node, as if this was a
9099          friend declaration, to cause callers to completely ignore
9100          this declaration.  */
9101       return 1;
9102     }
9103   else if (!CP_TYPE_CONST_P (type))
9104     cp_error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
9105               decl);
9106   else if (pedantic && !INTEGRAL_TYPE_P (type))
9107     cp_pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
9108
9109   return 0;
9110 }
9111
9112 /* Given the SIZE (i.e., number of elements) in an array, compute an
9113    appropriate index type for the array.  If non-NULL, NAME is the
9114    name of the thing being declared.  */
9115
9116 tree
9117 compute_array_index_type (name, size)
9118      tree name;
9119      tree size;
9120 {
9121   tree itype;
9122
9123   /* The size might be the result of a cast. */
9124   STRIP_TYPE_NOPS (size);
9125
9126   /* It might be a const variable or enumeration constant.  */
9127   if (TREE_READONLY_DECL_P (size))
9128     size = decl_constant_value (size);
9129
9130   /* If this involves a template parameter, it will be a constant at
9131      instantiation time, but we don't know what the value is yet.
9132      Even if no template parameters are involved, we may an expression
9133      that is not a constant; we don't even simplify `1 + 2' when
9134      processing a template.  */
9135   if (processing_template_decl)
9136     {
9137       /* Resolve a qualified reference to an enumerator or static
9138          const data member of ours.  */
9139       if (TREE_CODE (size) == SCOPE_REF
9140           && TREE_OPERAND (size, 0) == current_class_type)
9141         {
9142           tree t = lookup_field (current_class_type,
9143                                  TREE_OPERAND (size, 1), 0, 0);
9144           if (t)
9145             size = t;
9146         }
9147
9148       return build_index_type (build_min (MINUS_EXPR, sizetype,
9149                                           size, integer_one_node));
9150     }
9151
9152   /* The array bound must be an integer type.  */
9153   if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
9154       && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE
9155       && TREE_CODE (TREE_TYPE (size)) != BOOLEAN_TYPE)
9156     {
9157       if (name)
9158         cp_error ("size of array `%D' has non-integer type", name);
9159       else
9160         cp_error ("size of array has non-integer type");
9161       size = integer_one_node;
9162     }
9163
9164   /* Normally, the array-bound will be a constant.  */
9165   if (TREE_CONSTANT (size))
9166     {
9167       /* Check to see if the array bound overflowed.  Make that an
9168          error, no matter how generous we're being.  */
9169       int old_flag_pedantic_errors = flag_pedantic_errors;
9170       int old_pedantic = pedantic;
9171       pedantic = flag_pedantic_errors = 1;
9172       constant_expression_warning (size);
9173       pedantic = old_pedantic;
9174       flag_pedantic_errors = old_flag_pedantic_errors;
9175
9176       /* An array must have a positive number of elements.  */
9177       if (INT_CST_LT (size, integer_zero_node))
9178         {
9179           if (name)
9180             cp_error ("size of array `%D' is negative", name);
9181           else
9182             cp_error ("size of array is negative");
9183           size = integer_one_node;
9184         }
9185       /* Except that an extension we allow zero-sized arrays.  We
9186          always allow them in system headers because glibc uses
9187          them.  */
9188       else if (integer_zerop (size) && pedantic && !in_system_header)
9189         {
9190           if (name)
9191             cp_pedwarn ("ISO C++ forbids zero-size array `%D'", name);
9192           else
9193             cp_pedwarn ("ISO C++ forbids zero-size array");
9194         }
9195     }
9196
9197   /* Compute the index of the largest element in the array.  It is
9198      one less than the number of elements in the array.  */
9199   itype
9200     = fold (build_binary_op (MINUS_EXPR,
9201                              cp_convert (ssizetype, size),
9202                              cp_convert (ssizetype,
9203                                          integer_one_node)));
9204
9205   /* Check for variable-sized arrays.  We allow such things as an
9206      extension, even though they are not allowed in ANSI/ISO C++.  */
9207   if (!TREE_CONSTANT (itype))
9208     {
9209       if (pedantic)
9210         {
9211           if (name)
9212             cp_pedwarn ("ISO C++ forbids variable-size array `%D'",
9213                         name);
9214           else
9215             cp_pedwarn ("ISO C++ forbids variable-size array");
9216         }
9217
9218       /* Create a variable-sized array index type.  */
9219       itype = variable_size (itype);
9220     }
9221   /* Make sure that there was no overflow when creating to a signed
9222      index type.  (For example, on a 32-bit machine, an array with
9223      size 2^32 - 1 is too big.)  */
9224   else if (TREE_OVERFLOW (itype))
9225     {
9226       error ("overflow in array dimension");
9227       TREE_OVERFLOW (itype) = 0;
9228     }
9229
9230   /* Create and return the appropriate index type.  */
9231   return build_index_type (itype);
9232 }
9233
9234 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9235    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9236    with this type.  */
9237
9238 static tree
9239 create_array_type_for_decl (name, type, size)
9240      tree name;
9241      tree type;
9242      tree size;
9243 {
9244   tree itype = NULL_TREE;
9245   const char* error_msg;
9246
9247   /* If things have already gone awry, bail now.  */
9248   if (type == error_mark_node || size == error_mark_node)
9249     return error_mark_node;
9250
9251   /* Assume that everything will go OK.  */
9252   error_msg = NULL;
9253
9254   /* There are some types which cannot be array elements.  */
9255   switch (TREE_CODE (type))
9256     {
9257     case VOID_TYPE:
9258       error_msg = "array of void";
9259       break;
9260
9261     case FUNCTION_TYPE:
9262       error_msg = "array of functions";
9263       break;
9264
9265     case REFERENCE_TYPE:
9266       error_msg = "array of references";
9267       break;
9268
9269     case OFFSET_TYPE:
9270       error_msg = "array of data members";
9271       break;
9272
9273     case METHOD_TYPE:
9274       error_msg = "array of function members";
9275       break;
9276
9277     default:
9278       break;
9279     }
9280
9281   /* If something went wrong, issue an error-message and return.  */
9282   if (error_msg)
9283     {
9284       if (name)
9285         cp_error ("declaration of `%D' as %s", name, error_msg);
9286       else
9287         cp_error ("creating %s", error_msg);
9288
9289       return error_mark_node;
9290     }
9291
9292   /* [dcl.array]
9293
9294      The constant expressions that specify the bounds of the arrays
9295      can be omitted only for the first member of the sequence.  */
9296   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9297     {
9298       cp_error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
9299                 name);
9300
9301       return error_mark_node;
9302     }
9303
9304   /* Figure out the index type for the array.  */
9305   if (size)
9306     itype = compute_array_index_type (name, size);
9307
9308   return build_cplus_array_type (type, itype);
9309 }
9310
9311 /* Check that it's OK to declare a function with the indicated TYPE.
9312    SFK indicates the kind of special function (if any) that this
9313    function is.  CTYPE is the class of which this function is a
9314    member.  OPTYPE is the type given in a conversion operator
9315    declaration.  Returns the actual return type of the function; that
9316    may be different than TYPE if an error occurs, or for certain
9317    special functions.  */
9318
9319 static tree
9320 check_special_function_return_type (sfk, type, ctype, optype)
9321      special_function_kind sfk;
9322      tree type;
9323      tree ctype;
9324      tree optype;
9325 {
9326   switch (sfk)
9327     {
9328     case sfk_constructor:
9329       if (type)
9330         cp_error ("return type specification for constructor invalid");
9331         
9332       /* In the old ABI, we return `this'; in the new ABI we don't
9333          bother.  */
9334       type = flag_new_abi ? void_type_node : build_pointer_type (ctype);
9335       break;
9336
9337     case sfk_destructor:
9338       if (type)
9339         cp_error ("return type specification for destructor invalid");
9340       type = void_type_node;
9341       break;
9342
9343     case sfk_conversion:
9344       if (type && !same_type_p (type, optype))
9345         cp_error ("operator `%T' declared to return `%T'", optype, type);
9346       else if (type)
9347         cp_pedwarn ("return type specified for `operator %T'",  optype);
9348       type = optype;
9349       break;
9350
9351     default:
9352       my_friendly_abort (20000408);
9353       break;
9354     }
9355
9356   return type;
9357 }
9358
9359 /* Given declspecs and a declarator,
9360    determine the name and type of the object declared
9361    and construct a ..._DECL node for it.
9362    (In one case we can return a ..._TYPE node instead.
9363     For invalid input we sometimes return 0.)
9364
9365    DECLSPECS is a chain of tree_list nodes whose value fields
9366     are the storage classes and type specifiers.
9367
9368    DECL_CONTEXT says which syntactic context this declaration is in:
9369      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9370      FUNCDEF for a function definition.  Like NORMAL but a few different
9371       error messages in each case.  Return value may be zero meaning
9372       this definition is too screwy to try to parse.
9373      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
9374       handle member functions (which have FIELD context).
9375       Return value may be zero meaning this definition is too screwy to
9376       try to parse.
9377      PARM for a parameter declaration (either within a function prototype
9378       or before a function body).  Make a PARM_DECL, or return void_type_node.
9379      CATCHPARM for a parameter declaration before a catch clause.
9380      TYPENAME if for a typename (in a cast or sizeof).
9381       Don't make a DECL node; just return the ..._TYPE node.
9382      FIELD for a struct or union field; make a FIELD_DECL.
9383      BITFIELD for a field with specified width.
9384    INITIALIZED is 1 if the decl has an initializer.
9385
9386    ATTRLIST is a TREE_LIST node with prefix attributes in TREE_VALUE and
9387    normal attributes in TREE_PURPOSE, or NULL_TREE.
9388
9389    In the TYPENAME case, DECLARATOR is really an abstract declarator.
9390    It may also be so in the PARM case, for a prototype where the
9391    argument type is specified but not the name.
9392
9393    This function is where the complicated C meanings of `static'
9394    and `extern' are interpreted.
9395
9396    For C++, if there is any monkey business to do, the function which
9397    calls this one must do it, i.e., prepending instance variables,
9398    renaming overloaded function names, etc.
9399
9400    Note that for this C++, it is an error to define a method within a class
9401    which does not belong to that class.
9402
9403    Except in the case where SCOPE_REFs are implicitly known (such as
9404    methods within a class being redundantly qualified),
9405    declarations which involve SCOPE_REFs are returned as SCOPE_REFs
9406    (class_name::decl_name).  The caller must also deal with this.
9407
9408    If a constructor or destructor is seen, and the context is FIELD,
9409    then the type gains the attribute TREE_HAS_x.  If such a declaration
9410    is erroneous, NULL_TREE is returned.
9411
9412    QUALS is used only for FUNCDEF and MEMFUNCDEF cases.  For a member
9413    function, these are the qualifiers to give to the `this' pointer. We
9414    apply TYPE_QUAL_RESTRICT to the this ptr, not the object.
9415
9416    May return void_type_node if the declarator turned out to be a friend.
9417    See grokfield for details.  */
9418
9419 tree
9420 grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
9421      tree declspecs;
9422      tree declarator;
9423      enum decl_context decl_context;
9424      int initialized;
9425      tree attrlist;
9426 {
9427   RID_BIT_TYPE specbits;
9428   int nclasses = 0;
9429   tree spec;
9430   tree type = NULL_TREE;
9431   int longlong = 0;
9432   int constp;
9433   int restrictp;
9434   int volatilep;
9435   int type_quals;
9436   int virtualp, explicitp, friendp, inlinep, staticp;
9437   int explicit_int = 0;
9438   int explicit_char = 0;
9439   int defaulted_int = 0;
9440   tree typedef_decl = NULL_TREE;
9441   const char *name;
9442   tree typedef_type = NULL_TREE;
9443   int funcdef_flag = 0;
9444   enum tree_code innermost_code = ERROR_MARK;
9445   int bitfield = 0;
9446 #if 0
9447   /* See the code below that used this.  */
9448   tree decl_machine_attr = NULL_TREE;
9449 #endif
9450   /* Set this to error_mark_node for FIELD_DECLs we could not handle properly.
9451      All FIELD_DECLs we build here have `init' put into their DECL_INITIAL.  */
9452   tree init = NULL_TREE;
9453
9454   /* Keep track of what sort of function is being processed
9455      so that we can warn about default return values, or explicit
9456      return values which do not match prescribed defaults.  */
9457   special_function_kind sfk = sfk_none;
9458
9459   tree dname = NULL_TREE;
9460   tree ctype = current_class_type;
9461   tree ctor_return_type = NULL_TREE;
9462   enum overload_flags flags = NO_SPECIAL;
9463   tree quals = NULL_TREE;
9464   tree raises = NULL_TREE;
9465   int template_count = 0;
9466   tree in_namespace = NULL_TREE;
9467   tree inner_attrs;
9468   int ignore_attrs;
9469
9470   RIDBIT_RESET_ALL (specbits);
9471   if (decl_context == FUNCDEF)
9472     funcdef_flag = 1, decl_context = NORMAL;
9473   else if (decl_context == MEMFUNCDEF)
9474     funcdef_flag = -1, decl_context = FIELD;
9475   else if (decl_context == BITFIELD)
9476     bitfield = 1, decl_context = FIELD;
9477
9478   /* Look inside a declarator for the name being declared
9479      and get it as a string, for an error message.  */
9480   {
9481     tree *next = &declarator;
9482     register tree decl;
9483     name = NULL;
9484
9485     while (next && *next)
9486       {
9487         decl = *next;
9488         switch (TREE_CODE (decl))
9489           {
9490           case TREE_LIST:
9491             /* For attributes.  */
9492             next = &TREE_VALUE (decl);
9493             break;
9494
9495           case COND_EXPR:
9496             ctype = NULL_TREE;
9497             next = &TREE_OPERAND (decl, 0);
9498             break;
9499
9500           case BIT_NOT_EXPR:    /* For C++ destructors!  */
9501             {
9502               tree name = TREE_OPERAND (decl, 0);
9503               tree rename = NULL_TREE;
9504
9505               my_friendly_assert (flags == NO_SPECIAL, 152);
9506               flags = DTOR_FLAG;
9507               sfk = sfk_destructor;
9508               if (TREE_CODE (name) == TYPE_DECL)
9509                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
9510               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
9511               if (ctype == NULL_TREE)
9512                 {
9513                   if (current_class_type == NULL_TREE)
9514                     {
9515                       error ("destructors must be member functions");
9516                       flags = NO_SPECIAL;
9517                     }
9518                   else
9519                     {
9520                       tree t = constructor_name (current_class_name);
9521                       if (t != name)
9522                         rename = t;
9523                     }
9524                 }
9525               else
9526                 {
9527                   tree t = constructor_name (ctype);
9528                   if (t != name)
9529                     rename = t;
9530                 }
9531
9532               if (rename)
9533                 {
9534                   cp_error ("destructor `%T' must match class name `%T'",
9535                             name, rename);
9536                   TREE_OPERAND (decl, 0) = rename;
9537                 }
9538               next = &name;
9539             }
9540             break;
9541
9542           case ADDR_EXPR:       /* C++ reference declaration */
9543             /* Fall through. */
9544           case ARRAY_REF:
9545           case INDIRECT_REF:
9546             ctype = NULL_TREE;
9547             innermost_code = TREE_CODE (decl);
9548             next = &TREE_OPERAND (decl, 0);
9549             break;
9550
9551           case CALL_EXPR:
9552             if (parmlist_is_exprlist (CALL_DECLARATOR_PARMS (decl)))
9553               {
9554                 /* This is actually a variable declaration using
9555                    constructor syntax.  We need to call start_decl and
9556                    cp_finish_decl so we can get the variable
9557                    initialized...  */
9558
9559                 tree attributes, prefix_attributes;
9560
9561                 *next = TREE_OPERAND (decl, 0);
9562                 init = CALL_DECLARATOR_PARMS (decl);
9563
9564                 if (attrlist)
9565                   {
9566                     attributes = TREE_PURPOSE (attrlist);
9567                     prefix_attributes = TREE_VALUE (attrlist);
9568                   }
9569                 else
9570                   {
9571                     attributes = NULL_TREE;
9572                     prefix_attributes = NULL_TREE;
9573                   }
9574
9575                 decl = start_decl (declarator, declspecs, 1,
9576                                    attributes, prefix_attributes);
9577                 decl_type_access_control (decl);
9578                 if (decl)
9579                   {
9580                     /* Look for __unused__ attribute */
9581                     if (TREE_USED (TREE_TYPE (decl)))
9582                       TREE_USED (decl) = 1;
9583                     finish_decl (decl, init, NULL_TREE);
9584                   }
9585                 else
9586                   cp_error ("invalid declarator");
9587                 return 0;
9588               }
9589             innermost_code = TREE_CODE (decl);
9590             if (decl_context == FIELD && ctype == NULL_TREE)
9591               ctype = current_class_type;
9592             if (ctype
9593                 && TREE_OPERAND (decl, 0)
9594                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
9595                     && ((DECL_NAME (TREE_OPERAND (decl, 0))
9596                          == constructor_name_full (ctype))
9597                         || (DECL_NAME (TREE_OPERAND (decl, 0))
9598                             == constructor_name (ctype)))))
9599               TREE_OPERAND (decl, 0) = constructor_name (ctype);
9600             next = &TREE_OPERAND (decl, 0);
9601             decl = *next;
9602             if (ctype != NULL_TREE
9603                 && decl != NULL_TREE && flags != DTOR_FLAG
9604                 && decl == constructor_name (ctype))
9605               {
9606                 sfk = sfk_constructor;
9607                 ctor_return_type = ctype;
9608               }
9609             ctype = NULL_TREE;
9610             break;
9611
9612           case TEMPLATE_ID_EXPR:
9613               {
9614                 tree fns = TREE_OPERAND (decl, 0);
9615
9616                 if (TREE_CODE (fns) == LOOKUP_EXPR)
9617                   fns = TREE_OPERAND (fns, 0);
9618
9619                 dname = fns;
9620                 if (TREE_CODE (dname) == COMPONENT_REF)
9621                   dname = TREE_OPERAND (dname, 1);
9622                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
9623                   {
9624                     my_friendly_assert (is_overloaded_fn (dname),
9625                                         19990331);
9626                     dname = DECL_NAME (get_first_fn (dname));
9627                   }
9628               }
9629           /* Fall through. */
9630
9631           case IDENTIFIER_NODE:
9632             if (TREE_CODE (decl) == IDENTIFIER_NODE)
9633               dname = decl;
9634
9635             next = 0;
9636
9637             if (is_rid (dname))
9638               {
9639                 cp_error ("declarator-id missing; using reserved word `%D'",
9640                           dname);
9641                 name = IDENTIFIER_POINTER (dname);
9642               }
9643             if (! IDENTIFIER_OPNAME_P (dname)
9644                 /* GNU/Linux headers use '__op'.  Arrgh.  */
9645                 || (IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)))
9646               name = IDENTIFIER_POINTER (dname);
9647             else
9648               {
9649                 if (IDENTIFIER_TYPENAME_P (dname))
9650                   {
9651                     my_friendly_assert (flags == NO_SPECIAL, 154);
9652                     flags = TYPENAME_FLAG;
9653                     ctor_return_type = TREE_TYPE (dname);
9654                     sfk = sfk_conversion;
9655                   }
9656                 name = operator_name_string (dname);
9657               }
9658             break;
9659
9660             /* C++ extension */
9661           case SCOPE_REF:
9662             {
9663               /* Perform error checking, and decide on a ctype.  */
9664               tree cname = TREE_OPERAND (decl, 0);
9665               if (cname == NULL_TREE)
9666                 ctype = NULL_TREE;
9667               else if (TREE_CODE (cname) == NAMESPACE_DECL)
9668                 {
9669                   ctype = NULL_TREE;
9670                   in_namespace = TREE_OPERAND (decl, 0);
9671                   TREE_OPERAND (decl, 0) = NULL_TREE;
9672                 }
9673               else if (! is_aggr_type (cname, 1))
9674                 TREE_OPERAND (decl, 0) = NULL_TREE;
9675               /* Must test TREE_OPERAND (decl, 1), in case user gives
9676                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
9677               else if (TREE_OPERAND (decl, 1)
9678                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
9679                 ctype = cname;
9680               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
9681                        || TREE_CODE (cname) == TEMPLATE_TEMPLATE_PARM)
9682                 {
9683                   cp_error ("`%T::%D' is not a valid declarator", cname,
9684                             TREE_OPERAND (decl, 1));
9685                   cp_error ("  perhaps you want `typename %T::%D' to make it a type",
9686                             cname, TREE_OPERAND (decl, 1));
9687                   return void_type_node;
9688                 }
9689               else if (ctype == NULL_TREE)
9690                 ctype = cname;
9691               else if (TREE_COMPLEXITY (decl) == current_class_depth)
9692                 TREE_OPERAND (decl, 0) = ctype;
9693               else
9694                 {
9695                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
9696                     {
9697                       cp_error ("type `%T' is not derived from type `%T'",
9698                                 cname, ctype);
9699                       TREE_OPERAND (decl, 0) = NULL_TREE;
9700                     }
9701                   else
9702                     ctype = cname;
9703                 }
9704
9705               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
9706                   && ((DECL_NAME (TREE_OPERAND (decl, 1))
9707                        == constructor_name_full (ctype))
9708                       || (DECL_NAME (TREE_OPERAND (decl, 1))
9709                           == constructor_name (ctype))))
9710                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
9711               next = &TREE_OPERAND (decl, 1);
9712               decl = *next;
9713               if (ctype)
9714                 {
9715                   if (TREE_CODE (decl) == IDENTIFIER_NODE
9716                       && constructor_name (ctype) == decl)
9717                     {
9718                       sfk = sfk_constructor;
9719                       ctor_return_type = ctype;
9720                     }
9721                   else if (TREE_CODE (decl) == BIT_NOT_EXPR
9722                            && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
9723                            && (constructor_name (ctype) == TREE_OPERAND (decl, 0)
9724                                || constructor_name_full (ctype) == TREE_OPERAND (decl, 0)))
9725                     {
9726                       sfk = sfk_destructor;
9727                       ctor_return_type = ctype;
9728                       flags = DTOR_FLAG;
9729                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
9730                       next = &TREE_OPERAND (decl, 0);
9731                     }
9732                 }
9733             }
9734             break;
9735
9736           case ERROR_MARK:
9737             next = 0;
9738             break;
9739
9740           case TYPE_DECL:
9741             /* Parse error puts this typespec where
9742                a declarator should go.  */
9743             cp_error ("`%T' specified as declarator-id", DECL_NAME (decl));
9744             if (TREE_TYPE (decl) == current_class_type)
9745               cp_error ("  perhaps you want `%T' for a constructor",
9746                         current_class_name);
9747             dname = DECL_NAME (decl);
9748             name = IDENTIFIER_POINTER (dname);
9749
9750             /* Avoid giving two errors for this.  */
9751             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
9752
9753             declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
9754             *next = dname;
9755             next = 0;
9756             break;
9757
9758           default:
9759             cp_compiler_error ("`%D' as declarator", decl);
9760             return 0; /* We used to do a 155 abort here.  */
9761           }
9762       }
9763   }
9764
9765   /* A function definition's declarator must have the form of
9766      a function declarator.  */
9767
9768   if (funcdef_flag && innermost_code != CALL_EXPR)
9769     return 0;
9770
9771   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
9772       && innermost_code != CALL_EXPR
9773       && ! (ctype && declspecs == NULL_TREE))
9774     {
9775       cp_error ("declaration of `%D' as non-function", dname);
9776       return void_type_node;
9777     }
9778
9779   /* Anything declared one level down from the top level
9780      must be one of the parameters of a function
9781      (because the body is at least two levels down).  */
9782
9783   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9784      by not allowing C++ class definitions to specify their parameters
9785      with xdecls (must be spec.d in the parmlist).
9786
9787      Since we now wait to push a class scope until we are sure that
9788      we are in a legitimate method context, we must set oldcname
9789      explicitly (since current_class_name is not yet alive).
9790
9791      We also want to avoid calling this a PARM if it is in a namespace.  */
9792
9793   if (decl_context == NORMAL && !toplevel_bindings_p ())
9794     {
9795       struct binding_level *b = current_binding_level;
9796       current_binding_level = b->level_chain;
9797       if (current_binding_level != 0 && toplevel_bindings_p ())
9798         decl_context = PARM;
9799       current_binding_level = b;
9800     }
9801
9802   if (name == NULL)
9803     name = decl_context == PARM ? "parameter" : "type name";
9804
9805   /* Look through the decl specs and record which ones appear.
9806      Some typespecs are defined as built-in typenames.
9807      Others, the ones that are modifiers of other types,
9808      are represented by bits in SPECBITS: set the bits for
9809      the modifiers that appear.  Storage class keywords are also in SPECBITS.
9810
9811      If there is a typedef name or a type, store the type in TYPE.
9812      This includes builtin typedefs such as `int'.
9813
9814      Set EXPLICIT_INT if the type is `int' or `char' and did not
9815      come from a user typedef.
9816
9817      Set LONGLONG if `long' is mentioned twice.
9818
9819      For C++, constructors and destructors have their own fast treatment.  */
9820
9821   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
9822     {
9823       register int i;
9824       register tree id;
9825
9826       /* Certain parse errors slip through.  For example,
9827          `int class;' is not caught by the parser. Try
9828          weakly to recover here.  */
9829       if (TREE_CODE (spec) != TREE_LIST)
9830         return 0;
9831
9832       id = TREE_VALUE (spec);
9833
9834       if (TREE_CODE (id) == IDENTIFIER_NODE)
9835         {
9836           if (id == ridpointers[(int) RID_INT]
9837               || id == ridpointers[(int) RID_CHAR]
9838               || id == ridpointers[(int) RID_BOOL]
9839               || id == ridpointers[(int) RID_WCHAR])
9840             {
9841               if (type)
9842                 {
9843                   if (id == ridpointers[(int) RID_BOOL])
9844                     error ("`bool' is now a keyword");
9845                   else
9846                     cp_error ("extraneous `%T' ignored", id);
9847                 }
9848               else
9849                 {
9850                   if (id == ridpointers[(int) RID_INT])
9851                     explicit_int = 1;
9852                   else if (id == ridpointers[(int) RID_CHAR])
9853                     explicit_char = 1;
9854                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
9855                 }
9856               goto found;
9857             }
9858           /* C++ aggregate types.  */
9859           if (IDENTIFIER_HAS_TYPE_VALUE (id))
9860             {
9861               if (type)
9862                 cp_error ("multiple declarations `%T' and `%T'", type, id);
9863               else
9864                 type = IDENTIFIER_TYPE_VALUE (id);
9865               goto found;
9866             }
9867
9868           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
9869             {
9870               if (ridpointers[i] == id)
9871                 {
9872                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
9873                     {
9874                       if (pedantic && ! in_system_header && warn_long_long)
9875                         pedwarn ("ISO C++ does not support `long long'");
9876                       if (longlong)
9877                         error ("`long long long' is too long for GCC");
9878                       else
9879                         longlong = 1;
9880                     }
9881                   else if (RIDBIT_SETP (i, specbits))
9882                     pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
9883                   RIDBIT_SET (i, specbits);
9884                   goto found;
9885                 }
9886             }
9887         }
9888       /* C++ aggregate types.  */
9889       else if (TREE_CODE (id) == TYPE_DECL || TREE_CODE (id) == TEMPLATE_DECL)
9890         {
9891           if (type)
9892             cp_error ("multiple declarations `%T' and `%T'", type,
9893                       TREE_TYPE (id));
9894           else
9895             {
9896               type = TREE_TYPE (id);
9897               TREE_VALUE (spec) = type;
9898             }
9899           goto found;
9900         }
9901       if (type)
9902         error ("two or more data types in declaration of `%s'", name);
9903       else if (TREE_CODE (id) == IDENTIFIER_NODE)
9904         {
9905           register tree t = lookup_name (id, 1);
9906           if (!t || TREE_CODE (t) != TYPE_DECL)
9907             error ("`%s' fails to be a typedef or built in type",
9908                    IDENTIFIER_POINTER (id));
9909           else
9910             {
9911               type = TREE_TYPE (t);
9912 #if 0
9913               /* See the code below that used this.  */
9914               decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
9915 #endif
9916               typedef_decl = t;
9917             }
9918         }
9919       else if (id != error_mark_node)
9920         /* Can't change CLASS nodes into RECORD nodes here!  */
9921         type = id;
9922
9923     found: ;
9924     }
9925
9926   typedef_type = type;
9927
9928   /* No type at all: default to `int', and set DEFAULTED_INT
9929      because it was not a user-defined typedef.  */
9930
9931   if (type == NULL_TREE
9932       && (RIDBIT_SETP (RID_SIGNED, specbits)
9933           || RIDBIT_SETP (RID_UNSIGNED, specbits)
9934           || RIDBIT_SETP (RID_LONG, specbits)
9935           || RIDBIT_SETP (RID_SHORT, specbits)))
9936     {
9937       /* These imply 'int'.  */
9938       type = integer_type_node;
9939       defaulted_int = 1;
9940     }
9941
9942   if (sfk != sfk_none)
9943     type = check_special_function_return_type (sfk, type,
9944                                                ctor_return_type,
9945                                                ctor_return_type);
9946   else if (type == NULL_TREE)
9947     {
9948       int is_main;
9949
9950       explicit_int = -1;
9951
9952           /* We handle `main' specially here, because 'main () { }' is so
9953              common.  With no options, it is allowed.  With -Wreturn-type,
9954              it is a warning.  It is only an error with -pedantic-errors.  */
9955       is_main = (funcdef_flag
9956                  && MAIN_NAME_P (dname)
9957                  && ctype == NULL_TREE
9958                  && in_namespace == NULL_TREE
9959                  && current_namespace == global_namespace);
9960
9961       if (in_system_header || flag_ms_extensions)
9962         /* Allow it, sigh.  */;
9963       else if (pedantic || ! is_main)
9964         cp_pedwarn ("ISO C++ forbids declaration of `%s' with no type",
9965                     name);
9966       else if (warn_return_type)
9967         cp_warning ("ISO C++ forbids declaration of `%s' with no type",
9968                     name);
9969
9970       type = integer_type_node;
9971     }
9972
9973   ctype = NULL_TREE;
9974
9975   /* Now process the modifiers that were specified
9976      and check for invalid combinations.  */
9977
9978   /* Long double is a special combination.  */
9979
9980   if (RIDBIT_SETP (RID_LONG, specbits)
9981       && TYPE_MAIN_VARIANT (type) == double_type_node)
9982     {
9983       RIDBIT_RESET (RID_LONG, specbits);
9984       type = build_qualified_type (long_double_type_node,
9985                                    CP_TYPE_QUALS (type));
9986     }
9987
9988   /* Check all other uses of type modifiers.  */
9989
9990   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
9991       || RIDBIT_SETP (RID_SIGNED, specbits)
9992       || RIDBIT_SETP (RID_LONG, specbits)
9993       || RIDBIT_SETP (RID_SHORT, specbits))
9994     {
9995       int ok = 0;
9996
9997       if (TREE_CODE (type) == REAL_TYPE)
9998         error ("short, signed or unsigned invalid for `%s'", name);
9999       else if (TREE_CODE (type) != INTEGER_TYPE)
10000         error ("long, short, signed or unsigned invalid for `%s'", name);
10001       else if (RIDBIT_SETP (RID_LONG, specbits)
10002                && RIDBIT_SETP (RID_SHORT, specbits))
10003         error ("long and short specified together for `%s'", name);
10004       else if ((RIDBIT_SETP (RID_LONG, specbits)
10005                 || RIDBIT_SETP (RID_SHORT, specbits))
10006                && explicit_char)
10007         error ("long or short specified with char for `%s'", name);
10008       else if ((RIDBIT_SETP (RID_LONG, specbits)
10009                 || RIDBIT_SETP (RID_SHORT, specbits))
10010                && TREE_CODE (type) == REAL_TYPE)
10011         error ("long or short specified with floating type for `%s'", name);
10012       else if (RIDBIT_SETP (RID_SIGNED, specbits)
10013                && RIDBIT_SETP (RID_UNSIGNED, specbits))
10014         error ("signed and unsigned given together for `%s'", name);
10015       else
10016         {
10017           ok = 1;
10018           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
10019             {
10020               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
10021                        name);
10022               if (flag_pedantic_errors)
10023                 ok = 0;
10024             }
10025         }
10026
10027       /* Discard the type modifiers if they are invalid.  */
10028       if (! ok)
10029         {
10030           RIDBIT_RESET (RID_UNSIGNED, specbits);
10031           RIDBIT_RESET (RID_SIGNED, specbits);
10032           RIDBIT_RESET (RID_LONG, specbits);
10033           RIDBIT_RESET (RID_SHORT, specbits);
10034           longlong = 0;
10035         }
10036     }
10037
10038   if (RIDBIT_SETP (RID_COMPLEX, specbits)
10039       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10040     {
10041       error ("complex invalid for `%s'", name);
10042       RIDBIT_RESET (RID_COMPLEX, specbits);
10043     }
10044
10045   /* Decide whether an integer type is signed or not.
10046      Optionally treat bitfields as signed by default.  */
10047   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
10048       /* [class.bit]
10049
10050          It is implementation-defined whether a plain (neither
10051          explicitly signed or unsigned) char, short, int, or long
10052          bit-field is signed or unsigned.
10053
10054          Naturally, we extend this to long long as well.  Note that
10055          this does not include wchar_t.  */
10056       || (bitfield && !flag_signed_bitfields
10057           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
10058           /* A typedef for plain `int' without `signed' can be
10059              controlled just like plain `int', but a typedef for
10060              `signed int' cannot be so controlled.  */
10061           && !(typedef_decl
10062                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10063           && (TREE_CODE (type) == INTEGER_TYPE
10064               || TREE_CODE (type) == CHAR_TYPE)
10065           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10066     {
10067       if (longlong)
10068         type = long_long_unsigned_type_node;
10069       else if (RIDBIT_SETP (RID_LONG, specbits))
10070         type = long_unsigned_type_node;
10071       else if (RIDBIT_SETP (RID_SHORT, specbits))
10072         type = short_unsigned_type_node;
10073       else if (type == char_type_node)
10074         type = unsigned_char_type_node;
10075       else if (typedef_decl)
10076         type = unsigned_type (type);
10077       else
10078         type = unsigned_type_node;
10079     }
10080   else if (RIDBIT_SETP (RID_SIGNED, specbits)
10081            && type == char_type_node)
10082     type = signed_char_type_node;
10083   else if (longlong)
10084     type = long_long_integer_type_node;
10085   else if (RIDBIT_SETP (RID_LONG, specbits))
10086     type = long_integer_type_node;
10087   else if (RIDBIT_SETP (RID_SHORT, specbits))
10088     type = short_integer_type_node;
10089
10090   if (RIDBIT_SETP (RID_COMPLEX, specbits))
10091     {
10092       /* If we just have "complex", it is equivalent to
10093          "complex double", but if any modifiers at all are specified it is
10094          the complex form of TYPE.  E.g, "complex short" is
10095          "complex short int".  */
10096
10097       if (defaulted_int && ! longlong
10098           && ! (RIDBIT_SETP (RID_LONG, specbits)
10099                 || RIDBIT_SETP (RID_SHORT, specbits)
10100                 || RIDBIT_SETP (RID_SIGNED, specbits)
10101                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
10102         type = complex_double_type_node;
10103       else if (type == integer_type_node)
10104         type = complex_integer_type_node;
10105       else if (type == float_type_node)
10106         type = complex_float_type_node;
10107       else if (type == double_type_node)
10108         type = complex_double_type_node;
10109       else if (type == long_double_type_node)
10110         type = complex_long_double_type_node;
10111       else
10112         type = build_complex_type (type);
10113     }
10114
10115   if (sfk == sfk_conversion
10116       && (RIDBIT_SETP (RID_CONST, specbits)
10117           || RIDBIT_SETP (RID_VOLATILE, specbits)
10118           || RIDBIT_SETP (RID_RESTRICT, specbits)))
10119     cp_error ("qualifiers are not allowed on declaration of `operator %T'",
10120               ctor_return_type);
10121
10122   /* Set CONSTP if this declaration is `const', whether by
10123      explicit specification or via a typedef.
10124      Likewise for VOLATILEP.  */
10125
10126   constp = !! RIDBIT_SETP (RID_CONST, specbits) + CP_TYPE_CONST_P (type);
10127   restrictp =
10128     !! RIDBIT_SETP (RID_RESTRICT, specbits) + CP_TYPE_RESTRICT_P (type);
10129   volatilep =
10130     !! RIDBIT_SETP (RID_VOLATILE, specbits) + CP_TYPE_VOLATILE_P (type);
10131   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10132                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10133                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10134   type = cp_build_qualified_type (type, type_quals);
10135   staticp = 0;
10136   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
10137   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
10138   RIDBIT_RESET (RID_VIRTUAL, specbits);
10139   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
10140   RIDBIT_RESET (RID_EXPLICIT, specbits);
10141
10142   if (RIDBIT_SETP (RID_STATIC, specbits))
10143     staticp = 1 + (decl_context == FIELD);
10144
10145   if (virtualp && staticp == 2)
10146     {
10147       cp_error ("member `%D' cannot be declared both virtual and static",
10148                 dname);
10149       staticp = 0;
10150     }
10151   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
10152   RIDBIT_RESET (RID_FRIEND, specbits);
10153
10154   /* Warn if two storage classes are given. Default to `auto'.  */
10155
10156   if (RIDBIT_ANY_SET (specbits))
10157     {
10158       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
10159       if (RIDBIT_SETP (RID_EXTERN, specbits)) nclasses++;
10160       if (decl_context == PARM && nclasses > 0)
10161         error ("storage class specifiers invalid in parameter declarations");
10162       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10163         {
10164           if (decl_context == PARM)
10165             error ("typedef declaration invalid in parameter declaration");
10166           nclasses++;
10167         }
10168       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
10169       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
10170     }
10171
10172   /* Give error if `virtual' is used outside of class declaration.  */
10173   if (virtualp
10174       && (current_class_name == NULL_TREE || decl_context != FIELD))
10175     {
10176       error ("virtual outside class declaration");
10177       virtualp = 0;
10178     }
10179
10180   /* Static anonymous unions are dealt with here.  */
10181   if (staticp && decl_context == TYPENAME
10182       && TREE_CODE (declspecs) == TREE_LIST
10183       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
10184     decl_context = FIELD;
10185
10186   /* Warn about storage classes that are invalid for certain
10187      kinds of declarations (parameters, typenames, etc.).  */
10188
10189   if (nclasses > 1)
10190     error ("multiple storage classes in declaration of `%s'", name);
10191   else if (decl_context != NORMAL && nclasses > 0)
10192     {
10193       if ((decl_context == PARM || decl_context == CATCHPARM)
10194           && (RIDBIT_SETP (RID_REGISTER, specbits)
10195               || RIDBIT_SETP (RID_AUTO, specbits)))
10196         ;
10197       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
10198         ;
10199       else if (decl_context == FIELD
10200                /* C++ allows static class elements  */
10201                && RIDBIT_SETP (RID_STATIC, specbits))
10202         /* C++ also allows inlines and signed and unsigned elements,
10203            but in those cases we don't come in here.  */
10204         ;
10205       else
10206         {
10207           if (decl_context == FIELD)
10208             {
10209               tree tmp = NULL_TREE;
10210               register int op = 0;
10211
10212               if (declarator)
10213                 {
10214                   /* Avoid trying to get an operand off an identifier node.  */
10215                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
10216                     tmp = declarator;
10217                   else
10218                     tmp = TREE_OPERAND (declarator, 0);
10219                   op = IDENTIFIER_OPNAME_P (tmp);
10220                 }
10221               error ("storage class specified for %s `%s'",
10222                      op ? "member operator" : "field",
10223                      op ? operator_name_string (tmp) : name);
10224             }
10225           else
10226             {
10227               if (decl_context == PARM || decl_context == CATCHPARM)
10228                 error ("storage class specified for parameter `%s'", name);
10229               else
10230                 error ("storage class specified for typename");
10231             }
10232           RIDBIT_RESET (RID_REGISTER, specbits);
10233           RIDBIT_RESET (RID_AUTO, specbits);
10234           RIDBIT_RESET (RID_EXTERN, specbits);
10235         }
10236     }
10237   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
10238     {
10239       if (toplevel_bindings_p ())
10240         {
10241           /* It's common practice (and completely valid) to have a const
10242              be initialized and declared extern.  */
10243           if (!(type_quals & TYPE_QUAL_CONST))
10244             warning ("`%s' initialized and declared `extern'", name);
10245         }
10246       else
10247         error ("`%s' has both `extern' and initializer", name);
10248     }
10249   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
10250            && ! toplevel_bindings_p ())
10251     error ("nested function `%s' declared `extern'", name);
10252   else if (toplevel_bindings_p ())
10253     {
10254       if (RIDBIT_SETP (RID_AUTO, specbits))
10255         error ("top-level declaration of `%s' specifies `auto'", name);
10256     }
10257
10258   if (nclasses > 0 && friendp)
10259     error ("storage class specifiers invalid in friend function declarations");
10260
10261   /* Now figure out the structure of the declarator proper.
10262      Descend through it, creating more complex types, until we reach
10263      the declared identifier (or NULL_TREE, in an absolute declarator).  */
10264
10265   inner_attrs = NULL_TREE;
10266   ignore_attrs = 0;
10267
10268   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
10269          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
10270     {
10271       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
10272          an INDIRECT_REF (for *...),
10273          a CALL_EXPR (for ...(...)),
10274          an identifier (for the name being declared)
10275          or a null pointer (for the place in an absolute declarator
10276          where the name was omitted).
10277          For the last two cases, we have just exited the loop.
10278
10279          For C++ it could also be
10280          a SCOPE_REF (for class :: ...).  In this case, we have converted
10281          sensible names to types, and those are the values we use to
10282          qualify the member name.
10283          an ADDR_EXPR (for &...),
10284          a BIT_NOT_EXPR (for destructors)
10285
10286          At this point, TYPE is the type of elements of an array,
10287          or for a function to return, or for a pointer to point to.
10288          After this sequence of ifs, TYPE is the type of the
10289          array or function or pointer, and DECLARATOR has had its
10290          outermost layer removed.  */
10291
10292       if (type == error_mark_node)
10293         {
10294           if (TREE_CODE (declarator) == SCOPE_REF)
10295             declarator = TREE_OPERAND (declarator, 1);
10296           else
10297             declarator = TREE_OPERAND (declarator, 0);
10298           continue;
10299         }
10300       if (quals != NULL_TREE
10301           && (declarator == NULL_TREE
10302               || TREE_CODE (declarator) != SCOPE_REF))
10303         {
10304           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
10305             ctype = TYPE_METHOD_BASETYPE (type);
10306           if (ctype != NULL_TREE)
10307             {
10308               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
10309               grok_method_quals (ctype, dummy, quals);
10310               type = TREE_TYPE (dummy);
10311               ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
10312               quals = NULL_TREE;
10313             }
10314         }
10315
10316       /* See the comment for the TREE_LIST case, below.  */
10317       if (ignore_attrs)
10318         ignore_attrs = 0;
10319       else if (inner_attrs)
10320         {
10321           decl_attributes (type, inner_attrs, NULL_TREE);
10322           inner_attrs = NULL_TREE;
10323         }
10324
10325       switch (TREE_CODE (declarator))
10326         {
10327         case TREE_LIST:
10328           {
10329             /* We encode a declarator with embedded attributes using
10330                a TREE_LIST.  The attributes apply to the declarator
10331                directly inside them, so we have to skip an iteration
10332                before applying them to the type.  If the declarator just
10333                inside is the declarator-id, we apply the attrs to the
10334                decl itself.  */
10335             inner_attrs = TREE_PURPOSE (declarator);
10336             ignore_attrs = 1;
10337             declarator = TREE_VALUE (declarator);
10338           }
10339           break;
10340
10341         case ARRAY_REF:
10342           {
10343             register tree size;
10344
10345             size = TREE_OPERAND (declarator, 1);
10346
10347             /* VC++ spells a zero-sized array with [].  */
10348             if (size == NULL_TREE && decl_context == FIELD && ! staticp
10349                 && ! RIDBIT_SETP (RID_TYPEDEF, specbits))
10350               size = integer_zero_node;
10351
10352             declarator = TREE_OPERAND (declarator, 0);
10353
10354             type = create_array_type_for_decl (dname, type, size);
10355             ctype = NULL_TREE;
10356           }
10357           break;
10358
10359         case CALL_EXPR:
10360           {
10361             tree arg_types;
10362             int funcdecl_p;
10363             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
10364             tree inner_decl = TREE_OPERAND (declarator, 0);
10365
10366             /* Declaring a function type.
10367                Make sure we have a valid type for the function to return.  */
10368
10369             /* We now know that the TYPE_QUALS don't apply to the
10370                decl, but to its return type.  */
10371             type_quals = TYPE_UNQUALIFIED;
10372
10373             /* Warn about some types functions can't return.  */
10374
10375             if (TREE_CODE (type) == FUNCTION_TYPE)
10376               {
10377                 error ("`%s' declared as function returning a function", name);
10378                 type = integer_type_node;
10379               }
10380             if (TREE_CODE (type) == ARRAY_TYPE)
10381               {
10382                 error ("`%s' declared as function returning an array", name);
10383                 type = integer_type_node;
10384               }
10385
10386             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
10387               inner_decl = TREE_OPERAND (inner_decl, 1);
10388
10389             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
10390               inner_decl = dname;
10391
10392             /* Pick up type qualifiers which should be applied to `this'.  */
10393             quals = CALL_DECLARATOR_QUALS (declarator);
10394
10395             /* Pick up the exception specifications.  */
10396             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
10397
10398             /* Say it's a definition only for the CALL_EXPR
10399                closest to the identifier.  */
10400             funcdecl_p
10401               = inner_decl
10402               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
10403                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
10404                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
10405
10406             if (ctype == NULL_TREE
10407                 && decl_context == FIELD
10408                 && funcdecl_p
10409                 && (friendp == 0 || dname == current_class_name))
10410               ctype = current_class_type;
10411
10412             if (ctype && sfk == sfk_conversion)
10413               TYPE_HAS_CONVERSION (ctype) = 1;
10414             if (ctype && constructor_name (ctype) == dname)
10415               {
10416                 /* We are within a class's scope. If our declarator name
10417                    is the same as the class name, and we are defining
10418                    a function, then it is a constructor/destructor, and
10419                    therefore returns a void type.  */
10420
10421                 if (flags == DTOR_FLAG)
10422                   {
10423                     /* ISO C++ 12.4/2.  A destructor may not be
10424                        declared const or volatile.  A destructor may
10425                        not be static.  */
10426                     if (staticp == 2)
10427                       error ("destructor cannot be static member function");
10428                     if (quals)
10429                       {
10430                         cp_error ("destructors may not be `%s'",
10431                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10432                         quals = NULL_TREE;
10433                       }
10434                     if (decl_context == FIELD)
10435                       {
10436                         if (! member_function_or_else (ctype,
10437                                                        current_class_type,
10438                                                        flags))
10439                           return void_type_node;
10440                       }
10441                   }
10442                 else            /* It's a constructor.  */
10443                   {
10444                     if (explicitp == 1)
10445                       explicitp = 2;
10446                     /* ISO C++ 12.1.  A constructor may not be
10447                        declared const or volatile.  A constructor may
10448                        not be virtual.  A constructor may not be
10449                        static.  */
10450                     if (staticp == 2)
10451                       error ("constructor cannot be static member function");
10452                     if (virtualp)
10453                       {
10454                         pedwarn ("constructors cannot be declared virtual");
10455                         virtualp = 0;
10456                       }
10457                     if (quals)
10458                       {
10459                         cp_error ("constructors may not be `%s'",
10460                                   IDENTIFIER_POINTER (TREE_VALUE (quals)));
10461                         quals = NULL_TREE;
10462                       }
10463                     {
10464                       RID_BIT_TYPE tmp_bits;
10465                       bcopy ((void*)&specbits, (void*)&tmp_bits, sizeof (RID_BIT_TYPE));
10466                       RIDBIT_RESET (RID_INLINE, tmp_bits);
10467                       RIDBIT_RESET (RID_STATIC, tmp_bits);
10468                       if (RIDBIT_ANY_SET (tmp_bits))
10469                         error ("return value type specifier for constructor ignored");
10470                     }
10471                     if (decl_context == FIELD)
10472                       {
10473                         if (! member_function_or_else (ctype,
10474                                                        current_class_type,
10475                                                        flags))
10476                           return void_type_node;
10477                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
10478                         if (sfk != sfk_constructor)
10479                           return NULL_TREE;
10480                       }
10481                   }
10482                 if (decl_context == FIELD)
10483                   staticp = 0;
10484               }
10485             else if (friendp)
10486               {
10487                 if (initialized)
10488                   error ("can't initialize friend function `%s'", name);
10489                 if (virtualp)
10490                   {
10491                     /* Cannot be both friend and virtual.  */
10492                     error ("virtual functions cannot be friends");
10493                     RIDBIT_RESET (RID_FRIEND, specbits);
10494                     friendp = 0;
10495                   }
10496                 if (decl_context == NORMAL)
10497                   error ("friend declaration not in class definition");
10498                 if (current_function_decl && funcdef_flag)
10499                   cp_error ("can't define friend function `%s' in a local class definition",
10500                             name);
10501               }
10502
10503             /* Construct the function type and go to the next
10504                inner layer of declarator.  */
10505
10506             declarator = TREE_OPERAND (declarator, 0);
10507
10508             /* FIXME: This is where default args should be fully
10509                processed.  */
10510
10511             arg_types = grokparms (inner_parms, funcdecl_p ? funcdef_flag : 0);
10512
10513             if (declarator && flags == DTOR_FLAG)
10514               {
10515                 /* A destructor declared in the body of a class will
10516                    be represented as a BIT_NOT_EXPR.  But, we just
10517                    want the underlying IDENTIFIER.  */
10518                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
10519                   declarator = TREE_OPERAND (declarator, 0);
10520
10521                 if (strict_prototype == 0 && arg_types == NULL_TREE)
10522                   arg_types = void_list_node;
10523                 else if (arg_types == NULL_TREE
10524                          || arg_types != void_list_node)
10525                   {
10526                     cp_error ("destructors may not have parameters");
10527                     arg_types = void_list_node;
10528                     last_function_parms = NULL_TREE;
10529                   }
10530               }
10531
10532             /* ANSI says that `const int foo ();'
10533                does not make the function foo const.  */
10534             type = build_function_type (type, arg_types);
10535
10536             {
10537               tree t;
10538               for (t = arg_types; t; t = TREE_CHAIN (t))
10539                 if (TREE_PURPOSE (t)
10540                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
10541                   {
10542                     add_defarg_fn (type);
10543                     break;
10544                   }
10545             }
10546           }
10547           break;
10548
10549         case ADDR_EXPR:
10550         case INDIRECT_REF:
10551           /* Filter out pointers-to-references and references-to-references.
10552              We can get these if a TYPE_DECL is used.  */
10553
10554           if (TREE_CODE (type) == REFERENCE_TYPE)
10555             {
10556               error ("cannot declare %s to references",
10557                      TREE_CODE (declarator) == ADDR_EXPR
10558                      ? "references" : "pointers");
10559               declarator = TREE_OPERAND (declarator, 0);
10560               continue;
10561             }
10562
10563           if (TREE_CODE (type) == OFFSET_TYPE
10564               && (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE
10565                   || TREE_CODE (TREE_TYPE (type)) == REFERENCE_TYPE))
10566             {
10567               cp_error ("cannot declare pointer to `%#T' member",
10568                         TREE_TYPE (type));
10569               type = TREE_TYPE (type);
10570             }
10571
10572           /* Merge any constancy or volatility into the target type
10573              for the pointer.  */
10574
10575           /* We now know that the TYPE_QUALS don't apply to the decl,
10576              but to the target of the pointer.  */
10577           type_quals = TYPE_UNQUALIFIED;
10578
10579           if (TREE_CODE (declarator) == ADDR_EXPR)
10580             {
10581               if (TREE_CODE (type) == VOID_TYPE)
10582                 error ("invalid type: `void &'");
10583               else
10584                 type = build_reference_type (type);
10585             }
10586           else if (TREE_CODE (type) == METHOD_TYPE)
10587             type = build_ptrmemfunc_type (build_pointer_type (type));
10588           else
10589             type = build_pointer_type (type);
10590
10591           /* Process a list of type modifier keywords (such as
10592              const or volatile) that were given inside the `*' or `&'.  */
10593
10594           if (TREE_TYPE (declarator))
10595             {
10596               register tree typemodlist;
10597               int erred = 0;
10598
10599               constp = 0;
10600               volatilep = 0;
10601               restrictp = 0;
10602               for (typemodlist = TREE_TYPE (declarator); typemodlist;
10603                    typemodlist = TREE_CHAIN (typemodlist))
10604                 {
10605                   tree qualifier = TREE_VALUE (typemodlist);
10606
10607                   if (qualifier == ridpointers[(int) RID_CONST])
10608                     constp++;
10609                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
10610                     volatilep++;
10611                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
10612                     restrictp++;
10613                   else if (!erred)
10614                     {
10615                       erred = 1;
10616                       error ("invalid type modifier within pointer declarator");
10617                     }
10618                 }
10619               if (constp > 1)
10620                 pedwarn ("duplicate `const'");
10621               if (volatilep > 1)
10622                 pedwarn ("duplicate `volatile'");
10623               if (restrictp > 1)
10624                 pedwarn ("duplicate `restrict'");
10625
10626               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
10627                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
10628                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
10629               if (TREE_CODE (declarator) == ADDR_EXPR
10630                   && (constp || volatilep))
10631                 {
10632                   if (constp)
10633                     pedwarn ("discarding `const' applied to a reference");
10634                   if (volatilep)
10635                     pedwarn ("discarding `volatile' applied to a reference");
10636                   type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
10637                 }
10638               type = cp_build_qualified_type (type, type_quals);
10639             }
10640           declarator = TREE_OPERAND (declarator, 0);
10641           ctype = NULL_TREE;
10642           break;
10643
10644         case SCOPE_REF:
10645           {
10646             /* We have converted type names to NULL_TREE if the
10647                name was bogus, or to a _TYPE node, if not.
10648
10649                The variable CTYPE holds the type we will ultimately
10650                resolve to.  The code here just needs to build
10651                up appropriate member types.  */
10652             tree sname = TREE_OPERAND (declarator, 1);
10653             tree t;
10654
10655             /* Destructors can have their visibilities changed as well.  */
10656             if (TREE_CODE (sname) == BIT_NOT_EXPR)
10657               sname = TREE_OPERAND (sname, 0);
10658
10659             if (TREE_COMPLEXITY (declarator) == 0)
10660               /* This needs to be here, in case we are called
10661                  multiple times.  */ ;
10662             else if (TREE_COMPLEXITY (declarator) == -1)
10663               /* Namespace member. */
10664               pop_decl_namespace ();
10665             else if (friendp && (TREE_COMPLEXITY (declarator) < 2))
10666               /* Don't fall out into global scope. Hides real bug? --eichin */ ;
10667             else if (! IS_AGGR_TYPE_CODE
10668                      (TREE_CODE (TREE_OPERAND (declarator, 0))))
10669               ;
10670             else if (TREE_COMPLEXITY (declarator) == current_class_depth)
10671               {
10672                 /* Resolve any TYPENAME_TYPEs from the decl-specifier-seq
10673                    that refer to ctype.  They couldn't be resolved earlier
10674                    because we hadn't pushed into the class yet.
10675                    Example: resolve 'B<T>::type' in
10676                    'B<typename B<T>::type> B<T>::f () { }'.  */
10677                 if (current_template_parms
10678                     && uses_template_parms (type)
10679                     && uses_template_parms (current_class_type))
10680                   {
10681                     tree args = current_template_args ();
10682                     type = tsubst (type, args, /*complain=*/1, NULL_TREE);
10683                   }
10684
10685                 /* This pop_nested_class corresponds to the
10686                    push_nested_class used to push into class scope for
10687                    parsing the argument list of a function decl, in
10688                    qualified_id.  */
10689                 pop_nested_class ();
10690                 TREE_COMPLEXITY (declarator) = current_class_depth;
10691               }
10692             else
10693               my_friendly_abort (16);
10694
10695             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
10696               {
10697                 /* We had a reference to a global decl, or
10698                    perhaps we were given a non-aggregate typedef,
10699                    in which case we cleared this out, and should just
10700                    keep going as though it wasn't there.  */
10701                 declarator = sname;
10702                 continue;
10703               }
10704             ctype = TREE_OPERAND (declarator, 0);
10705
10706             t = ctype;
10707             while (t != NULL_TREE && CLASS_TYPE_P (t))
10708               {
10709                 /* You're supposed to have one `template <...>' 
10710                    for every template class, but you don't need one
10711                    for a full specialization.  For example:
10712
10713                      template <class T> struct S{};
10714                      template <> struct S<int> { void f(); };
10715                      void S<int>::f () {}
10716
10717                    is correct; there shouldn't be a `template <>' for
10718                    the definition of `S<int>::f'.  */
10719                 if (CLASSTYPE_TEMPLATE_INFO (t)
10720                     && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
10721                         || uses_template_parms (CLASSTYPE_TI_ARGS (t))))
10722                   template_count += 1;
10723
10724                 t = TYPE_MAIN_DECL (t);
10725                 if (DECL_LANG_SPECIFIC (t))
10726                   t = DECL_CONTEXT (t);
10727                 else
10728                   t = NULL_TREE;
10729               }
10730
10731             if (sname == NULL_TREE)
10732               goto done_scoping;
10733
10734             if (TREE_CODE (sname) == IDENTIFIER_NODE)
10735               {
10736                 /* This is the `standard' use of the scoping operator:
10737                    basetype :: member .  */
10738
10739                 if (ctype == current_class_type)
10740                   {
10741                     /* class A {
10742                          void A::f ();
10743                        };
10744
10745                        Is this ill-formed?  */
10746
10747                     if (pedantic)
10748                       cp_pedwarn ("extra qualification `%T::' on member `%s' ignored",
10749                                   ctype, name);
10750                   }
10751                 else if (TREE_CODE (type) == FUNCTION_TYPE)
10752                   {
10753                     if (current_class_type == NULL_TREE
10754                         || friendp)
10755                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10756                                                       TYPE_ARG_TYPES (type));
10757                     else
10758                       {
10759                         cp_error ("cannot declare member function `%T::%s' within `%T'",
10760                                   ctype, name, current_class_type);
10761                         return void_type_node;
10762                       }
10763                   }
10764                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
10765                          || COMPLETE_TYPE_P (complete_type (ctype)))
10766                   {
10767                     /* Have to move this code elsewhere in this function.
10768                        this code is used for i.e., typedef int A::M; M *pm;
10769
10770                        It is?  How? jason 10/2/94 */
10771
10772                     if (current_class_type)
10773                       {
10774                         cp_error ("cannot declare member `%T::%s' within `%T'",
10775                                   ctype, name, current_class_type);
10776                         return void_type_node;
10777                       }
10778                     type = build_offset_type (ctype, type);
10779                   }
10780                 else if (uses_template_parms (ctype))
10781                   {
10782                     if (TREE_CODE (type) == FUNCTION_TYPE)
10783                       type
10784                         = build_cplus_method_type (ctype, TREE_TYPE (type),
10785                                                    TYPE_ARG_TYPES (type));
10786                   }
10787                 else
10788                   {
10789                     cp_error ("structure `%T' not yet defined", ctype);
10790                     return error_mark_node;
10791                   }
10792
10793                 declarator = sname;
10794               }
10795             else if (TREE_CODE (sname) == SCOPE_REF)
10796               my_friendly_abort (17);
10797             else
10798               {
10799               done_scoping:
10800                 declarator = TREE_OPERAND (declarator, 1);
10801                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
10802                   /* In this case, we will deal with it later.  */
10803                   ;
10804                 else
10805                   {
10806                     if (TREE_CODE (type) == FUNCTION_TYPE)
10807                       type = build_cplus_method_type (ctype, TREE_TYPE (type),
10808                                                       TYPE_ARG_TYPES (type));
10809                     else
10810                       type = build_offset_type (ctype, type);
10811                   }
10812               }
10813           }
10814           break;
10815
10816         case BIT_NOT_EXPR:
10817           declarator = TREE_OPERAND (declarator, 0);
10818           break;
10819
10820         case RECORD_TYPE:
10821         case UNION_TYPE:
10822         case ENUMERAL_TYPE:
10823           declarator = NULL_TREE;
10824           break;
10825
10826         case ERROR_MARK:
10827           declarator = NULL_TREE;
10828           break;
10829
10830         default:
10831           my_friendly_abort (158);
10832         }
10833     }
10834
10835   /* See the comment for the TREE_LIST case, above.  */
10836   if (inner_attrs)
10837     {
10838       if (! ignore_attrs)
10839         decl_attributes (type, inner_attrs, NULL_TREE);
10840       else if (attrlist)
10841         TREE_VALUE (attrlist) = chainon (inner_attrs, TREE_VALUE (attrlist));
10842       else
10843         attrlist = build_decl_list (NULL_TREE, inner_attrs);
10844     }
10845
10846   /* Now TYPE has the actual type.  */
10847
10848   if (explicitp == 1 || (explicitp && friendp))
10849     {
10850       /* [dcl.fct.spec] The explicit specifier shall only be used in
10851          declarations of constructors within a class definition.  */
10852       error ("only declarations of constructors can be `explicit'");
10853       explicitp = 0;
10854     }
10855
10856   if (RIDBIT_SETP (RID_MUTABLE, specbits))
10857     {
10858       if (current_class_name == NULL_TREE || decl_context == PARM || friendp)
10859         {
10860           error ("non-member `%s' cannot be declared `mutable'", name);
10861           RIDBIT_RESET (RID_MUTABLE, specbits);
10862         }
10863       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
10864         {
10865           error ("non-object member `%s' cannot be declared `mutable'", name);
10866           RIDBIT_RESET (RID_MUTABLE, specbits);
10867         }
10868       else if (TREE_CODE (type) == FUNCTION_TYPE
10869                || TREE_CODE (type) == METHOD_TYPE)
10870         {
10871           error ("function `%s' cannot be declared `mutable'", name);
10872           RIDBIT_RESET (RID_MUTABLE, specbits);
10873         }
10874       else if (staticp)
10875         {
10876           error ("static `%s' cannot be declared `mutable'", name);
10877           RIDBIT_RESET (RID_MUTABLE, specbits);
10878         }
10879       else if (type_quals & TYPE_QUAL_CONST)
10880         {
10881           error ("const `%s' cannot be declared `mutable'", name);
10882           RIDBIT_RESET (RID_MUTABLE, specbits);
10883         }
10884     }
10885
10886   if (declarator == NULL_TREE
10887       || TREE_CODE (declarator) == IDENTIFIER_NODE
10888       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
10889           && (TREE_CODE (type) == FUNCTION_TYPE
10890               || TREE_CODE (type) == METHOD_TYPE)))
10891     /* OK */;
10892   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
10893     {
10894       cp_error ("template-id `%D' used as a declarator", declarator);
10895       declarator = dname;
10896     }
10897   else
10898     /* Unexpected declarator format.  */
10899     my_friendly_abort (990210);
10900
10901   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10902
10903   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
10904     {
10905       tree decl;
10906
10907       /* Note that the grammar rejects storage classes
10908          in typenames, fields or parameters.  */
10909       if (current_lang_name == lang_name_java)
10910         TYPE_FOR_JAVA (type) = 1;
10911
10912       if (decl_context == FIELD)
10913         {
10914           if (declarator == constructor_name (current_class_type))
10915             cp_pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
10916                         declarator);
10917           decl = build_lang_decl (TYPE_DECL, declarator, type);
10918         }
10919       else
10920         decl = build_decl (TYPE_DECL, declarator, type);
10921
10922       /* If the user declares "typedef struct {...} foo" then the
10923          struct will have an anonymous name.  Fill that name in now.
10924          Nothing can refer to it, so nothing needs know about the name
10925          change.  */
10926       if (type != error_mark_node
10927           && declarator
10928           && TYPE_NAME (type)
10929           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10930           && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type))
10931           && CP_TYPE_QUALS (type) == TYPE_UNQUALIFIED)
10932         {
10933           tree oldname = TYPE_NAME (type);
10934           tree t;
10935
10936           /* Replace the anonymous name with the real name everywhere.  */
10937           lookup_tag_reverse (type, declarator);
10938           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10939             if (TYPE_NAME (t) == oldname)
10940               TYPE_NAME (t) = decl;
10941
10942           if (TYPE_LANG_SPECIFIC (type))
10943             TYPE_WAS_ANONYMOUS (type) = 1;
10944
10945           /* If this is a typedef within a template class, the nested
10946              type is a (non-primary) template.  The name for the
10947              template needs updating as well.  */
10948           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10949             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10950               = TYPE_IDENTIFIER (type);
10951
10952           /* XXX Temporarily set the scope.
10953              When returning, start_decl expects it as NULL_TREE,
10954              and will then then set it using pushdecl. */
10955           my_friendly_assert (DECL_CONTEXT (decl) == NULL_TREE, 980404);
10956           if (current_class_type)
10957             DECL_CONTEXT (decl) = current_class_type;
10958           else
10959             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10960
10961           DECL_ASSEMBLER_NAME (decl) = DECL_NAME (decl);
10962           DECL_ASSEMBLER_NAME (decl)
10963             = get_identifier (build_overload_name (type, 1, 1));
10964           DECL_CONTEXT (decl) = NULL_TREE;
10965
10966           /* FIXME remangle member functions; member functions of a
10967              type with external linkage have external linkage.  */
10968         }
10969
10970       if (TREE_CODE (type) == OFFSET_TYPE || TREE_CODE (type) == METHOD_TYPE)
10971         {
10972           cp_error_at ("typedef name may not be class-qualified", decl);
10973           return NULL_TREE;
10974         }
10975       else if (quals)
10976         {
10977           if (ctype == NULL_TREE)
10978             {
10979               if (TREE_CODE (type) != METHOD_TYPE)
10980                 cp_error_at ("invalid type qualifier for non-member function type", decl);
10981               else
10982                 ctype = TYPE_METHOD_BASETYPE (type);
10983             }
10984           if (ctype != NULL_TREE)
10985             grok_method_quals (ctype, decl, quals);
10986         }
10987
10988       if (RIDBIT_SETP (RID_SIGNED, specbits)
10989           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10990         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10991
10992       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
10993                       inlinep, friendp, raises != NULL_TREE);
10994
10995       if (initialized)
10996         error ("typedef declaration includes an initializer");
10997
10998       return decl;
10999     }
11000
11001   /* Detect the case of an array type of unspecified size
11002      which came, as such, direct from a typedef name.
11003      We must copy the type, so that each identifier gets
11004      a distinct type, so that each identifier's size can be
11005      controlled separately by its own initializer.  */
11006
11007   if (type == typedef_type && TREE_CODE (type) == ARRAY_TYPE
11008       && TYPE_DOMAIN (type) == NULL_TREE)
11009     {
11010       type = build_cplus_array_type (TREE_TYPE (type), TYPE_DOMAIN (type));
11011     }
11012
11013   /* If this is a type name (such as, in a cast or sizeof),
11014      compute the type and return it now.  */
11015
11016   if (decl_context == TYPENAME)
11017     {
11018       /* Note that the grammar rejects storage classes
11019          in typenames, fields or parameters.  */
11020       if (type_quals != TYPE_UNQUALIFIED)
11021         type_quals = TYPE_UNQUALIFIED;
11022
11023       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11024       if (friendp)
11025         {
11026           if (type_quals != TYPE_UNQUALIFIED)
11027             {
11028               cp_error ("type qualifiers specified for friend class declaration");
11029               type_quals = TYPE_UNQUALIFIED;
11030             }
11031           if (inlinep)
11032             {
11033               cp_error ("`inline' specified for friend class declaration");
11034               inlinep = 0;
11035             }
11036
11037           /* Only try to do this stuff if we didn't already give up.  */
11038           if (type != integer_type_node)
11039             {
11040               /* A friendly class?  */
11041               if (current_class_type)
11042                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type));
11043               else
11044                 error ("trying to make class `%s' a friend of global scope",
11045                        TYPE_NAME_STRING (type));
11046               type = void_type_node;
11047             }
11048         }
11049       else if (quals)
11050         {
11051           if (ctype == NULL_TREE)
11052             {
11053               if (TREE_CODE (type) != METHOD_TYPE)
11054                 cp_error ("invalid qualifiers on non-member function type");
11055               else
11056                 ctype = TYPE_METHOD_BASETYPE (type);
11057             }
11058           if (ctype)
11059             {
11060               tree dummy = build_decl (TYPE_DECL, declarator, type);
11061               grok_method_quals (ctype, dummy, quals);
11062               type = TREE_TYPE (dummy);
11063             }
11064         }
11065
11066       return type;
11067     }
11068   else if (declarator == NULL_TREE && decl_context != PARM
11069            && decl_context != CATCHPARM
11070            && TREE_CODE (type) != UNION_TYPE
11071            && ! bitfield)
11072     {
11073       cp_error ("abstract declarator `%T' used as declaration", type);
11074       declarator = make_anon_name ();
11075     }
11076
11077   /* `void' at top level (not within pointer)
11078      is allowed only in typedefs or type names.
11079      We don't complain about parms either, but that is because
11080      a better error message can be made later.  */
11081
11082   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
11083     {
11084       if (! declarator)
11085         error ("unnamed variable or field declared void");
11086       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
11087         {
11088           if (IDENTIFIER_OPNAME_P (declarator))
11089             my_friendly_abort (356);
11090           else
11091             error ("variable or field `%s' declared void", name);
11092         }
11093       else
11094         error ("variable or field declared void");
11095       type = integer_type_node;
11096     }
11097
11098   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11099      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11100
11101   if (decl_context == PARM || decl_context == CATCHPARM)
11102     {
11103       if (ctype || in_namespace)
11104         error ("cannot use `::' in parameter declaration");
11105
11106       /* A parameter declared as an array of T is really a pointer to T.
11107          One declared as a function is really a pointer to a function.
11108          One declared as a member is really a pointer to member.  */
11109
11110       if (TREE_CODE (type) == ARRAY_TYPE)
11111         {
11112           /* Transfer const-ness of array into that of type pointed to.  */
11113           type = build_pointer_type (TREE_TYPE (type));
11114           type_quals = TYPE_UNQUALIFIED;
11115         }
11116       else if (TREE_CODE (type) == FUNCTION_TYPE)
11117         type = build_pointer_type (type);
11118       else if (TREE_CODE (type) == OFFSET_TYPE)
11119         type = build_pointer_type (type);
11120       else if (TREE_CODE (type) == VOID_TYPE && declarator)
11121         {
11122           error ("declaration of `%s' as void", name);
11123           return NULL_TREE;
11124         }
11125     }
11126
11127   {
11128     register tree decl;
11129
11130     if (decl_context == PARM)
11131       {
11132         decl = build_decl (PARM_DECL, declarator, type);
11133
11134         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
11135                         inlinep, friendp, raises != NULL_TREE);
11136
11137         /* Compute the type actually passed in the parmlist,
11138            for the case where there is no prototype.
11139            (For example, shorts and chars are passed as ints.)
11140            When there is a prototype, this is overridden later.  */
11141
11142         DECL_ARG_TYPE (decl) = type_promotes_to (type);
11143       }
11144     else if (decl_context == FIELD)
11145       {
11146         if (type == error_mark_node)
11147           {
11148             /* Happens when declaring arrays of sizes which
11149                are error_mark_node, for example.  */
11150             decl = NULL_TREE;
11151           }
11152         else if (in_namespace && !friendp)
11153           {
11154             /* Something like struct S { int N::j; };  */
11155             cp_error ("invalid use of `::'");
11156             decl = NULL_TREE;
11157           }
11158         else if (TREE_CODE (type) == FUNCTION_TYPE)
11159           {
11160             int publicp = 0;
11161             tree function_context;
11162
11163             /* We catch the others as conflicts with the builtin
11164                typedefs.  */
11165             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
11166               {
11167                 cp_error ("function `%D' cannot be declared friend",
11168                           declarator);
11169                 friendp = 0;
11170               }
11171
11172             if (friendp == 0)
11173               {
11174                 if (ctype == NULL_TREE)
11175                   ctype = current_class_type;
11176
11177                 if (ctype == NULL_TREE)
11178                   {
11179                     cp_error ("can't make `%D' into a method -- not in a class",
11180                               declarator);
11181                     return void_type_node;
11182                   }
11183
11184                 /* ``A union may [ ... ] not [ have ] virtual functions.''
11185                    ARM 9.5 */
11186                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11187                   {
11188                     cp_error ("function `%D' declared virtual inside a union",
11189                               declarator);
11190                     return void_type_node;
11191                   }
11192
11193                 if (declarator == ansi_opname[(int) NEW_EXPR]
11194                     || declarator == ansi_opname[(int) VEC_NEW_EXPR]
11195                     || declarator == ansi_opname[(int) DELETE_EXPR]
11196                     || declarator == ansi_opname[(int) VEC_DELETE_EXPR])
11197                   {
11198                     if (virtualp)
11199                       {
11200                         cp_error ("`%D' cannot be declared virtual, since it is always static",
11201                                   declarator);
11202                         virtualp = 0;
11203                       }
11204                   }
11205                 else if (staticp < 2)
11206                   type = build_cplus_method_type (ctype, TREE_TYPE (type),
11207                                                   TYPE_ARG_TYPES (type));
11208               }
11209
11210             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
11211             function_context = (ctype != NULL_TREE) ?
11212               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11213             publicp = (! friendp || ! staticp)
11214               && function_context == NULL_TREE;
11215             decl = grokfndecl (ctype, type,
11216                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
11217                                ? declarator : dname,
11218                                declarator,
11219                                virtualp, flags, quals, raises,
11220                                friendp ? -1 : 0, friendp, publicp, inlinep,
11221                                funcdef_flag, template_count, in_namespace);
11222             if (decl == NULL_TREE)
11223               return decl;
11224 #if 0
11225             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
11226             /* The decl and setting of decl_machine_attr is also turned off.  */
11227             decl = build_decl_attribute_variant (decl, decl_machine_attr);
11228 #endif
11229
11230             /* [class.conv.ctor]
11231
11232                A constructor declared without the function-specifier
11233                explicit that can be called with a single parameter
11234                specifies a conversion from the type of its first
11235                parameter to the type of its class.  Such a constructor
11236                is called a converting constructor.  */
11237             if (explicitp == 2)
11238               DECL_NONCONVERTING_P (decl) = 1;
11239             else if (DECL_CONSTRUCTOR_P (decl))
11240               {
11241                 /* The constructor can be called with exactly one
11242                    parameter if there is at least one parameter, and
11243                    any subsequent parameters have default arguments.
11244                    We don't look at the first parameter, which is
11245                    really just the `this' parameter for the new
11246                    object.  */
11247                 tree arg_types =
11248                   TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)));
11249
11250                 /* Skip the `in_chrg' argument too, if present.  */
11251                 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
11252                   arg_types = TREE_CHAIN (arg_types);
11253
11254                 if (arg_types == void_list_node
11255                     || (arg_types
11256                         && TREE_CHAIN (arg_types)
11257                         && TREE_CHAIN (arg_types) != void_list_node
11258                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
11259                   DECL_NONCONVERTING_P (decl) = 1;
11260               }
11261           }
11262         else if (TREE_CODE (type) == METHOD_TYPE)
11263           {
11264             /* We only get here for friend declarations of
11265                members of other classes.  */
11266             /* All method decls are public, so tell grokfndecl to set
11267                TREE_PUBLIC, also.  */
11268             decl = grokfndecl (ctype, type, declarator, declarator,
11269                                virtualp, flags, quals, raises,
11270                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
11271                                template_count, in_namespace);
11272             if (decl == NULL_TREE)
11273               return NULL_TREE;
11274           }
11275         else if (!staticp && ! processing_template_decl
11276                  && !COMPLETE_TYPE_P (complete_type (type))
11277                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
11278           {
11279             if (declarator)
11280               cp_error ("field `%D' has incomplete type", declarator);
11281             else
11282               cp_error ("name `%T' has incomplete type", type);
11283
11284             /* If we're instantiating a template, tell them which
11285                instantiation made the field's type be incomplete.  */
11286             if (current_class_type
11287                 && TYPE_NAME (current_class_type)
11288                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
11289                 && declspecs && TREE_VALUE (declspecs)
11290                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
11291               cp_error ("  in instantiation of template `%T'",
11292                         current_class_type);
11293
11294             type = error_mark_node;
11295             decl = NULL_TREE;
11296           }
11297         else
11298           {
11299             if (friendp)
11300               {
11301                 error ("`%s' is neither function nor member function; cannot be declared friend",
11302                        IDENTIFIER_POINTER (declarator));
11303                 friendp = 0;
11304               }
11305             decl = NULL_TREE;
11306           }
11307
11308         if (friendp)
11309           {
11310             /* Friends are treated specially.  */
11311             if (ctype == current_class_type)
11312               warning ("member functions are implicitly friends of their class");
11313             else
11314               {
11315                 tree t = NULL_TREE;
11316                 if (decl && DECL_NAME (decl))
11317                   {
11318                     if (template_class_depth (current_class_type) == 0)
11319                       {
11320                         decl
11321                           = check_explicit_specialization
11322                           (declarator, decl,
11323                            template_count, 2 * (funcdef_flag != 0) + 4);
11324                         if (decl == error_mark_node)
11325                           return error_mark_node;
11326                       }
11327
11328                     t = do_friend (ctype, declarator, decl,
11329                                    last_function_parms, attrlist, flags, quals,
11330                                    funcdef_flag);
11331                   }
11332                 if (t && funcdef_flag)
11333                   return t;
11334
11335                 return void_type_node;
11336               }
11337           }
11338
11339         /* Structure field.  It may not be a function, except for C++ */
11340
11341         if (decl == NULL_TREE)
11342           {
11343             if (initialized)
11344               {
11345                 if (!staticp)
11346                   {
11347                     /* An attempt is being made to initialize a non-static
11348                        member.  But, from [class.mem]:
11349
11350                        4 A member-declarator can contain a
11351                        constant-initializer only if it declares a static
11352                        member (_class.static_) of integral or enumeration
11353                        type, see _class.static.data_.
11354
11355                        This used to be relatively common practice, but
11356                        the rest of the compiler does not correctly
11357                        handle the initialization unless the member is
11358                        static so we make it static below.  */
11359                     cp_pedwarn ("ISO C++ forbids initialization of member `%D'",
11360                                 declarator);
11361                     cp_pedwarn ("making `%D' static", declarator);
11362                     staticp = 1;
11363                   }
11364
11365                 if (uses_template_parms (type))
11366                   /* We'll check at instantiation time.  */
11367                   ;
11368                 else if (check_static_variable_definition (declarator,
11369                                                            type))
11370                   /* If we just return the declaration, crashes
11371                      will sometimes occur.  We therefore return
11372                      void_type_node, as if this was a friend
11373                      declaration, to cause callers to completely
11374                      ignore this declaration.  */
11375                   return void_type_node;
11376               }
11377
11378             /* 9.2p13 [class.mem] */
11379             if (declarator == constructor_name (current_class_type)
11380                 /* Divergence from the standard:  In extern "C", we
11381                    allow non-static data members here, because C does
11382                    and /usr/include/netinet/in.h uses that.  */
11383                 && (staticp || ! in_system_header))
11384               cp_pedwarn ("ISO C++ forbids data member `%D' with same name as enclosing class",
11385                           declarator);
11386
11387             if (staticp)
11388               {
11389                 /* C++ allows static class members.  All other work
11390                    for this is done by grokfield.  */
11391                 decl = build_lang_decl (VAR_DECL, declarator, type);
11392                 TREE_STATIC (decl) = 1;
11393                 /* In class context, 'static' means public access.  */
11394                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
11395               }
11396             else
11397               {
11398                 decl = build_lang_decl (FIELD_DECL, declarator, type);
11399                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
11400                   {
11401                     DECL_MUTABLE_P (decl) = 1;
11402                     RIDBIT_RESET (RID_MUTABLE, specbits);
11403                   }
11404               }
11405
11406             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
11407                             inlinep, friendp, raises != NULL_TREE);
11408           }
11409       }
11410     else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
11411       {
11412         tree original_name;
11413         int publicp = 0;
11414
11415         if (! declarator)
11416           return NULL_TREE;
11417
11418         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
11419           original_name = dname;
11420         else
11421           original_name = declarator;
11422
11423         if (RIDBIT_SETP (RID_AUTO, specbits))
11424           error ("storage class `auto' invalid for function `%s'", name);
11425         else if (RIDBIT_SETP (RID_REGISTER, specbits))
11426           error ("storage class `register' invalid for function `%s'", name);
11427
11428         /* Function declaration not at top level.
11429            Storage classes other than `extern' are not allowed
11430            and `extern' makes no difference.  */
11431         if (! toplevel_bindings_p ()
11432             && (RIDBIT_SETP (RID_STATIC, specbits)
11433                 || RIDBIT_SETP (RID_INLINE, specbits))
11434             && pedantic)
11435           {
11436             if (RIDBIT_SETP (RID_STATIC, specbits))
11437               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
11438             else
11439               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
11440           }
11441
11442         if (ctype == NULL_TREE)
11443           {
11444             if (virtualp)
11445               {
11446                 error ("virtual non-class function `%s'", name);
11447                 virtualp = 0;
11448               }
11449           }
11450         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2)
11451           type = build_cplus_method_type (ctype, TREE_TYPE (type),
11452                                           TYPE_ARG_TYPES (type));
11453
11454         /* Record presence of `static'.  */
11455         publicp = (ctype != NULL_TREE
11456                    || RIDBIT_SETP (RID_EXTERN, specbits)
11457                    || !RIDBIT_SETP (RID_STATIC, specbits));
11458
11459         decl = grokfndecl (ctype, type, original_name, declarator,
11460                            virtualp, flags, quals, raises,
11461                            1, friendp,
11462                            publicp, inlinep, funcdef_flag,
11463                            template_count, in_namespace);
11464         if (decl == NULL_TREE)
11465           return NULL_TREE;
11466
11467         if (staticp == 1)
11468           {
11469             int illegal_static = 0;
11470
11471             /* Don't allow a static member function in a class, and forbid
11472                declaring main to be static.  */
11473             if (TREE_CODE (type) == METHOD_TYPE)
11474               {
11475                 cp_pedwarn ("cannot declare member function `%D' to have static linkage", decl);
11476                 illegal_static = 1;
11477               }
11478             else if (current_function_decl)
11479               {
11480                 /* FIXME need arm citation */
11481                 error ("cannot declare static function inside another function");
11482                 illegal_static = 1;
11483               }
11484
11485             if (illegal_static)
11486               {
11487                 staticp = 0;
11488                 RIDBIT_RESET (RID_STATIC, specbits);
11489               }
11490           }
11491       }
11492     else
11493       {
11494         /* It's a variable.  */
11495
11496         /* An uninitialized decl with `extern' is a reference.  */
11497         decl = grokvardecl (type, declarator, &specbits,
11498                             initialized,
11499                             (type_quals & TYPE_QUAL_CONST) != 0,
11500                             in_namespace);
11501         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
11502                         inlinep, friendp, raises != NULL_TREE);
11503
11504         if (ctype)
11505           {
11506             DECL_CONTEXT (decl) = ctype;
11507             if (staticp == 1)
11508               {
11509                 cp_pedwarn ("static member `%D' re-declared as static", decl);
11510                 staticp = 0;
11511                 RIDBIT_RESET (RID_STATIC, specbits);
11512               }
11513             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
11514               {
11515                 cp_error ("static member `%D' declared `register'", decl);
11516                 RIDBIT_RESET (RID_REGISTER, specbits);
11517               }
11518             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
11519               {
11520                 cp_pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
11521                             decl);
11522                 RIDBIT_RESET (RID_EXTERN, specbits);
11523               }
11524           }
11525       }
11526
11527     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
11528
11529     /* Record `register' declaration for warnings on &
11530        and in case doing stupid register allocation.  */
11531
11532     if (RIDBIT_SETP (RID_REGISTER, specbits))
11533       DECL_REGISTER (decl) = 1;
11534
11535     if (RIDBIT_SETP (RID_EXTERN, specbits))
11536       DECL_THIS_EXTERN (decl) = 1;
11537
11538     if (RIDBIT_SETP (RID_STATIC, specbits))
11539       DECL_THIS_STATIC (decl) = 1;
11540
11541     /* Record constancy and volatility.  There's no need to do this
11542        when processing a template; we'll do this for the instantiated
11543        declaration based on the type of DECL.  */
11544     if (!processing_template_decl)
11545       c_apply_type_quals_to_decl (type_quals, decl);
11546
11547     return decl;
11548   }
11549 }
11550 \f
11551 /* Tell if a parmlist/exprlist looks like an exprlist or a parmlist.
11552    An empty exprlist is a parmlist.  An exprlist which
11553    contains only identifiers at the global level
11554    is a parmlist.  Otherwise, it is an exprlist.  */
11555
11556 int
11557 parmlist_is_exprlist (exprs)
11558      tree exprs;
11559 {
11560   if (exprs == NULL_TREE || TREE_PARMLIST (exprs))
11561     return 0;
11562
11563   if (toplevel_bindings_p ())
11564     {
11565       /* At the global level, if these are all identifiers,
11566          then it is a parmlist.  */
11567       while (exprs)
11568         {
11569           if (TREE_CODE (TREE_VALUE (exprs)) != IDENTIFIER_NODE)
11570             return 1;
11571           exprs = TREE_CHAIN (exprs);
11572         }
11573       return 0;
11574     }
11575   return 1;
11576 }
11577
11578 /* Subroutine of start_function.  Ensure that each of the parameter
11579    types (as listed in PARMS) is complete, as is required for a
11580    function definition.  */
11581
11582 static void
11583 require_complete_types_for_parms (parms)
11584      tree parms;
11585 {
11586   for (; parms; parms = TREE_CHAIN (parms))
11587     {
11588       tree type = TREE_TYPE (parms);
11589
11590       /* Try to complete the TYPE.  */
11591       type = complete_type (type);
11592
11593       if (type == error_mark_node)
11594         continue;
11595
11596       if (!COMPLETE_TYPE_P (type))
11597         {
11598           if (DECL_NAME (parms))
11599             error ("parameter `%s' has incomplete type",
11600                    IDENTIFIER_POINTER (DECL_NAME (parms)));
11601           else
11602             error ("parameter has incomplete type");
11603           TREE_TYPE (parms) = error_mark_node;
11604         }
11605       else
11606         layout_decl (parms, 0);
11607     }
11608 }
11609
11610 /* Returns non-zero if T is a local variable.  */
11611
11612 int
11613 local_variable_p (t)
11614      tree t;
11615 {
11616   if ((TREE_CODE (t) == VAR_DECL
11617        /* A VAR_DECL with a context that is a _TYPE is a static data
11618           member.  */
11619        && !TYPE_P (CP_DECL_CONTEXT (t))
11620        /* Any other non-local variable must be at namespace scope.  */
11621        && !DECL_NAMESPACE_SCOPE_P (t))
11622       || (TREE_CODE (t) == PARM_DECL))
11623     return 1;
11624
11625   return 0;
11626 }
11627
11628 /* Returns non-zero if T is an automatic local variable or a label.
11629    (These are the declarations that need to be remapped when the code
11630    containing them is duplicated.)  */
11631
11632 int
11633 nonstatic_local_decl_p (t)
11634      tree t;
11635 {
11636   return ((local_variable_p (t) && !TREE_STATIC (t))
11637           || TREE_CODE (t) == LABEL_DECL
11638           || TREE_CODE (t) == RESULT_DECL);
11639 }
11640
11641 /* Like local_variable_p, but suitable for use as a tree-walking
11642    function.  */
11643
11644 static tree
11645 local_variable_p_walkfn (tp, walk_subtrees, data)
11646      tree *tp;
11647      int *walk_subtrees ATTRIBUTE_UNUSED;
11648      void *data ATTRIBUTE_UNUSED;
11649 {
11650   return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
11651           ? *tp : NULL_TREE);
11652 }
11653
11654 /* Check that ARG, which is a default-argument expression for a
11655    parameter DECL, is legal.  Returns ARG, or ERROR_MARK_NODE, if
11656    something goes wrong.  DECL may also be a _TYPE node, rather than a
11657    DECL, if there is no DECL available.  */
11658
11659 tree
11660 check_default_argument (decl, arg)
11661      tree decl;
11662      tree arg;
11663 {
11664   tree var;
11665   tree decl_type;
11666
11667   if (TREE_CODE (arg) == DEFAULT_ARG)
11668     /* We get a DEFAULT_ARG when looking at an in-class declaration
11669        with a default argument.  Ignore the argument for now; we'll
11670        deal with it after the class is complete.  */
11671     return arg;
11672
11673   if (processing_template_decl || uses_template_parms (arg))
11674     /* We don't do anything checking until instantiation-time.  Note
11675        that there may be uninstantiated arguments even for an
11676        instantiated function, since default arguments are not
11677        instantiated until they are needed.  */
11678     return arg;
11679
11680   if (TYPE_P (decl))
11681     {
11682       decl_type = decl;
11683       decl = NULL_TREE;
11684     }
11685   else
11686     decl_type = TREE_TYPE (decl);
11687
11688   if (arg == error_mark_node
11689       || decl == error_mark_node
11690       || TREE_TYPE (arg) == error_mark_node
11691       || decl_type == error_mark_node)
11692     /* Something already went wrong.  There's no need to check
11693        further.  */
11694     return error_mark_node;
11695
11696   /* [dcl.fct.default]
11697
11698      A default argument expression is implicitly converted to the
11699      parameter type.  */
11700   if (!TREE_TYPE (arg)
11701       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
11702     {
11703       if (decl)
11704         cp_error ("default argument for `%#D' has type `%T'",
11705                   decl, TREE_TYPE (arg));
11706       else
11707         cp_error ("default argument for parameter of type `%T' has type `%T'",
11708                   decl_type, TREE_TYPE (arg));
11709
11710       return error_mark_node;
11711     }
11712
11713   /* [dcl.fct.default]
11714
11715      Local variables shall not be used in default argument
11716      expressions.
11717
11718      The keyword `this' shall not be used in a default argument of a
11719      member function.  */
11720   var = walk_tree (&arg, local_variable_p_walkfn, NULL);
11721   if (var)
11722     {
11723       cp_error ("default argument `%E' uses local variable `%D'",
11724                 arg, var);
11725       return error_mark_node;
11726     }
11727
11728   /* All is well.  */
11729   return arg;
11730 }
11731
11732 /* Decode the list of parameter types for a function type.
11733    Given the list of things declared inside the parens,
11734    return a list of types.
11735
11736    The list we receive can have three kinds of elements:
11737    an IDENTIFIER_NODE for names given without types,
11738    a TREE_LIST node for arguments given as typespecs or names with typespecs,
11739    or void_type_node, to mark the end of an argument list
11740    when additional arguments are not permitted (... was not used).
11741
11742    FUNCDEF_FLAG is nonzero for a function definition, 0 for
11743    a mere declaration.  A nonempty identifier-list gets an error message
11744    when FUNCDEF_FLAG is zero.
11745    If FUNCDEF_FLAG is 1, then parameter types must be complete.
11746    If FUNCDEF_FLAG is -1, then parameter types may be incomplete.
11747
11748    If all elements of the input list contain types,
11749    we return a list of the types.
11750    If all elements contain no type (except perhaps a void_type_node
11751    at the end), we return a null list.
11752    If some have types and some do not, it is an error, and we
11753    return a null list.
11754
11755    Also set last_function_parms to either
11756    a list of names (IDENTIFIER_NODEs) or a chain of PARM_DECLs.
11757    A list of names is converted to a chain of PARM_DECLs
11758    by store_parm_decls so that ultimately it is always a chain of decls.
11759
11760    Note that in C++, parameters can take default values.  These default
11761    values are in the TREE_PURPOSE field of the TREE_LIST.  It is
11762    an error to specify default values which are followed by parameters
11763    that have no default values, or an ELLIPSES.  For simplicities sake,
11764    only parameters which are specified with their types can take on
11765    default values.  */
11766
11767 static tree
11768 grokparms (first_parm, funcdef_flag)
11769      tree first_parm;
11770      int funcdef_flag;
11771 {
11772   tree result = NULL_TREE;
11773   tree decls = NULL_TREE;
11774
11775   if (first_parm != NULL_TREE
11776       && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
11777     {
11778       if (! funcdef_flag)
11779         pedwarn ("parameter names (without types) in function declaration");
11780       last_function_parms = first_parm;
11781       return NULL_TREE;
11782     }
11783   else if (first_parm != NULL_TREE
11784            && TREE_CODE (TREE_VALUE (first_parm)) != TREE_LIST
11785            && TREE_CODE (TREE_VALUE (first_parm)) != VOID_TYPE)
11786     my_friendly_abort (145);
11787   else
11788     {
11789       /* Types were specified.  This is a list of declarators
11790          each represented as a TREE_LIST node.  */
11791       register tree parm, chain;
11792       int any_init = 0, any_error = 0;
11793
11794       if (first_parm != NULL_TREE)
11795         {
11796           tree last_result = NULL_TREE;
11797           tree last_decl = NULL_TREE;
11798
11799           for (parm = first_parm; parm != NULL_TREE; parm = chain)
11800             {
11801               tree type = NULL_TREE, list_node = parm;
11802               register tree decl = TREE_VALUE (parm);
11803               tree init = TREE_PURPOSE (parm);
11804
11805               chain = TREE_CHAIN (parm);
11806               /* @@ weak defense against parse errors.  */
11807               if (TREE_CODE (decl) != VOID_TYPE
11808                   && TREE_CODE (decl) != TREE_LIST)
11809                 {
11810                   /* Give various messages as the need arises.  */
11811                   if (TREE_CODE (decl) == STRING_CST)
11812                     cp_error ("invalid string constant `%E'", decl);
11813                   else if (TREE_CODE (decl) == INTEGER_CST)
11814                     error ("invalid integer constant in parameter list, did you forget to give parameter name?");
11815                   continue;
11816                 }
11817
11818               if (TREE_CODE (decl) != VOID_TYPE)
11819                 {
11820                   decl = grokdeclarator (TREE_VALUE (decl),
11821                                          TREE_PURPOSE (decl),
11822                                          PARM, init != NULL_TREE,
11823                                          NULL_TREE);
11824                   if (! decl || TREE_TYPE (decl) == error_mark_node)
11825                     continue;
11826
11827                   /* Top-level qualifiers on the parameters are
11828                      ignored for function types.  */
11829                   type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
11830
11831                   if (TREE_CODE (type) == VOID_TYPE)
11832                     decl = void_type_node;
11833                   else if (TREE_CODE (type) == METHOD_TYPE)
11834                     {
11835                       if (DECL_NAME (decl))
11836                         /* Cannot use the decl here because
11837                            we don't have DECL_CONTEXT set up yet.  */
11838                         cp_error ("parameter `%D' invalidly declared method type",
11839                                   DECL_NAME (decl));
11840                       else
11841                         error ("parameter invalidly declared method type");
11842                       type = build_pointer_type (type);
11843                       TREE_TYPE (decl) = type;
11844                     }
11845                   else if (TREE_CODE (type) == OFFSET_TYPE)
11846                     {
11847                       if (DECL_NAME (decl))
11848                         cp_error ("parameter `%D' invalidly declared offset type",
11849                                   DECL_NAME (decl));
11850                       else
11851                         error ("parameter invalidly declared offset type");
11852                       type = build_pointer_type (type);
11853                       TREE_TYPE (decl) = type;
11854                     }
11855                   else if (abstract_virtuals_error (decl, type))
11856                     any_error = 1;  /* Seems like a good idea. */
11857                   else if (POINTER_TYPE_P (type))
11858                     {
11859                       tree t = type;
11860                       while (POINTER_TYPE_P (t)
11861                              || (TREE_CODE (t) == ARRAY_TYPE
11862                                  && TYPE_DOMAIN (t) != NULL_TREE))
11863                         t = TREE_TYPE (t);
11864                       if (TREE_CODE (t) == ARRAY_TYPE)
11865                         cp_error ("parameter type `%T' includes %s to array of unknown bound",
11866                                   type,
11867                                   TYPE_PTR_P (type) ? "pointer" : "reference");
11868                     }
11869                 }
11870
11871               if (TREE_CODE (decl) == VOID_TYPE)
11872                 {
11873                   if (result == NULL_TREE)
11874                     {
11875                       result = void_list_node;
11876                       last_result = result;
11877                     }
11878                   else
11879                     {
11880                       TREE_CHAIN (last_result) = void_list_node;
11881                       last_result = void_list_node;
11882                     }
11883                   if (chain
11884                       && (chain != void_list_node || TREE_CHAIN (chain)))
11885                     error ("`void' in parameter list must be entire list");
11886                   break;
11887                 }
11888
11889               /* Since there is a prototype, args are passed in their own types.  */
11890               DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
11891               if (PROMOTE_PROTOTYPES
11892                   && (TREE_CODE (type) == INTEGER_TYPE
11893                       || TREE_CODE (type) == ENUMERAL_TYPE)
11894                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
11895                 DECL_ARG_TYPE (decl) = integer_type_node;
11896               if (!any_error && init)
11897                 {
11898                   any_init++;
11899                   init = check_default_argument (decl, init);
11900                 }
11901               else
11902                 init = NULL_TREE;
11903
11904               if (decls == NULL_TREE)
11905                 {
11906                   decls = decl;
11907                   last_decl = decls;
11908                 }
11909               else
11910                 {
11911                   TREE_CHAIN (last_decl) = decl;
11912                   last_decl = decl;
11913                 }
11914               list_node = tree_cons (init, type, NULL_TREE);
11915               if (result == NULL_TREE)
11916                 {
11917                   result = list_node;
11918                   last_result = result;
11919                 }
11920               else
11921                 {
11922                   TREE_CHAIN (last_result) = list_node;
11923                   last_result = list_node;
11924                 }
11925             }
11926           if (last_result)
11927             TREE_CHAIN (last_result) = NULL_TREE;
11928           /* If there are no parameters, and the function does not end
11929              with `...', then last_decl will be NULL_TREE.  */
11930           if (last_decl != NULL_TREE)
11931             TREE_CHAIN (last_decl) = NULL_TREE;
11932         }
11933     }
11934
11935   last_function_parms = decls;
11936
11937   return result;
11938 }
11939
11940 /* Called from the parser to update an element of TYPE_ARG_TYPES for some
11941    FUNCTION_TYPE with the newly parsed version of its default argument, which
11942    was previously digested as text.  See snarf_defarg et al in lex.c.  */
11943
11944 void
11945 replace_defarg (arg, init)
11946      tree arg, init;
11947 {
11948   if (! processing_template_decl
11949       && ! can_convert_arg (TREE_VALUE (arg), TREE_TYPE (init), init))
11950     cp_pedwarn ("invalid type `%T' for default argument to `%T'",
11951                 TREE_TYPE (init), TREE_VALUE (arg));
11952   TREE_PURPOSE (arg) = init;
11953 }
11954 \f
11955 /* D is a constructor or overloaded `operator='.  Returns non-zero if
11956    D's arguments allow it to be a copy constructor, or copy assignment
11957    operator.  */
11958
11959 int
11960 copy_args_p (d)
11961      tree d;
11962 {
11963   tree t;
11964
11965   if (!DECL_FUNCTION_MEMBER_P (d))
11966     return 0;
11967
11968   t = FUNCTION_ARG_CHAIN (d);
11969   if (DECL_CONSTRUCTOR_P (d) && DECL_HAS_IN_CHARGE_PARM_P (d))
11970     t = TREE_CHAIN (t);
11971   if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE
11972       && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t)))
11973           == DECL_CONTEXT (d))
11974       && (TREE_CHAIN (t) == NULL_TREE
11975           || TREE_CHAIN (t) == void_list_node
11976           || TREE_PURPOSE (TREE_CHAIN (t))))
11977     return 1;
11978   return 0;
11979 }
11980
11981 /* These memoizing functions keep track of special properties which
11982    a class may have.  `grok_ctor_properties' notices whether a class
11983    has a constructor of the form X(X&), and also complains
11984    if the class has a constructor of the form X(X).
11985    `grok_op_properties' takes notice of the various forms of
11986    operator= which are defined, as well as what sorts of type conversion
11987    may apply.  Both functions take a FUNCTION_DECL as an argument.  */
11988
11989 int
11990 grok_ctor_properties (ctype, decl)
11991      tree ctype, decl;
11992 {
11993   tree parmtypes = FUNCTION_ARG_CHAIN (decl);
11994   tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
11995
11996   /* When a type has virtual baseclasses, a magical first int argument is
11997      added to any ctor so we can tell if the class has been initialized
11998      yet.  This could screw things up in this function, so we deliberately
11999      ignore the leading int if we're in that situation.  */
12000   if (DECL_HAS_IN_CHARGE_PARM_P (decl))
12001     {
12002       my_friendly_assert (parmtypes
12003                           && TREE_VALUE (parmtypes) == integer_type_node,
12004                           980529);
12005       parmtypes = TREE_CHAIN (parmtypes);
12006       parmtype = TREE_VALUE (parmtypes);
12007     }
12008
12009   /* [class.copy]
12010
12011      A non-template constructor for class X is a copy constructor if
12012      its first parameter is of type X&, const X&, volatile X& or const
12013      volatile X&, and either there are no other parameters or else all
12014      other parameters have default arguments.  */
12015   if (TREE_CODE (parmtype) == REFERENCE_TYPE
12016       && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == ctype
12017       && (TREE_CHAIN (parmtypes) == NULL_TREE
12018           || TREE_CHAIN (parmtypes) == void_list_node
12019           || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12020       && !(DECL_TEMPLATE_INSTANTIATION (decl)
12021            && is_member_template (DECL_TI_TEMPLATE (decl))))
12022     {
12023       TYPE_HAS_INIT_REF (ctype) = 1;
12024       if (CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12025         TYPE_HAS_CONST_INIT_REF (ctype) = 1;
12026     }
12027   /* [class.copy]
12028
12029      A declaration of a constructor for a class X is ill-formed if its
12030      first parameter is of type (optionally cv-qualified) X and either
12031      there are no other parameters or else all other parameters have
12032      default arguments.
12033
12034      We *don't* complain about member template instantiations that
12035      have this form, though; they can occur as we try to decide what
12036      constructor to use during overload resolution.  Since overload
12037      resolution will never prefer such a constructor to the
12038      non-template copy constructor (which is either explicitly or
12039      implicitly defined), there's no need to worry about their
12040      existence.  Theoretically, they should never even be
12041      instantiated, but that's hard to forestall.  */
12042   else if (TYPE_MAIN_VARIANT (parmtype) == ctype
12043            && (TREE_CHAIN (parmtypes) == NULL_TREE
12044                || TREE_CHAIN (parmtypes) == void_list_node
12045                || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
12046            && !(DECL_TEMPLATE_INSTANTIATION (decl)
12047                 && is_member_template (DECL_TI_TEMPLATE (decl))))
12048     {
12049       cp_error ("invalid constructor; you probably meant `%T (const %T&)'",
12050                 ctype, ctype);
12051       SET_IDENTIFIER_ERROR_LOCUS (DECL_NAME (decl), ctype);
12052       return 0;
12053     }
12054   else if (TREE_CODE (parmtype) == VOID_TYPE
12055            || TREE_PURPOSE (parmtypes) != NULL_TREE)
12056     TYPE_HAS_DEFAULT_CONSTRUCTOR (ctype) = 1;
12057
12058   return 1;
12059 }
12060
12061 /* An operator with this name can be either unary or binary.  */
12062
12063 static int
12064 ambi_op_p (name)
12065      tree name;
12066 {
12067   return (name == ansi_opname [(int) INDIRECT_REF]
12068           || name == ansi_opname [(int) ADDR_EXPR]
12069           || name == ansi_opname [(int) NEGATE_EXPR]
12070           || name == ansi_opname[(int) POSTINCREMENT_EXPR]
12071           || name == ansi_opname[(int) POSTDECREMENT_EXPR]
12072           || name == ansi_opname [(int) CONVERT_EXPR]);
12073 }
12074
12075 /* An operator with this name can only be unary.  */
12076
12077 static int
12078 unary_op_p (name)
12079      tree name;
12080 {
12081   return (name == ansi_opname [(int) TRUTH_NOT_EXPR]
12082           || name == ansi_opname [(int) BIT_NOT_EXPR]
12083           || name == ansi_opname [(int) COMPONENT_REF]
12084           || IDENTIFIER_TYPENAME_P (name));
12085 }
12086
12087 /* Do a little sanity-checking on how they declared their operator.  */
12088
12089 void
12090 grok_op_properties (decl, virtualp, friendp)
12091      tree decl;
12092      int virtualp, friendp;
12093 {
12094   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12095   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
12096   tree name = DECL_NAME (decl);
12097
12098   if (current_class_type == NULL_TREE)
12099     friendp = 1;
12100
12101   if (! friendp)
12102     {
12103       /* [class.copy]
12104
12105          A user-declared copy assignment operator X::operator= is a
12106          non-static non-template member function of class X with
12107          exactly one parameter of type X, X&, const X&, volatile X& or
12108          const volatile X&.  */
12109       if (name == ansi_opname[(int) MODIFY_EXPR]
12110           && !(DECL_TEMPLATE_INSTANTIATION (decl)
12111                && is_member_template (DECL_TI_TEMPLATE (decl))))
12112         ;
12113       else if (name == ansi_opname[(int) CALL_EXPR])
12114         TYPE_OVERLOADS_CALL_EXPR (current_class_type) = 1;
12115       else if (name == ansi_opname[(int) ARRAY_REF])
12116         TYPE_OVERLOADS_ARRAY_REF (current_class_type) = 1;
12117       else if (name == ansi_opname[(int) COMPONENT_REF]
12118                || name == ansi_opname[(int) MEMBER_REF])
12119         TYPE_OVERLOADS_ARROW (current_class_type) = 1;
12120       else if (name == ansi_opname[(int) NEW_EXPR])
12121         TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
12122       else if (name == ansi_opname[(int) DELETE_EXPR])
12123         TYPE_GETS_DELETE (current_class_type) |= 1;
12124       else if (name == ansi_opname[(int) VEC_NEW_EXPR])
12125         TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
12126       else if (name == ansi_opname[(int) VEC_DELETE_EXPR])
12127         TYPE_GETS_DELETE (current_class_type) |= 2;
12128     }
12129
12130   if (name == ansi_opname[(int) NEW_EXPR]
12131       || name == ansi_opname[(int) VEC_NEW_EXPR])
12132     {
12133       /* When the compiler encounters the definition of A::operator new, it
12134          doesn't look at the class declaration to find out if it's static.  */
12135       if (methodp)
12136         revert_static_member_fn (decl);
12137
12138       /* Take care of function decl if we had syntax errors.  */
12139       if (argtypes == NULL_TREE)
12140         TREE_TYPE (decl)
12141           = build_function_type (ptr_type_node,
12142                                  hash_tree_chain (integer_type_node,
12143                                                   void_list_node));
12144       else
12145         TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12146     }
12147   else if (name == ansi_opname[(int) DELETE_EXPR]
12148            || name == ansi_opname[(int) VEC_DELETE_EXPR])
12149     {
12150       if (methodp)
12151         revert_static_member_fn (decl);
12152
12153       if (argtypes == NULL_TREE)
12154         TREE_TYPE (decl)
12155           = build_function_type (void_type_node,
12156                                  hash_tree_chain (ptr_type_node,
12157                                                   void_list_node));
12158       else
12159         TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12160     }
12161   else
12162     {
12163       /* An operator function must either be a non-static member function
12164          or have at least one parameter of a class, a reference to a class,
12165          an enumeration, or a reference to an enumeration.  13.4.0.6 */
12166       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12167         {
12168           if (IDENTIFIER_TYPENAME_P (name)
12169               || name == ansi_opname[(int) CALL_EXPR]
12170               || name == ansi_opname[(int) MODIFY_EXPR]
12171               || name == ansi_opname[(int) COMPONENT_REF]
12172               || name == ansi_opname[(int) ARRAY_REF])
12173             cp_error ("`%D' must be a nonstatic member function", decl);
12174           else
12175             {
12176               tree p = argtypes;
12177
12178               if (DECL_STATIC_FUNCTION_P (decl))
12179                 cp_error ("`%D' must be either a non-static member function or a non-member function", decl);
12180
12181               if (p)
12182                 for (; TREE_CODE (TREE_VALUE (p)) != VOID_TYPE ; p = TREE_CHAIN (p))
12183                   {
12184                     tree arg = TREE_VALUE (p);
12185                     if (TREE_CODE (arg) == REFERENCE_TYPE)
12186                       arg = TREE_TYPE (arg);
12187
12188                     /* This lets bad template code slip through.  */
12189                     if (IS_AGGR_TYPE (arg)
12190                         || TREE_CODE (arg) == ENUMERAL_TYPE
12191                         || TREE_CODE (arg) == TEMPLATE_TYPE_PARM
12192                         || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12193                       goto foundaggr;
12194                   }
12195               cp_error
12196                 ("`%D' must have an argument of class or enumerated type",
12197                  decl);
12198             foundaggr:
12199               ;
12200             }
12201         }
12202
12203       if (name == ansi_opname[(int) CALL_EXPR])
12204         return;                 /* No restrictions on args. */
12205
12206       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
12207         {
12208           tree t = TREE_TYPE (name);
12209           if (! friendp)
12210             {
12211               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
12212               const char *what = 0;
12213               
12214               if (ref)
12215                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
12216
12217               if (TREE_CODE (t) == VOID_TYPE)
12218                 what = "void";
12219               else if (t == current_class_type)
12220                 what = "the same type";
12221               /* Don't force t to be complete here.  */
12222               else if (IS_AGGR_TYPE (t)
12223                        && COMPLETE_TYPE_P (t)
12224                        && DERIVED_FROM_P (t, current_class_type))
12225                 what = "a base class";
12226
12227               if (what)
12228                 warning ("conversion to %s%s will never use a type conversion operator",
12229                          ref ? "a reference to " : "", what);
12230             }
12231         }
12232
12233       if (name == ansi_opname[(int) MODIFY_EXPR])
12234         {
12235           tree parmtype;
12236
12237           if (list_length (argtypes) != 3 && methodp)
12238             {
12239               cp_error ("`%D' must take exactly one argument", decl);
12240               return;
12241             }
12242           parmtype = TREE_VALUE (TREE_CHAIN (argtypes));
12243
12244           if (copy_assignment_arg_p (parmtype, virtualp)
12245               && ! friendp)
12246             {
12247               TYPE_HAS_ASSIGN_REF (current_class_type) = 1;
12248               if (TREE_CODE (parmtype) != REFERENCE_TYPE
12249                   || CP_TYPE_CONST_P (TREE_TYPE (parmtype)))
12250                 TYPE_HAS_CONST_ASSIGN_REF (current_class_type) = 1;
12251             }
12252         }
12253       else if (name == ansi_opname[(int) COND_EXPR])
12254         {
12255           /* 13.4.0.3 */
12256           cp_error ("ISO C++ prohibits overloading operator ?:");
12257         }
12258       else if (ambi_op_p (name))
12259         {
12260           if (list_length (argtypes) == 2)
12261             /* prefix */;
12262           else if (list_length (argtypes) == 3)
12263             {
12264               if ((name == ansi_opname[(int) POSTINCREMENT_EXPR]
12265                    || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12266                   && ! processing_template_decl
12267                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
12268                 {
12269                   if (methodp)
12270                     cp_error ("postfix `%D' must take `int' as its argument",
12271                               decl);
12272                   else
12273                     cp_error
12274                       ("postfix `%D' must take `int' as its second argument",
12275                        decl);
12276                 }
12277             }
12278           else
12279             {
12280               if (methodp)
12281                 cp_error ("`%D' must take either zero or one argument", decl);
12282               else
12283                 cp_error ("`%D' must take either one or two arguments", decl);
12284             }
12285
12286           /* More Effective C++ rule 6.  */
12287           if (warn_ecpp
12288               && (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12289                   || name == ansi_opname[(int) POSTDECREMENT_EXPR]))
12290             {
12291               tree arg = TREE_VALUE (argtypes);
12292               tree ret = TREE_TYPE (TREE_TYPE (decl));
12293               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
12294                 arg = TREE_TYPE (arg);
12295               arg = TYPE_MAIN_VARIANT (arg);
12296               if (list_length (argtypes) == 2)
12297                 {
12298                   if (TREE_CODE (ret) != REFERENCE_TYPE
12299                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
12300                                        arg))
12301                     cp_warning ("prefix `%D' should return `%T'", decl,
12302                                 build_reference_type (arg));
12303                 }
12304               else
12305                 {
12306                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
12307                     cp_warning ("postfix `%D' should return `%T'", decl, arg);
12308                 }
12309             }
12310         }
12311       else if (unary_op_p (name))
12312         {
12313           if (list_length (argtypes) != 2)
12314             {
12315               if (methodp)
12316                 cp_error ("`%D' must take `void'", decl);
12317               else
12318                 cp_error ("`%D' must take exactly one argument", decl);
12319             }
12320         }
12321       else /* if (binary_op_p (name)) */
12322         {
12323           if (list_length (argtypes) != 3)
12324             {
12325               if (methodp)
12326                 cp_error ("`%D' must take exactly one argument", decl);
12327               else
12328                 cp_error ("`%D' must take exactly two arguments", decl);
12329             }
12330
12331           /* More Effective C++ rule 7.  */
12332           if (warn_ecpp
12333               && (name == ansi_opname [TRUTH_ANDIF_EXPR]
12334                   || name == ansi_opname [TRUTH_ORIF_EXPR]
12335                   || name == ansi_opname [COMPOUND_EXPR]))
12336             cp_warning ("user-defined `%D' always evaluates both arguments",
12337                         decl);
12338         }
12339
12340       /* Effective C++ rule 23.  */
12341       if (warn_ecpp
12342           && list_length (argtypes) == 3
12343           && (name == ansi_opname [PLUS_EXPR]
12344               || name == ansi_opname [MINUS_EXPR]
12345               || name == ansi_opname [TRUNC_DIV_EXPR]
12346               || name == ansi_opname [MULT_EXPR])
12347           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12348         cp_warning ("`%D' should return by value", decl);
12349
12350       /* 13.4.0.8 */
12351       if (argtypes)
12352         for (; argtypes != void_list_node ; argtypes = TREE_CHAIN (argtypes))
12353           if (TREE_PURPOSE (argtypes))
12354             {
12355               TREE_PURPOSE (argtypes) = NULL_TREE;
12356               if (name == ansi_opname[(int) POSTINCREMENT_EXPR]
12357                   || name == ansi_opname[(int) POSTDECREMENT_EXPR])
12358                 {
12359                   if (pedantic)
12360                     cp_pedwarn ("`%D' cannot have default arguments", decl);
12361                 }
12362               else
12363                 cp_error ("`%D' cannot have default arguments", decl);
12364             }
12365     }
12366 }
12367 \f
12368 static const char *
12369 tag_name (code)
12370      enum tag_types code;
12371 {
12372   switch (code)
12373     {
12374     case record_type:
12375       return "struct";
12376     case class_type:
12377       return "class";
12378     case union_type:
12379       return "union ";
12380     case enum_type:
12381       return "enum";
12382     default:
12383       my_friendly_abort (981122);
12384     }
12385 }
12386
12387 /* Get the struct, enum or union (CODE says which) with tag NAME.
12388    Define the tag as a forward-reference if it is not defined.
12389
12390    C++: If a class derivation is given, process it here, and report
12391    an error if multiple derivation declarations are not identical.
12392
12393    If this is a definition, come in through xref_tag and only look in
12394    the current frame for the name (since C++ allows new names in any
12395    scope.)  */
12396
12397 tree
12398 xref_tag (code_type_node, name, globalize)
12399      tree code_type_node;
12400      tree name;
12401      int globalize;
12402 {
12403   enum tag_types tag_code;
12404   enum tree_code code;
12405   register tree ref, t;
12406   struct binding_level *b = current_binding_level;
12407   int got_type = 0;
12408   tree attributes = NULL_TREE;
12409   tree context = NULL_TREE;
12410
12411   /* If we are called from the parser, code_type_node will sometimes be a
12412      TREE_LIST.  This indicates that the user wrote
12413      "class __attribute__ ((foo)) bar".  Extract the attributes so we can
12414      use them later.  */
12415   if (TREE_CODE (code_type_node) == TREE_LIST)
12416     {
12417       attributes = TREE_PURPOSE (code_type_node);
12418       code_type_node = TREE_VALUE (code_type_node);
12419     }
12420
12421   tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12422   switch (tag_code)
12423     {
12424     case record_type:
12425     case class_type:
12426       code = RECORD_TYPE;
12427       break;
12428     case union_type:
12429       code = UNION_TYPE;
12430       break;
12431     case enum_type:
12432       code = ENUMERAL_TYPE;
12433       break;
12434     default:
12435       my_friendly_abort (18);
12436     }
12437
12438   /* If a cross reference is requested, look up the type
12439      already defined for this tag and return it.  */
12440   if (TYPE_P (name))
12441     {
12442       t = name;
12443       name = TYPE_IDENTIFIER (t);
12444       got_type = 1;
12445     }
12446   else
12447     t = IDENTIFIER_TYPE_VALUE (name);
12448
12449   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
12450       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
12451     t = NULL_TREE;
12452
12453   if (! globalize)
12454     {
12455       /* If we know we are defining this tag, only look it up in
12456          this scope and don't try to find it as a type.  */
12457       ref = lookup_tag (code, name, b, 1);
12458     }
12459   else
12460     {
12461       if (t)
12462         {
12463           /* [dcl.type.elab] If the identifier resolves to a
12464              typedef-name or a template type-parameter, the
12465              elaborated-type-specifier is ill-formed.  */
12466           if (t != TYPE_MAIN_VARIANT (t)
12467               || (CLASS_TYPE_P (t) && TYPE_WAS_ANONYMOUS (t)))
12468             cp_pedwarn ("using typedef-name `%D' after `%s'",
12469                         TYPE_NAME (t), tag_name (tag_code));
12470           else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
12471             cp_error ("using template type parameter `%T' after `%s'",
12472                       t, tag_name (tag_code));
12473
12474           ref = t;
12475         }
12476       else
12477         ref = lookup_tag (code, name, b, 0);
12478
12479       if (! ref)
12480         {
12481           /* Try finding it as a type declaration.  If that wins,
12482              use it.  */
12483           ref = lookup_name (name, 1);
12484
12485           if (ref != NULL_TREE
12486               && processing_template_decl
12487               && DECL_CLASS_TEMPLATE_P (ref)
12488               && template_class_depth (current_class_type) == 0)
12489             /* Since GLOBALIZE is true, we're declaring a global
12490                template, so we want this type.  */
12491             ref = DECL_TEMPLATE_RESULT (ref);
12492
12493           if (ref && TREE_CODE (ref) == TYPE_DECL
12494               && TREE_CODE (TREE_TYPE (ref)) == code)
12495             ref = TREE_TYPE (ref);
12496           else
12497             ref = NULL_TREE;
12498         }
12499
12500       if (ref && current_class_type
12501           && template_class_depth (current_class_type)
12502           && PROCESSING_REAL_TEMPLATE_DECL_P ())
12503         {
12504           /* Since GLOBALIZE is non-zero, we are not looking at a
12505              definition of this tag.  Since, in addition, we are currently
12506              processing a (member) template declaration of a template
12507              class, we must be very careful; consider:
12508
12509                template <class X>
12510                struct S1
12511
12512                template <class U>
12513                struct S2
12514                { template <class V>
12515                friend struct S1; };
12516
12517              Here, the S2::S1 declaration should not be confused with the
12518              outer declaration.  In particular, the inner version should
12519              have a template parameter of level 2, not level 1.  This
12520              would be particularly important if the member declaration
12521              were instead:
12522
12523                template <class V = U> friend struct S1;
12524
12525              say, when we should tsubst into `U' when instantiating
12526              S2.  On the other hand, when presented with:
12527
12528                  template <class T>
12529                  struct S1 {
12530                    template <class U>
12531                    struct S2 {};
12532                    template <class U>
12533                    friend struct S2;
12534                  };
12535
12536               we must find the inner binding eventually.  We
12537               accomplish this by making sure that the new type we
12538               create to represent this declaration has the right
12539               TYPE_CONTEXT.  */
12540           context = TYPE_CONTEXT (ref);
12541           ref = NULL_TREE;
12542         }
12543     }
12544
12545   if (! ref)
12546     {
12547       /* If no such tag is yet defined, create a forward-reference node
12548          and record it as the "definition".
12549          When a real declaration of this type is found,
12550          the forward-reference will be altered into a real type.  */
12551       if (code == ENUMERAL_TYPE)
12552         {
12553           cp_error ("use of enum `%#D' without previous declaration", name);
12554
12555           ref = make_node (ENUMERAL_TYPE);
12556
12557           /* Give the type a default layout like unsigned int
12558              to avoid crashing if it does not get defined.  */
12559           TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
12560           TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
12561           TREE_UNSIGNED (ref) = 1;
12562           TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
12563           TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
12564           TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
12565
12566           /* Enable us to recognize when a type is created in class context.
12567              To do nested classes correctly, this should probably be cleared
12568              out when we leave this classes scope.  Currently this in only
12569              done in `start_enum'.  */
12570
12571           pushtag (name, ref, globalize);
12572         }
12573       else
12574         {
12575           struct binding_level *old_b = class_binding_level;
12576
12577           ref = make_aggr_type (code);
12578           TYPE_CONTEXT (ref) = context;
12579
12580 #ifdef NONNESTED_CLASSES
12581           /* Class types don't nest the way enums do.  */
12582           class_binding_level = (struct binding_level *)0;
12583 #endif
12584           pushtag (name, ref, globalize);
12585           class_binding_level = old_b;
12586         }
12587     }
12588   else
12589     {
12590       if (!globalize && processing_template_decl && IS_AGGR_TYPE (ref))
12591         redeclare_class_template (ref, current_template_parms);
12592     }
12593
12594   /* Until the type is defined, tentatively accept whatever
12595      structure tag the user hands us.  */
12596   if (!COMPLETE_TYPE_P (ref)
12597       && ref != current_class_type
12598       /* Have to check this, in case we have contradictory tag info.  */
12599       && IS_AGGR_TYPE_CODE (TREE_CODE (ref)))
12600     {
12601       if (tag_code == class_type)
12602         CLASSTYPE_DECLARED_CLASS (ref) = 1;
12603       else if (tag_code == record_type)
12604         CLASSTYPE_DECLARED_CLASS (ref) = 0;
12605     }
12606
12607   TREE_TYPE (ref) = attributes;
12608
12609   return ref;
12610 }
12611
12612 tree
12613 xref_tag_from_type (old, id, globalize)
12614      tree old, id;
12615      int globalize;
12616 {
12617   tree code_type_node;
12618
12619   if (TREE_CODE (old) == RECORD_TYPE)
12620     code_type_node = (CLASSTYPE_DECLARED_CLASS (old)
12621                       ? class_type_node : record_type_node);
12622   else
12623     code_type_node = union_type_node;
12624
12625   if (id == NULL_TREE)
12626     id = TYPE_IDENTIFIER (old);
12627
12628   return xref_tag (code_type_node, id, globalize);
12629 }
12630
12631 /* REF is a type (named NAME), for which we have just seen some
12632    baseclasses.  BINFO is a list of those baseclasses; the
12633    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
12634    the base-class.  CODE_TYPE_NODE indicates whether REF is a class,
12635    struct, or union.  */
12636
12637 void
12638 xref_basetypes (code_type_node, name, ref, binfo)
12639      tree code_type_node;
12640      tree name, ref;
12641      tree binfo;
12642 {
12643   /* In the declaration `A : X, Y, ... Z' we mark all the types
12644      (A, X, Y, ..., Z) so we can check for duplicates.  */
12645   tree binfos;
12646   tree base;
12647
12648   int i, len;
12649   enum tag_types tag_code = (enum tag_types) tree_low_cst (code_type_node, 1);
12650
12651   if (tag_code == union_type)
12652     {
12653       cp_error ("derived union `%T' invalid", ref);
12654       return;
12655     }
12656
12657   len = list_length (binfo);
12658
12659   /* First, make sure that any templates in base-classes are
12660      instantiated.  This ensures that if we call ourselves recursively
12661      we do not get confused about which classes are marked and which
12662      are not.  */
12663   for (base = binfo; base; base = TREE_CHAIN (base))
12664     complete_type (TREE_VALUE (base));
12665
12666   SET_CLASSTYPE_MARKED (ref);
12667   BINFO_BASETYPES (TYPE_BINFO (ref)) = binfos = make_tree_vec (len);
12668
12669   for (i = 0; binfo; binfo = TREE_CHAIN (binfo))
12670     {
12671       /* The base of a derived struct is public by default.  */
12672       int via_public
12673         = (TREE_PURPOSE (binfo) == access_public_node
12674            || TREE_PURPOSE (binfo) == access_public_virtual_node
12675            || (tag_code != class_type
12676                && (TREE_PURPOSE (binfo) == access_default_node
12677                    || TREE_PURPOSE (binfo) == access_default_virtual_node)));
12678       int via_protected
12679         = (TREE_PURPOSE (binfo) == access_protected_node
12680            || TREE_PURPOSE (binfo) == access_protected_virtual_node);
12681       int via_virtual
12682         = (TREE_PURPOSE (binfo) == access_private_virtual_node
12683            || TREE_PURPOSE (binfo) == access_protected_virtual_node
12684            || TREE_PURPOSE (binfo) == access_public_virtual_node
12685            || TREE_PURPOSE (binfo) == access_default_virtual_node);
12686       tree basetype = TREE_VALUE (binfo);
12687       tree base_binfo;
12688
12689       if (basetype && TREE_CODE (basetype) == TYPE_DECL)
12690         basetype = TREE_TYPE (basetype);
12691       if (!basetype
12692           || (TREE_CODE (basetype) != RECORD_TYPE
12693               && TREE_CODE (basetype) != TYPENAME_TYPE
12694               && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
12695               && TREE_CODE (basetype) != TEMPLATE_TEMPLATE_PARM))
12696         {
12697           cp_error ("base type `%T' fails to be a struct or class type",
12698                     TREE_VALUE (binfo));
12699           continue;
12700         }
12701
12702       GNU_xref_hier (name, basetype, via_public, via_virtual, 0);
12703
12704       /* This code replaces similar code in layout_basetypes.
12705          We put the complete_type first for implicit `typename'.  */
12706       if (!COMPLETE_TYPE_P (basetype)
12707           && ! (current_template_parms && uses_template_parms (basetype)))
12708         {
12709           cp_error ("base class `%T' has incomplete type", basetype);
12710           continue;
12711         }
12712       else
12713         {
12714           if (CLASSTYPE_MARKED (basetype))
12715             {
12716               if (basetype == ref)
12717                 cp_error ("recursive type `%T' undefined", basetype);
12718               else
12719                 cp_error ("duplicate base type `%T' invalid", basetype);
12720               continue;
12721             }
12722
12723           if (TYPE_FOR_JAVA (basetype)
12724               && (current_lang_stack
12725                   == &VARRAY_TREE (current_lang_base, 0)))
12726             TYPE_FOR_JAVA (ref) = 1;
12727
12728           /* Note that the BINFO records which describe individual
12729              inheritances are *not* shared in the lattice!  They
12730              cannot be shared because a given baseclass may be
12731              inherited with different `accessibility' by different
12732              derived classes.  (Each BINFO record describing an
12733              individual inheritance contains flags which say what
12734              the `accessibility' of that particular inheritance is.)  */
12735
12736           base_binfo
12737             = make_binfo (size_zero_node, basetype,
12738                           CLASS_TYPE_P (basetype)
12739                           ? TYPE_BINFO_VTABLE (basetype) : NULL_TREE,
12740                           CLASS_TYPE_P (basetype)
12741                           ? TYPE_BINFO_VIRTUALS (basetype) : NULL_TREE);
12742
12743           TREE_VEC_ELT (binfos, i) = base_binfo;
12744           TREE_VIA_PUBLIC (base_binfo) = via_public;
12745           TREE_VIA_PROTECTED (base_binfo) = via_protected;
12746           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
12747           BINFO_INHERITANCE_CHAIN (base_binfo) = TYPE_BINFO (ref);
12748
12749           /* We need to unshare the binfos now so that lookups during class
12750              definition work.  */
12751           unshare_base_binfos (base_binfo);
12752
12753           SET_CLASSTYPE_MARKED (basetype);
12754
12755           /* We are free to modify these bits because they are meaningless
12756              at top level, and BASETYPE is a top-level type.  */
12757           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
12758             {
12759               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
12760               /* Converting to a virtual base class requires looking
12761                  up the offset of the virtual base.  */
12762               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12763             }
12764
12765           if (CLASS_TYPE_P (basetype))
12766             {
12767               TYPE_HAS_NEW_OPERATOR (ref) 
12768                 |= TYPE_HAS_NEW_OPERATOR (basetype);
12769               TYPE_HAS_ARRAY_NEW_OPERATOR (ref) 
12770                 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12771               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12772               /* If the base-class uses multiple inheritance, so do we.  */
12773               TYPE_USES_MULTIPLE_INHERITANCE (ref)
12774                 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
12775               /* Likewise, if converting to a base of the base may require
12776                  code, then we may need to generate code to convert to a
12777                  base as well.  */
12778               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
12779                 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
12780             }
12781
12782           i += 1;
12783         }
12784     }
12785   if (i)
12786     TREE_VEC_LENGTH (binfos) = i;
12787   else
12788     BINFO_BASETYPES (TYPE_BINFO (ref)) = NULL_TREE;
12789
12790   if (i > 1)
12791     {
12792       TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
12793       /* If there is more than one non-empty they cannot be at the same
12794          address.  */
12795       TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
12796     }
12797
12798   /* Unmark all the types.  */
12799   while (--i >= 0)
12800     CLEAR_CLASSTYPE_MARKED (BINFO_TYPE (TREE_VEC_ELT (binfos, i)));
12801   CLEAR_CLASSTYPE_MARKED (ref);
12802
12803   /* Now that we know all the base-classes, set up the list of virtual
12804      bases.  */
12805   get_vbase_types (ref);
12806 }
12807
12808 \f
12809 /* Begin compiling the definition of an enumeration type.
12810    NAME is its name (or null if anonymous).
12811    Returns the type object, as yet incomplete.
12812    Also records info about it so that build_enumerator
12813    may be used to declare the individual values as they are read.  */
12814
12815 tree
12816 start_enum (name)
12817      tree name;
12818 {
12819   register tree enumtype = NULL_TREE;
12820   struct binding_level *b = current_binding_level;
12821
12822   /* If this is the real definition for a previous forward reference,
12823      fill in the contents in the same object that used to be the
12824      forward reference.  */
12825
12826   if (name != NULL_TREE)
12827     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
12828
12829   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12830     {
12831       cp_error ("multiple definition of `%#T'", enumtype);
12832       cp_error_at ("previous definition here", enumtype);
12833       /* Clear out TYPE_VALUES, and start again.  */
12834       TYPE_VALUES (enumtype) = NULL_TREE;
12835     }
12836   else
12837     {
12838       enumtype = make_node (ENUMERAL_TYPE);
12839       pushtag (name, enumtype, 0);
12840     }
12841
12842   if (current_class_type)
12843     TREE_ADDRESSABLE (b->tags) = 1;
12844
12845   GNU_xref_decl (current_function_decl, enumtype);
12846   return enumtype;
12847 }
12848
12849 /* After processing and defining all the values of an enumeration type,
12850    install their decls in the enumeration type and finish it off.
12851    ENUMTYPE is the type object and VALUES a list of name-value pairs.
12852    Returns ENUMTYPE.  */
12853
12854 tree
12855 finish_enum (enumtype)
12856      tree enumtype;
12857 {
12858   register tree minnode = NULL_TREE, maxnode = NULL_TREE;
12859   /* Calculate the maximum value of any enumerator in this type.  */
12860
12861   tree values = TYPE_VALUES (enumtype);
12862   if (values)
12863     {
12864       tree pair;
12865
12866       for (pair = values; pair; pair = TREE_CHAIN (pair))
12867         {
12868           tree decl;
12869           tree value;
12870
12871           /* The TREE_VALUE is a CONST_DECL for this enumeration
12872              constant.  */
12873           decl = TREE_VALUE (pair);
12874
12875           /* [dcl.enum]
12876
12877              Following the closing brace of an enum-specifier, each
12878              enumerator has the type of its enumeration.  Prior to the
12879              closing brace, the type of each enumerator is the type of
12880              its initializing value.  */
12881           TREE_TYPE (decl) = enumtype;
12882
12883           /* The DECL_INITIAL will be NULL if we are processing a
12884              template declaration and this enumeration constant had no
12885              explicit initializer.  */
12886           value = DECL_INITIAL (decl);
12887           if (value && !processing_template_decl)
12888             {
12889               /* Set the TREE_TYPE for the VALUE as well.  That's so
12890                  that when we call decl_constant_value we get an
12891                  entity of the right type (but with the constant
12892                  value).  Since we shouldn't ever call
12893                  decl_constant_value on a template type, there's no
12894                  reason to do that when processing_template_decl.
12895                  And, if the expression is something like a
12896                  TEMPLATE_PARM_INDEX or a CAST_EXPR doing so will
12897                  wreak havoc on the intended type of the expression.
12898
12899                  Of course, there's also no point in trying to compute
12900                  minimum or maximum values if we're in a template.  */
12901               TREE_TYPE (value) = enumtype;
12902
12903               if (!minnode)
12904                 minnode = maxnode = value;
12905               else if (tree_int_cst_lt (maxnode, value))
12906                 maxnode = value;
12907               else if (tree_int_cst_lt (value, minnode))
12908                 minnode = value;
12909             }
12910
12911           if (processing_template_decl)
12912             /* If this is just a template, leave the CONST_DECL
12913                alone.  That way tsubst_copy will find CONST_DECLs for
12914                CONST_DECLs, and not INTEGER_CSTs.  */
12915             ;
12916           else
12917             /* In the list we're building up, we want the enumeration
12918                values, not the CONST_DECLs.  */
12919             TREE_VALUE (pair) = value;
12920         }
12921     }
12922   else
12923     maxnode = minnode = integer_zero_node;
12924
12925   TYPE_VALUES (enumtype) = nreverse (values);
12926
12927   if (processing_template_decl)
12928     {
12929       tree scope = current_scope ();
12930       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12931         add_tree (build_min (TAG_DEFN, enumtype));
12932     }
12933   else
12934     {
12935       int unsignedp = tree_int_cst_sgn (minnode) >= 0;
12936       int lowprec = min_precision (minnode, unsignedp);
12937       int highprec = min_precision (maxnode, unsignedp);
12938       int precision = MAX (lowprec, highprec);
12939       tree tem;
12940
12941       TYPE_SIZE (enumtype) = NULL_TREE;
12942
12943       /* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'.  */
12944
12945       TYPE_PRECISION (enumtype) = precision;
12946       if (unsignedp)
12947         fixup_unsigned_type (enumtype);
12948       else
12949         fixup_signed_type (enumtype);
12950
12951       if (flag_short_enums || (precision > TYPE_PRECISION (integer_type_node)))
12952         /* Use the width of the narrowest normal C type which is wide
12953            enough.  */
12954         TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size
12955                                                     (precision, 1));
12956       else
12957         TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
12958
12959       TYPE_SIZE (enumtype) = 0;
12960       layout_type (enumtype);
12961
12962       /* Fix up all variant types of this enum type.  */
12963       for (tem = TYPE_MAIN_VARIANT (enumtype); tem;
12964            tem = TYPE_NEXT_VARIANT (tem))
12965         {
12966           TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
12967           TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
12968           TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
12969           TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
12970           TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
12971           TYPE_MODE (tem) = TYPE_MODE (enumtype);
12972           TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
12973           TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
12974           TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
12975         }
12976
12977       /* Finish debugging output for this type.  */
12978       rest_of_type_compilation (enumtype, namespace_bindings_p ());
12979     }
12980
12981   return enumtype;
12982 }
12983
12984 /* Build and install a CONST_DECL for an enumeration constant of the
12985    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12986    Assignment of sequential values by default is handled here.  */
12987
12988 void
12989 build_enumerator (name, value, enumtype)
12990      tree name;
12991      tree value;
12992      tree enumtype;
12993 {
12994   tree decl;
12995   tree context;
12996   tree type;
12997   tree values;
12998
12999   /* Remove no-op casts from the value.  */
13000   if (value)
13001     STRIP_TYPE_NOPS (value);
13002
13003   if (! processing_template_decl)
13004     {
13005       /* Validate and default VALUE.  */
13006       if (value != NULL_TREE)
13007         {
13008           if (TREE_READONLY_DECL_P (value))
13009             value = decl_constant_value (value);
13010
13011           if (TREE_CODE (value) == INTEGER_CST)
13012             {
13013               value = default_conversion (value);
13014               constant_expression_warning (value);
13015             }
13016           else
13017             {
13018               cp_error ("enumerator value for `%D' not integer constant", name);
13019               value = NULL_TREE;
13020             }
13021         }
13022
13023       /* Default based on previous value.  */
13024       if (value == NULL_TREE && ! processing_template_decl)
13025         {
13026           tree prev_value;
13027
13028           if (TYPE_VALUES (enumtype))
13029             {
13030               /* The next value is the previous value ... */
13031               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13032               /* ... plus one.  */
13033               value = build_binary_op (PLUS_EXPR,
13034                                        prev_value,
13035                                        integer_one_node);
13036
13037               if (tree_int_cst_lt (value, prev_value))
13038                 cp_error ("overflow in enumeration values at `%D'", name);
13039             }
13040           else
13041             value = integer_zero_node;
13042         }
13043
13044       /* Remove no-op casts from the value.  */
13045       if (value)
13046         STRIP_TYPE_NOPS (value);
13047 #if 0
13048       /* To fix MAX_VAL enum consts. (bkoz)  */
13049       TREE_TYPE (value) = integer_type_node;
13050 #endif
13051     }
13052
13053   /* We always have to copy here; not all INTEGER_CSTs are unshared.
13054      Even in other cases, we will later (in finish_enum) be setting
13055      the type of VALUE.  But, we don't need to make a copy if this
13056      VALUE is one of the enumeration constants for this same
13057      enumeration type.  */
13058   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13059     if (TREE_VALUE (values) == value)
13060       break;
13061   /* If we didn't break out of the loop, then we do need a copy.  */
13062   if (!values && value)
13063     value = copy_node (value);
13064
13065   /* C++ associates enums with global, function, or class declarations.  */
13066   context = current_scope ();
13067
13068   /* Build the actual enumeration constant.  Note that the enumeration
13069     constants have the type of their initializers until the
13070     enumeration is complete:
13071
13072       [ dcl.enum ]
13073
13074       Following the closing brace of an enum-specifier, each enumer-
13075       ator has the type of its enumeration.  Prior to the closing
13076       brace, the type of each enumerator is the type of its
13077       initializing value.
13078
13079     In finish_enum we will reset the type.  Of course, if we're
13080     processing a template, there may be no value.   */
13081   type = value ? TREE_TYPE (value) : NULL_TREE;
13082
13083   if (context && context == current_class_type)
13084     /* This enum declaration is local to the class.  We need the full
13085       lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
13086     decl = build_lang_decl (CONST_DECL, name, type);
13087   else
13088     /* It's a global enum, or it's local to a function.  (Note local to
13089       a function could mean local to a class method.  */
13090     decl = build_decl (CONST_DECL, name, type);
13091
13092   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
13093   DECL_INITIAL (decl) = value;
13094   TREE_READONLY (decl) = 1;
13095
13096   if (context && context == current_class_type)
13097     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13098       on the TYPE_FIELDS list for `S'.  (That's so that you can say
13099       things like `S::i' later.)  */
13100     finish_member_declaration (decl);
13101   else
13102     {
13103       pushdecl (decl);
13104       GNU_xref_decl (current_function_decl, decl);
13105     }
13106
13107   /* Add this enumeration constant to the list for this type.  */
13108   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13109 }
13110
13111 \f
13112 static int function_depth;
13113
13114 /* We're defining DECL.  Make sure that it's type is OK.  */
13115
13116 static void
13117 check_function_type (decl)
13118      tree decl;
13119 {
13120   tree fntype = TREE_TYPE (decl);
13121   tree return_type = complete_type (TREE_TYPE (fntype));
13122
13123   /* In a function definition, arg types must be complete.  */
13124   require_complete_types_for_parms (current_function_parms);
13125
13126   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13127     {
13128       cp_error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
13129
13130       /* Make it return void instead, but don't change the
13131          type of the DECL_RESULT, in case we have a named return value.  */
13132       if (TREE_CODE (fntype) == METHOD_TYPE)
13133         {
13134           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
13135           TREE_TYPE (decl)
13136             = build_cplus_method_type (ctype,
13137                                        void_type_node,
13138                                        FUNCTION_ARG_CHAIN (decl));
13139         }
13140       else
13141         TREE_TYPE (decl)
13142           = build_function_type (void_type_node,
13143                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
13144       TREE_TYPE (decl)
13145         = build_exception_variant (fntype,
13146                                    TYPE_RAISES_EXCEPTIONS (fntype));
13147     }
13148   else
13149     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13150 }
13151
13152 /* Create the FUNCTION_DECL for a function definition.
13153    DECLSPECS and DECLARATOR are the parts of the declaration;
13154    they describe the function's name and the type it returns,
13155    but twisted together in a fashion that parallels the syntax of C.
13156
13157    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13158    DECLARATOR is really the DECL for the function we are about to
13159    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13160    indicating that the function is an inline defined in-class, and
13161    SF_EXPAND indicating that we should generate RTL for this
13162    function.
13163
13164    This function creates a binding context for the function body
13165    as well as setting up the FUNCTION_DECL in current_function_decl.
13166
13167    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13168    (it defines a datum instead), we return 0, which tells
13169    yyparse to report a parse error.
13170
13171    For C++, we must first check whether that datum makes any sense.
13172    For example, "class A local_a(1,2);" means that variable local_a
13173    is an aggregate of type A, which should have a constructor
13174    applied to it with the argument list [1, 2].  */
13175
13176 int
13177 start_function (declspecs, declarator, attrs, flags)
13178      tree declspecs, declarator, attrs;
13179      int flags;
13180 {
13181   tree decl1;
13182   tree ctype = NULL_TREE;
13183   tree fntype;
13184   tree restype;
13185   extern int have_extern_spec;
13186   extern int used_extern_spec;
13187   int doing_friend = 0;
13188   struct binding_level *bl;
13189
13190   /* Sanity check.  */
13191   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
13192   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
13193
13194   /* This should only be done once on the top most decl.  */
13195   if (have_extern_spec && !used_extern_spec)
13196     {
13197       declspecs = decl_tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
13198       used_extern_spec = 1;
13199     }
13200
13201   if (flags & SF_PRE_PARSED)
13202     {
13203       decl1 = declarator;
13204
13205       fntype = TREE_TYPE (decl1);
13206       if (TREE_CODE (fntype) == METHOD_TYPE)
13207         ctype = TYPE_METHOD_BASETYPE (fntype);
13208
13209       /* ISO C++ 11.4/5.  A friend function defined in a class is in
13210          the (lexical) scope of the class in which it is defined.  */
13211       if (!ctype && DECL_FRIEND_P (decl1))
13212         {
13213           ctype = DECL_FRIEND_CONTEXT (decl1);
13214
13215           /* CTYPE could be null here if we're dealing with a template;
13216              for example, `inline friend float foo()' inside a template
13217              will have no CTYPE set.  */
13218           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13219             ctype = NULL_TREE;
13220           else
13221             doing_friend = 1;
13222         }
13223
13224       last_function_parms = DECL_ARGUMENTS (decl1);
13225       last_function_parm_tags = NULL_TREE;
13226     }
13227   else
13228     {
13229       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL_TREE);
13230       /* If the declarator is not suitable for a function definition,
13231          cause a syntax error.  */
13232       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) return 0;
13233
13234       fntype = TREE_TYPE (decl1);
13235
13236       restype = TREE_TYPE (fntype);
13237       if (CLASS_TYPE_P (restype) && !CLASSTYPE_GOT_SEMICOLON (restype))
13238         {
13239           cp_error ("semicolon missing after declaration of `%#T'", restype);
13240           shadow_tag (build_tree_list (NULL_TREE, restype));
13241           CLASSTYPE_GOT_SEMICOLON (restype) = 1;
13242           if (TREE_CODE (fntype) == FUNCTION_TYPE)
13243             fntype = build_function_type (integer_type_node,
13244                                           TYPE_ARG_TYPES (fntype));
13245           else
13246             fntype = build_cplus_method_type (build_type_variant (TYPE_METHOD_BASETYPE (fntype), TREE_READONLY (decl1), TREE_SIDE_EFFECTS (decl1)),
13247                                               integer_type_node,
13248                                               TYPE_ARG_TYPES (fntype));
13249           TREE_TYPE (decl1) = fntype;
13250         }
13251
13252       if (TREE_CODE (fntype) == METHOD_TYPE)
13253         ctype = TYPE_METHOD_BASETYPE (fntype);
13254       else if (DECL_MAIN_P (decl1))
13255         {
13256           /* If this doesn't return integer_type, complain.  */
13257           if (TREE_TYPE (TREE_TYPE (decl1)) != integer_type_node)
13258             {
13259               if (pedantic || warn_return_type)
13260                 pedwarn ("return type for `main' changed to `int'");
13261               TREE_TYPE (decl1) = fntype = default_function_type;
13262             }
13263         }
13264     }
13265
13266   /* Sometimes we don't notice that a function is a static member, and
13267      build a METHOD_TYPE for it.  Fix that up now.  */
13268   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13269       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
13270     {
13271       revert_static_member_fn (decl1);
13272       last_function_parms = TREE_CHAIN (last_function_parms);
13273       ctype = NULL_TREE;
13274     }
13275
13276   /* Warn if function was previously implicitly declared
13277      (but not if we warned then).  */
13278   if (! warn_implicit
13279       && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)) != NULL_TREE)
13280     cp_warning_at ("`%D' implicitly declared before its definition", IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)));
13281
13282   /* Set up current_class_type, and enter the scope of the class, if
13283      appropriate.  */
13284   if (ctype)
13285     push_nested_class (ctype, 1);
13286   else if (DECL_STATIC_FUNCTION_P (decl1))
13287     push_nested_class (DECL_CONTEXT (decl1), 2);
13288
13289   /* Now that we have entered the scope of the class, we must restore
13290      the bindings for any template parameters surrounding DECL1, if it
13291      is an inline member template.  (Order is important; consider the
13292      case where a template parameter has the same name as a field of
13293      the class.)  It is not until after this point that
13294      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13295   if (flags & SF_INCLASS_INLINE)
13296     maybe_begin_member_template_processing (decl1);
13297
13298   /* Effective C++ rule 15.  See also c_expand_return.  */
13299   if (warn_ecpp
13300       && DECL_NAME (decl1) == ansi_opname[(int) MODIFY_EXPR]
13301       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
13302     cp_warning ("`operator=' should return a reference to `*this'");
13303
13304   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13305      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13306   if (!DECL_INITIAL (decl1))
13307     DECL_INITIAL (decl1) = error_mark_node;
13308
13309 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
13310   SET_DEFAULT_DECL_ATTRIBUTES (decl1, attrs);
13311 #endif
13312
13313   /* This function exists in static storage.
13314      (This does not mean `static' in the C sense!)  */
13315   TREE_STATIC (decl1) = 1;
13316
13317   /* We must call push_template_decl after current_class_type is set
13318      up.  (If we are processing inline definitions after exiting a
13319      class scope, current_class_type will be NULL_TREE until set above
13320      by push_nested_class.)  */
13321   if (processing_template_decl)
13322     decl1 = push_template_decl (decl1);
13323
13324   /* We are now in the scope of the function being defined.  */
13325   current_function_decl = decl1;
13326
13327   /* Save the parm names or decls from this function's declarator
13328      where store_parm_decls will find them.  */
13329   current_function_parms = last_function_parms;
13330   current_function_parm_tags = last_function_parm_tags;
13331
13332   /* Make sure the parameter and return types are reasonable.  When
13333      you declare a function, these types can be incomplete, but they
13334      must be complete when you define the function.  */
13335   if (! processing_template_decl)
13336     check_function_type (decl1);
13337
13338   /* Build the return declaration for the function.  */
13339   restype = TREE_TYPE (fntype);
13340   if (!processing_template_decl)
13341     {
13342       if (!DECL_RESULT (decl1))
13343         {
13344           DECL_RESULT (decl1)
13345             = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13346           c_apply_type_quals_to_decl (CP_TYPE_QUALS (restype),
13347                                       DECL_RESULT (decl1));
13348         }
13349     }
13350   else
13351     /* Just use `void'.  Nobody will ever look at this anyhow.  */
13352     DECL_RESULT (decl1) = build_decl (RESULT_DECL, 0, void_type_node);
13353
13354   /* Initialize RTL machinery.  We cannot do this until
13355      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13356      even when processing a template; this is how we get
13357      CFUN set up, and our per-function variables initialized.  */
13358   bl = current_binding_level;
13359   init_function_start (decl1, input_filename, lineno);
13360   current_binding_level = bl;
13361   expanding_p = (flags & SF_EXPAND) != 0;
13362
13363   /* Even though we're inside a function body, we still don't want to
13364      call expand_expr to calculate the size of a variable-sized array.
13365      We haven't necessarily assigned RTL to all variables yet, so it's
13366      not safe to try to expand expressions involving them.  */
13367   immediate_size_expand = 0;
13368   cfun->x_dont_save_pending_sizes_p = 1;
13369
13370   /* If we're building a statement-tree, start the tree now.  */
13371   if (processing_template_decl || !expanding_p)
13372     begin_stmt_tree (&DECL_SAVED_TREE (decl1));
13373
13374   /* Let the user know we're compiling this function.  */
13375   if (processing_template_decl || !building_stmt_tree ())
13376     announce_function (decl1);
13377
13378   /* Record the decl so that the function name is defined.
13379      If we already have a decl for this name, and it is a FUNCTION_DECL,
13380      use the old decl.  */
13381   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13382     {
13383       /* A specialization is not used to guide overload resolution.  */
13384       if ((flag_guiding_decls
13385            || !DECL_TEMPLATE_SPECIALIZATION (decl1))
13386           && ! DECL_FUNCTION_MEMBER_P (decl1))
13387         decl1 = pushdecl (decl1);
13388       else
13389         {
13390           /* We need to set the DECL_CONTEXT. */
13391           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13392             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13393           /* And make sure we have enough default args.  */
13394           check_default_args (decl1);
13395         }
13396       fntype = TREE_TYPE (decl1);
13397     }
13398
13399   /* Reset these in case the call to pushdecl changed them.  */
13400   current_function_decl = decl1;
13401   cfun->decl = decl1;
13402
13403   /* Initialize the per-function data.  */
13404   if (!DECL_PENDING_INLINE_P (decl1) && DECL_SAVED_FUNCTION_DATA (decl1))
13405     {
13406       /* If we already parsed this function, and we're just expanding it
13407          now, restore saved state.  */
13408       struct binding_level *bl = current_binding_level;
13409       *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (decl1);
13410       current_binding_level = bl;
13411
13412       /* This function is being processed in whole-function mode; we
13413          already did semantic analysis.  */
13414       cfun->x_whole_function_mode_p = 1;
13415
13416       /* If we decided that we didn't want to inline this function,
13417          make sure the back-end knows that.  */
13418       if (!current_function_cannot_inline)
13419         current_function_cannot_inline = cp_function_chain->cannot_inline;
13420
13421       /* We don't need the saved data anymore.  */
13422       free (DECL_SAVED_FUNCTION_DATA (decl1));
13423       DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13424     }
13425   else if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13426     {
13427       /* We know that this was set up by `grokclassfn'.  We do not
13428          wait until `store_parm_decls', since evil parse errors may
13429          never get us to that point.  Here we keep the consistency
13430          between `current_class_type' and `current_class_ptr'.  */
13431       tree t = DECL_ARGUMENTS (decl1);
13432
13433       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
13434                           162);
13435       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
13436                           19990811);
13437
13438       cp_function_chain->x_current_class_ref
13439         = build_indirect_ref (t, NULL_PTR);
13440       cp_function_chain->x_current_class_ptr = t;
13441
13442       /* Constructors and destructors need to know whether they're "in
13443          charge" of initializing virtual base classes.  */
13444       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13445         current_in_charge_parm = TREE_CHAIN (t);
13446     }
13447
13448   if (DECL_INTERFACE_KNOWN (decl1))
13449     {
13450       tree ctx = decl_function_context (decl1);
13451
13452       if (DECL_NOT_REALLY_EXTERN (decl1))
13453         DECL_EXTERNAL (decl1) = 0;
13454
13455       if (ctx != NULL_TREE && DECL_THIS_INLINE (ctx)
13456           && TREE_PUBLIC (ctx))
13457         /* This is a function in a local class in an extern inline
13458            function.  */
13459         comdat_linkage (decl1);
13460     }
13461   /* If this function belongs to an interface, it is public.
13462      If it belongs to someone else's interface, it is also external.
13463      This only affects inlines and template instantiations.  */
13464   else if (interface_unknown == 0
13465            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13466                || flag_alt_external_templates))
13467     {
13468       if (DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1)
13469           || processing_template_decl)
13470         {
13471           DECL_EXTERNAL (decl1)
13472             = (interface_only
13473                || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines
13474                    && !DECL_VINDEX (decl1)));
13475
13476           /* For WIN32 we also want to put these in linkonce sections.  */
13477           maybe_make_one_only (decl1);
13478         }
13479       else
13480         DECL_EXTERNAL (decl1) = 0;
13481       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13482       DECL_INTERFACE_KNOWN (decl1) = 1;
13483     }
13484   else if (interface_unknown && interface_only
13485            && (! DECL_TEMPLATE_INSTANTIATION (decl1)
13486                || flag_alt_external_templates))
13487     {
13488       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13489          interface, we will have interface_only set but not
13490          interface_known.  In that case, we don't want to use the normal
13491          heuristics because someone will supply a #pragma implementation
13492          elsewhere, and deducing it here would produce a conflict.  */
13493       comdat_linkage (decl1);
13494       DECL_EXTERNAL (decl1) = 0;
13495       DECL_INTERFACE_KNOWN (decl1) = 1;
13496       DECL_DEFER_OUTPUT (decl1) = 1;
13497     }
13498   else
13499     {
13500       /* This is a definition, not a reference.
13501          So clear DECL_EXTERNAL.  */
13502       DECL_EXTERNAL (decl1) = 0;
13503
13504       if ((DECL_THIS_INLINE (decl1) || DECL_TEMPLATE_INSTANTIATION (decl1))
13505           && ! DECL_INTERFACE_KNOWN (decl1)
13506           /* Don't try to defer nested functions for now.  */
13507           && ! decl_function_context (decl1))
13508         DECL_DEFER_OUTPUT (decl1) = 1;
13509       else
13510         DECL_INTERFACE_KNOWN (decl1) = 1;
13511     }
13512
13513   if (doing_semantic_analysis_p ())
13514     {
13515       pushlevel (0);
13516       current_binding_level->parm_flag = 1;
13517     }
13518
13519   if (attrs)
13520     cplus_decl_attributes (decl1, NULL_TREE, attrs);
13521
13522   if (!building_stmt_tree ())
13523     {
13524       GNU_xref_function (decl1, current_function_parms);
13525       make_function_rtl (decl1);
13526     }
13527
13528   /* Promote the value to int before returning it.  */
13529   if (C_PROMOTING_INTEGER_TYPE_P (restype))
13530     restype = type_promotes_to (restype);
13531
13532   /* If this fcn was already referenced via a block-scope `extern' decl
13533      (or an implicit decl), propagate certain information about the usage.  */
13534   if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl1)))
13535     TREE_ADDRESSABLE (decl1) = 1;
13536
13537   if (DECL_RESULT (decl1) == NULL_TREE)
13538     {
13539       DECL_RESULT (decl1)
13540         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
13541       TREE_READONLY (DECL_RESULT (decl1)) = CP_TYPE_CONST_P (restype);
13542       TREE_THIS_VOLATILE (DECL_RESULT (decl1)) = CP_TYPE_VOLATILE_P (restype);
13543     }
13544
13545   ++function_depth;
13546
13547   if (DECL_DESTRUCTOR_P (decl1))
13548     {
13549       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13550       DECL_CONTEXT (dtor_label) = current_function_decl;
13551     }
13552   /* Under the old ABI we return `this' from constructors, so we make
13553      ordinary `return' statements in constructors jump to CTOR_LABEL;
13554      from there we return `this'.  Under the new ABI, we don't bother
13555      with any of this.  By not setting CTOR_LABEL the remainder of the
13556      machinery is automatically disabled.  */
13557   else if (!flag_new_abi && DECL_CONSTRUCTOR_P (decl1))
13558     {
13559       ctor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
13560       DECL_CONTEXT (ctor_label) = current_function_decl;
13561     }
13562
13563   return 1;
13564 }
13565 \f
13566 /* Called after store_parm_decls for a function-try-block.  */
13567
13568 void
13569 expand_start_early_try_stmts ()
13570 {
13571   expand_start_try_stmts ();
13572 }
13573
13574 /* Store the parameter declarations into the current function declaration.
13575    This is called after parsing the parameter declarations, before
13576    digesting the body of the function.
13577
13578    Also install to binding contour return value identifier, if any.  */
13579
13580 void
13581 store_parm_decls ()
13582 {
13583   register tree fndecl = current_function_decl;
13584   register tree parm;
13585   int parms_have_cleanups = 0;
13586   tree cleanups = NULL_TREE;
13587
13588   /* This is a list of types declared among parms in a prototype.  */
13589   tree parmtags = current_function_parm_tags;
13590
13591   /* This is a chain of any other decls that came in among the parm
13592      declarations.  If a parm is declared with  enum {foo, bar} x;
13593      then CONST_DECLs for foo and bar are put here.  */
13594   tree nonparms = NULL_TREE;
13595
13596   /* Create a binding level for the parms.  */
13597   if (!building_stmt_tree ())
13598     expand_start_bindings (2);
13599
13600   if (current_function_parms)
13601     {
13602       /* This case is when the function was defined with an ANSI prototype.
13603          The parms already have decls, so we need not do anything here
13604          except record them as in effect
13605          and complain if any redundant old-style parm decls were written.  */
13606
13607       tree specparms = current_function_parms;
13608       tree next;
13609
13610       if (doing_semantic_analysis_p ())
13611         {
13612           /* Must clear this because it might contain TYPE_DECLs declared
13613              at class level.  */
13614           storedecls (NULL_TREE);
13615
13616           /* If we're doing semantic analysis, then we'll call pushdecl
13617              for each of these.  We must do them in reverse order so that
13618              they end in the correct forward order.  */
13619           specparms = nreverse (specparms);
13620         }
13621
13622       for (parm = specparms; parm; parm = next)
13623         {
13624           next = TREE_CHAIN (parm);
13625           if (TREE_CODE (parm) == PARM_DECL)
13626             {
13627               tree type = TREE_TYPE (parm);
13628
13629               if (doing_semantic_analysis_p ())
13630                 {
13631                   tree cleanup;
13632
13633                   if (DECL_NAME (parm) == NULL_TREE
13634                       || TREE_CODE (parm) != VOID_TYPE)
13635                     pushdecl (parm);
13636                   else
13637                     cp_error ("parameter `%D' declared void", parm);
13638
13639                   cleanup = (processing_template_decl 
13640                              ? NULL_TREE
13641                              : maybe_build_cleanup (parm));
13642
13643                   if (cleanup)
13644                     cleanups = tree_cons (parm, cleanup, cleanups);
13645                 }
13646               else if (type != error_mark_node
13647                        && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13648                 parms_have_cleanups = 1;
13649             }
13650           else
13651             {
13652               /* If we find an enum constant or a type tag,
13653                  put it aside for the moment.  */
13654               TREE_CHAIN (parm) = NULL_TREE;
13655               nonparms = chainon (nonparms, parm);
13656             }
13657         }
13658
13659       if (doing_semantic_analysis_p ())
13660         {
13661           /* Get the decls in their original chain order
13662              and record in the function.  This is all and only the
13663              PARM_DECLs that were pushed into scope by the loop above.  */
13664           DECL_ARGUMENTS (fndecl) = getdecls ();
13665           storetags (chainon (parmtags, gettags ()));
13666         }
13667     }
13668   else
13669     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13670
13671   /* Now store the final chain of decls for the arguments
13672      as the decl-chain of the current lexical scope.
13673      Put the enumerators in as well, at the front so that
13674      DECL_ARGUMENTS is not modified.  */
13675   if (doing_semantic_analysis_p ())
13676     storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
13677
13678   /* Initialize the RTL code for the function.  */
13679   DECL_SAVED_INSNS (fndecl) = 0;
13680   if (! building_stmt_tree ())
13681     expand_function_start (fndecl, parms_have_cleanups);
13682
13683   current_function_parms_stored = 1;
13684
13685   /* If this function is `main', emit a call to `__main'
13686      to run global initializers, etc.  */
13687   if (DECL_MAIN_P (fndecl) && !building_stmt_tree ())
13688     expand_main_function ();
13689
13690   /* Now that we have initialized the parms, we can start their
13691      cleanups.  We cannot do this before, since expand_decl_cleanup
13692      should not be called before the parm can be used.  */
13693   while (cleanups)
13694     {
13695       finish_decl_cleanup (TREE_PURPOSE (cleanups),
13696                            TREE_VALUE (cleanups));
13697       cleanups = TREE_CHAIN (cleanups);
13698     }
13699
13700   /* Create a binding contour which can be used to catch
13701      cleanup-generated temporaries.  Also, if the return value needs or
13702      has initialization, deal with that now.  */
13703   if (parms_have_cleanups)
13704     {
13705       pushlevel (0);
13706       if (!building_stmt_tree ())
13707         expand_start_bindings (2);
13708     }
13709
13710   /* Do the starting of the exception specifications, if we have any.  */
13711   if (flag_exceptions && !processing_template_decl
13712       && flag_enforce_eh_specs
13713       && building_stmt_tree ()
13714       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13715     current_eh_spec_try_block = expand_start_eh_spec ();
13716 }
13717
13718 /* Bind a name and initialization to the return value of
13719    the current function.  */
13720
13721 void
13722 store_return_init (decl)
13723      tree decl;
13724 {
13725   /* If this named return value comes in a register, put it in a
13726      pseudo-register.  */
13727   if (DECL_REGISTER (decl))
13728     {
13729       original_result_rtx = DECL_RTL (decl);
13730       /* Note that the mode of the old DECL_RTL may be wider than the
13731          mode of DECL_RESULT, depending on the calling conventions for
13732          the processor.  For example, on the Alpha, a 32-bit integer
13733          is returned in a DImode register -- the DECL_RESULT has
13734          SImode but the DECL_RTL for the DECL_RESULT has DImode.  So,
13735          here, we use the mode the back-end has already assigned for
13736          the return value.  */
13737       DECL_RTL (decl) = gen_reg_rtx (GET_MODE (original_result_rtx));
13738     }
13739 }
13740
13741 \f
13742 /* We have finished doing semantic analysis on DECL, but have not yet
13743    generated RTL for its body.  Save away our current state, so that
13744    when we want to generate RTL later we know what to do.  */
13745
13746 static void
13747 save_function_data (decl)
13748      tree decl;
13749 {
13750   struct language_function *f;
13751
13752   /* Save the language-specific per-function data so that we can
13753      get it back when we really expand this function.  */
13754   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
13755                       19990908);
13756
13757   /* Make a copy.  */
13758   f = ((struct language_function *)
13759        xmalloc (sizeof (struct language_function)));
13760   bcopy ((char *) cp_function_chain, (char *) f,
13761          sizeof (struct language_function));
13762   DECL_SAVED_FUNCTION_DATA (decl) = f;
13763
13764   /* Clear out the bits we don't need.  */
13765   f->x_base_init_list = NULL_TREE;
13766   f->x_member_init_list = NULL_TREE;
13767   f->x_stmt_tree.x_last_stmt = NULL_TREE;
13768   f->x_stmt_tree.x_last_expr_type = NULL_TREE;
13769   f->x_result_rtx = NULL_RTX;
13770   f->x_named_label_uses = NULL;
13771   f->bindings = NULL;
13772
13773   /* When we get back here again, we will be expanding.  */
13774   f->x_expanding_p = 1;
13775
13776   /* If we've already decided that we cannot inline this function, we
13777      must remember that fact when we actually go to expand the
13778      function.  */
13779   f->cannot_inline = current_function_cannot_inline;
13780 }
13781
13782 /* At the end of every constructor we generate to code to return
13783    `this'.  Do that now.  */
13784
13785 static void
13786 finish_constructor_body ()
13787 {
13788   /* Any return from a constructor will end up here.  */
13789   if (ctor_label)
13790     add_tree (build_min_nt (LABEL_STMT, ctor_label));
13791
13792   /* Clear CTOR_LABEL so that finish_return_stmt knows to really
13793      generate the return, rather than a goto to CTOR_LABEL.  */
13794   ctor_label = NULL_TREE;
13795   /* In check_return_expr we translate an empty return from a
13796      constructor to a return of `this'.  */
13797   finish_return_stmt (NULL_TREE);
13798   /* Mark the end of the constructor.  */
13799   add_tree (build_min_nt (CTOR_STMT));
13800 }
13801
13802 /* At the end of every destructor we generate code to restore virtual
13803    function tables to the values desired by base classes and to call
13804    to base class destructors.  Do that now.  */
13805
13806 static void
13807 finish_destructor_body ()
13808 {
13809   tree compound_stmt;
13810   tree virtual_size;
13811   tree exprstmt;
13812   tree if_stmt;
13813
13814   /* Create a block to contain all the extra code.  */
13815   compound_stmt = begin_compound_stmt (/*has_no_scope=*/0);
13816
13817   /* Any return from a destructor will end up here.  */
13818   add_tree (build_min_nt (LABEL_STMT, dtor_label));
13819
13820   /* Generate the code to call destructor on base class.  If this
13821      destructor belongs to a class with virtual functions, then set
13822      the virtual function table pointer to represent the type of our
13823      base class.  */
13824
13825   /* This side-effect makes call to `build_delete' generate the code
13826      we have to have at the end of this destructor.  `build_delete'
13827      will set the flag again.  */
13828   TYPE_HAS_DESTRUCTOR (current_class_type) = 0;
13829
13830   exprstmt = build_delete (current_class_type,
13831                            current_class_ref,
13832                            integer_zero_node,
13833                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
13834                            0);
13835
13836   if (exprstmt != error_mark_node
13837       && (TREE_CODE (exprstmt) != NOP_EXPR
13838           || TREE_OPERAND (exprstmt, 0) != integer_zero_node
13839           || TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)))
13840     {
13841       if (exprstmt != void_zero_node)
13842         /* Don't call `expand_expr_stmt' if we're not going to do
13843            anything, since -Wall will give a diagnostic.  */
13844         finish_expr_stmt (exprstmt);
13845
13846       /* Run destructors for all virtual baseclasses.  */
13847       if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type))
13848         {
13849           tree vbases = nreverse (copy_list (CLASSTYPE_VBASECLASSES (current_class_type)));
13850           tree if_stmt = begin_if_stmt ();
13851           finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13852                                       current_in_charge_parm,
13853                                       integer_two_node),
13854                                if_stmt);
13855
13856           while (vbases)
13857             {
13858               if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (vbases)))
13859                 {
13860                   tree vb = get_vbase
13861                     (BINFO_TYPE (vbases),
13862                      TYPE_BINFO (current_class_type));
13863                   finish_expr_stmt
13864                     (build_scoped_method_call
13865                      (current_class_ref, vb, complete_dtor_identifier,
13866                       NULL_TREE));
13867                 }
13868               vbases = TREE_CHAIN (vbases);
13869             }
13870
13871           finish_then_clause (if_stmt);
13872           finish_if_stmt ();
13873         }
13874     }
13875
13876   virtual_size = c_sizeof (current_class_type);
13877
13878   /* At the end, call delete if that's what's requested.  */
13879
13880   /* FDIS sez: At the point of definition of a virtual destructor
13881      (including an implicit definition), non-placement operator delete
13882      shall be looked up in the scope of the destructor's class and if
13883      found shall be accessible and unambiguous.
13884
13885      This is somewhat unclear, but I take it to mean that if the class
13886      only defines placement deletes we don't do anything here.  So we
13887      pass LOOKUP_SPECULATIVELY; delete_sanity will complain for us if
13888      they ever try to delete one of these.  */
13889   exprstmt = build_op_delete_call
13890     (DELETE_EXPR, current_class_ptr, virtual_size,
13891      LOOKUP_NORMAL | LOOKUP_SPECULATIVELY, NULL_TREE);
13892
13893   if_stmt = begin_if_stmt ();
13894   finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
13895                               current_in_charge_parm,
13896                               integer_one_node),
13897                        if_stmt);
13898   finish_expr_stmt (exprstmt);
13899   finish_then_clause (if_stmt);
13900   finish_if_stmt ();
13901
13902   /* Close the block we started above.  */
13903   finish_compound_stmt (/*has_no_scope=*/0, compound_stmt);
13904 }
13905
13906 /* Finish up a function declaration and compile that function
13907    all the way to assembler language output.  The free the storage
13908    for the function definition.
13909
13910    FLAGS is a bitwise or of the following values:
13911      1 - CALL_POPLEVEL
13912        An extra call to poplevel (and expand_end_bindings) must be
13913        made to take care of the binding contour for the base
13914        initializers.  This is only relevant for constructors.
13915      2 - INCLASS_INLINE
13916        We just finished processing the body of an in-class inline
13917        function definition.  (This processing will have taken place
13918        after the class definition is complete.)  */
13919
13920 tree
13921 finish_function (flags)
13922      int flags;
13923 {
13924   register tree fndecl = current_function_decl;
13925   tree fntype, ctype = NULL_TREE;
13926   /* Label to use if this function is supposed to return a value.  */
13927   tree no_return_label = NULL_TREE;
13928   int call_poplevel = (flags & 1) != 0;
13929   int inclass_inline = (flags & 2) != 0;
13930   int expand_p;
13931   int nested;
13932   int current_line = lineno;
13933
13934   /* When we get some parse errors, we can end up without a
13935      current_function_decl, so cope.  */
13936   if (fndecl == NULL_TREE)
13937     return error_mark_node;
13938
13939   nested = function_depth > 1;
13940   fntype = TREE_TYPE (fndecl);
13941
13942   /*  TREE_READONLY (fndecl) = 1;
13943       This caused &foo to be of type ptr-to-const-function
13944       which then got a warning when stored in a ptr-to-function variable.  */
13945
13946   /* This happens on strange parse errors.  */
13947   if (! current_function_parms_stored)
13948     {
13949       call_poplevel = 0;
13950       store_parm_decls ();
13951     }
13952
13953   /* For a cloned function, we've already got all the code we need;
13954      there's no need to add any extra bits.  */
13955   if (building_stmt_tree () && DECL_CLONED_FUNCTION_P (fndecl))
13956     ;
13957   else if (building_stmt_tree ())
13958     {
13959       if (DECL_CONSTRUCTOR_P (fndecl))
13960         {
13961           finish_constructor_body ();
13962           if (call_poplevel)
13963             do_poplevel ();
13964         }
13965       else if (DECL_DESTRUCTOR_P (fndecl) && !processing_template_decl)
13966         finish_destructor_body ();
13967       else if (DECL_MAIN_P (fndecl))
13968         {
13969           /* Make it so that `main' always returns 0 by default.  */
13970 #ifdef VMS
13971           finish_return_stmt (integer_one_node);
13972 #else
13973           finish_return_stmt (integer_zero_node);
13974 #endif
13975         }
13976
13977       /* Finish dealing with exception specifiers.  */
13978       if (flag_exceptions && !processing_template_decl
13979           && flag_enforce_eh_specs
13980           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
13981         expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS
13982                             (TREE_TYPE (current_function_decl)),
13983                             current_eh_spec_try_block);
13984     }
13985   else
13986     {
13987 #if 0
13988       if (write_symbols != NO_DEBUG /*&& TREE_CODE (fntype) != METHOD_TYPE*/)
13989         {
13990           /* Keep this code around in case we later want to control debug info
13991              based on whether a type is "used".  (jason 1999-11-11) */
13992
13993           tree ttype = target_type (fntype);
13994           tree parmdecl;
13995
13996           if (IS_AGGR_TYPE (ttype))
13997             /* Let debugger know it should output info for this type.  */
13998             note_debug_info_needed (ttype);
13999
14000           for (parmdecl = DECL_ARGUMENTS (fndecl); parmdecl; parmdecl = TREE_CHAIN (parmdecl))
14001             {
14002               ttype = target_type (TREE_TYPE (parmdecl));
14003               if (IS_AGGR_TYPE (ttype))
14004                 /* Let debugger know it should output info for this type.  */
14005                 note_debug_info_needed (ttype);
14006             }
14007         }
14008 #endif
14009
14010       /* Clean house because we will need to reorder insns here.  */
14011       do_pending_stack_adjust ();
14012
14013       if (dtor_label)
14014         ;
14015       else if (DECL_CONSTRUCTOR_P (fndecl))
14016         {
14017           if (call_poplevel)
14018             do_poplevel ();
14019         }
14020       else if (return_label != NULL_RTX
14021                && flag_this_is_variable <= 0
14022                && current_function_return_value == NULL_TREE
14023                && ! DECL_NAME (DECL_RESULT (current_function_decl)))
14024         no_return_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
14025
14026       if (flag_exceptions)
14027         expand_exception_blocks ();
14028
14029       /* If this function is supposed to return a value, ensure that
14030          we do not fall into the cleanups by mistake.  The end of our
14031          function will look like this:
14032
14033          user code (may have return stmt somewhere)
14034          goto no_return_label
14035          cleanup_label:
14036          cleanups
14037          goto return_label
14038          no_return_label:
14039          NOTE_INSN_FUNCTION_END
14040          return_label:
14041          things for return
14042
14043          If the user omits a return stmt in the USER CODE section, we
14044          will have a control path which reaches NOTE_INSN_FUNCTION_END.
14045          Otherwise, we won't.  */
14046       if (no_return_label)
14047         {
14048           DECL_CONTEXT (no_return_label) = fndecl;
14049           DECL_INITIAL (no_return_label) = error_mark_node;
14050           DECL_SOURCE_FILE (no_return_label) = input_filename;
14051           DECL_SOURCE_LINE (no_return_label) = current_line;
14052           expand_goto (no_return_label);
14053         }
14054
14055       if (cleanup_label)
14056         {
14057           /* Remove the binding contour which is used
14058              to catch cleanup-generated temporaries.  */
14059           expand_end_bindings (0, 0, 0);
14060           poplevel (0, 0, 0);
14061
14062           /* Emit label at beginning of cleanup code for parameters.  */
14063           emit_label (cleanup_label);
14064         }
14065
14066       /* Get return value into register if that's where it's supposed
14067          to be.  */
14068       if (original_result_rtx)
14069         fixup_result_decl (DECL_RESULT (fndecl), original_result_rtx);
14070
14071       /* Finish building code that will trigger warnings if users forget
14072          to make their functions return values.  */
14073       if (no_return_label || cleanup_label)
14074         emit_jump (return_label);
14075       if (no_return_label)
14076         {
14077           /* We don't need to call `expand_*_return' here because we
14078              don't need any cleanups here--this path of code is only
14079              for error checking purposes.  */
14080           expand_label (no_return_label);
14081         }
14082
14083       /* We hard-wired immediate_size_expand to zero in
14084          start_function.  Expand_function_end will decrement this
14085          variable.  So, we set the variable to one here, so that after
14086          the decrement it will remain zero.  */
14087       immediate_size_expand = 1;
14088
14089       /* Generate rtl for function exit.  */
14090       expand_function_end (input_filename, current_line, 1);
14091     }
14092
14093   /* We have to save this value here in case
14094      maybe_end_member_template_processing decides to pop all the
14095      template parameters.  */
14096   expand_p = !building_stmt_tree ();
14097
14098   /* If we're saving up tree structure, tie off the function now.  */
14099   if (!expand_p)
14100     finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
14101
14102   /* This must come after expand_function_end because cleanups might
14103      have declarations (from inline functions) that need to go into
14104      this function's blocks.  */
14105   if (doing_semantic_analysis_p ())
14106     {
14107       if (current_binding_level->parm_flag != 1)
14108         my_friendly_abort (122);
14109       poplevel (1, 0, 1);
14110     }
14111
14112   /* Remember that we were in class scope.  */
14113   if (current_class_name)
14114     ctype = current_class_type;
14115
14116   /* Must mark the RESULT_DECL as being in this function.  */
14117   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14118
14119   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14120      to the FUNCTION_DECL node itself.  */
14121   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14122
14123   /* Save away current state, if appropriate.  */
14124   if (!expanding_p && !processing_template_decl)
14125     save_function_data (fndecl);
14126
14127   /* If this function calls `setjmp' it cannot be inlined.  When
14128      `longjmp' is called it is not guaranteed to restore the value of
14129      local variables that have been modified since the call to
14130      `setjmp'.  So, if were to inline this function into some caller
14131      `c', then when we `longjmp', we might not restore all variables
14132      in `c'.  (It might seem, at first blush, that there's no way for
14133      this function to modify local variables in `c', but their
14134      addresses may have been stored somewhere accessible to this
14135      function.)  */
14136   if (!expanding_p && !processing_template_decl && calls_setjmp_p (fndecl))
14137     DECL_UNINLINABLE (fndecl) = 1;
14138
14139   if (expand_p)
14140     {
14141       int returns_null;
14142       int returns_value;
14143
14144       /* So we can tell if jump_optimize sets it to 1.  */
14145       can_reach_end = 0;
14146
14147       /* Before we call rest_of_compilation (which will pop the
14148          CURRENT_FUNCTION), we must save these values.  */
14149       returns_null = current_function_returns_null;
14150       returns_value = current_function_returns_value;
14151
14152       /* If this is a nested function (like a template instantiation
14153          that we're compiling in the midst of compiling something
14154          else), push a new GC context.  That will keep local variables
14155          on the stack from being collected while we're doing the
14156          compilation of this function.  */
14157       if (function_depth > 1)
14158         ggc_push_context ();
14159
14160       /* Run the optimizers and output the assembler code for this
14161          function.  */
14162       if (DECL_ARTIFICIAL (fndecl))
14163         {
14164           /* Do we really *want* to inline this synthesized method?  */
14165
14166           int save_fif = flag_inline_functions;
14167           flag_inline_functions = 1;
14168
14169           /* Turn off DECL_INLINE for the moment so function_cannot_inline_p
14170              will check our size.  */
14171           DECL_INLINE (fndecl) = 0;
14172
14173           rest_of_compilation (fndecl);
14174           flag_inline_functions = save_fif;
14175         }
14176       else
14177         rest_of_compilation (fndecl);
14178
14179       /* Undo the call to ggc_push_context above.  */
14180       if (function_depth > 1)
14181         ggc_pop_context ();
14182
14183       if (DECL_SAVED_INSNS (fndecl) && ! TREE_ASM_WRITTEN (fndecl))
14184         {
14185           /* Set DECL_EXTERNAL so that assemble_external will be called as
14186              necessary.  We'll clear it again in finish_file.  */
14187           if (! DECL_EXTERNAL (fndecl))
14188             DECL_NOT_REALLY_EXTERN (fndecl) = 1;
14189           DECL_EXTERNAL (fndecl) = 1;
14190           defer_fn (fndecl);
14191         }
14192
14193 #if 0
14194       /* Keep this code around in case we later want to control debug info
14195          based on whether a type is "used".  (jason 1999-11-11) */
14196
14197       if (ctype && TREE_ASM_WRITTEN (fndecl))
14198         note_debug_info_needed (ctype);
14199 #endif
14200
14201       returns_null |= can_reach_end;
14202
14203       /* Since we don't normally go through c_expand_return for constructors,
14204          this normally gets the wrong value.
14205          Also, named return values have their return codes emitted after
14206          NOTE_INSN_FUNCTION_END, confusing jump.c.  */
14207       if (DECL_CONSTRUCTOR_P (fndecl)
14208           || DECL_NAME (DECL_RESULT (fndecl)) != NULL_TREE)
14209         returns_null = 0;
14210
14211       if (TREE_THIS_VOLATILE (fndecl) && returns_null)
14212         cp_warning ("`noreturn' function `%D' does return", fndecl);
14213       else if ((warn_return_type || pedantic)
14214                && returns_null
14215                && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE)
14216         {
14217           /* If this function returns non-void and control can drop through,
14218              complain.  */
14219           cp_warning ("control reaches end of non-void function `%D'", fndecl);
14220         }
14221       /* With just -W, complain only if function returns both with
14222          and without a value.  */
14223       else if (extra_warnings && returns_value && returns_null)
14224         warning ("this function may return with or without a value");
14225     }
14226   else
14227     {
14228       /* Clear out memory we no longer need.  */
14229       free_after_parsing (cfun);
14230       /* Since we never call rest_of_compilation, we never clear
14231          CFUN.  Do so explicitly.  */
14232       free_after_compilation (cfun);
14233       cfun = NULL;
14234     }
14235
14236   /* If this is a in-class inline definition, we may have to pop the
14237      bindings for the template parameters that we added in
14238      maybe_begin_member_template_processing when start_function was
14239      called.  */
14240   if (inclass_inline)
14241     maybe_end_member_template_processing ();
14242
14243   /* Leave the scope of the class.  */
14244   if (ctype)
14245     pop_nested_class ();
14246
14247   --function_depth;
14248
14249   if (!DECL_SAVED_INSNS (fndecl) && !DECL_SAVED_FUNCTION_DATA (fndecl)
14250       && !(flag_inline_trees && DECL_INLINE (fndecl)))
14251     {
14252       tree t;
14253
14254       /* Stop pointing to the local nodes about to be freed.  */
14255       /* But DECL_INITIAL must remain nonzero so we know this
14256          was an actual function definition.  */
14257       DECL_INITIAL (fndecl) = error_mark_node;
14258       for (t = DECL_ARGUMENTS (fndecl); t; t = TREE_CHAIN (t))
14259         DECL_RTL (t) = DECL_INCOMING_RTL (t) = NULL_RTX;
14260     }
14261
14262   if (DECL_STATIC_CONSTRUCTOR (fndecl))
14263     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
14264   if (DECL_STATIC_DESTRUCTOR (fndecl))
14265     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
14266
14267   /* Clean up.  */
14268   if (! nested)
14269     {
14270       /* Let the error reporting routines know that we're outside a
14271          function.  For a nested function, this value is used in
14272          pop_cp_function_context and then reset via pop_function_context.  */
14273       current_function_decl = NULL_TREE;
14274       /* We don't really care about obstacks, but the middle-end
14275          sometimes cares on what obstck things are located.  */
14276       permanent_allocation (1);
14277     }
14278
14279   return fndecl;
14280 }
14281 \f
14282 /* Create the FUNCTION_DECL for a function definition.
14283    DECLSPECS and DECLARATOR are the parts of the declaration;
14284    they describe the return type and the name of the function,
14285    but twisted together in a fashion that parallels the syntax of C.
14286
14287    This function creates a binding context for the function body
14288    as well as setting up the FUNCTION_DECL in current_function_decl.
14289
14290    Returns a FUNCTION_DECL on success.
14291
14292    If the DECLARATOR is not suitable for a function (it defines a datum
14293    instead), we return 0, which tells yyparse to report a parse error.
14294
14295    May return void_type_node indicating that this method is actually
14296    a friend.  See grokfield for more details.
14297
14298    Came here with a `.pushlevel' .
14299
14300    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14301    CHANGES TO CODE IN `grokfield'.  */
14302
14303 tree
14304 start_method (declspecs, declarator, attrlist)
14305      tree declarator, declspecs, attrlist;
14306 {
14307   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14308                                 attrlist);
14309
14310   /* Something too ugly to handle.  */
14311   if (fndecl == NULL_TREE)
14312     return NULL_TREE;
14313
14314   /* Pass friends other than inline friend functions back.  */
14315   if (fndecl == void_type_node)
14316     return fndecl;
14317
14318   if (TREE_CODE (fndecl) != FUNCTION_DECL)
14319     /* Not a function, tell parser to report parse error.  */
14320     return NULL_TREE;
14321
14322   if (DECL_IN_AGGR_P (fndecl))
14323     {
14324       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (fndecl)) != current_class_type)
14325         {
14326           if (DECL_CONTEXT (fndecl)
14327               && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
14328             cp_error ("`%D' is already defined in class %s", fndecl,
14329                              TYPE_NAME_STRING (DECL_CONTEXT (fndecl)));
14330         }
14331       return void_type_node;
14332     }
14333
14334   check_template_shadow (fndecl);
14335
14336   DECL_THIS_INLINE (fndecl) = 1;
14337
14338   if (flag_default_inline)
14339     DECL_INLINE (fndecl) = 1;
14340
14341   /* We process method specializations in finish_struct_1.  */
14342   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14343     fndecl = push_template_decl (fndecl);
14344
14345   if (! DECL_FRIEND_P (fndecl))
14346     {
14347       if (TREE_CHAIN (fndecl))
14348         {
14349           fndecl = copy_node (fndecl);
14350           TREE_CHAIN (fndecl) = NULL_TREE;
14351         }
14352
14353       if (DECL_CONSTRUCTOR_P (fndecl))
14354         {
14355           if (! grok_ctor_properties (current_class_type, fndecl))
14356             return void_type_node;
14357         }
14358       else if (IDENTIFIER_OPNAME_P (DECL_NAME (fndecl)))
14359         grok_op_properties (fndecl, DECL_VIRTUAL_P (fndecl), 0);
14360     }
14361
14362   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
14363
14364   /* Make a place for the parms */
14365   pushlevel (0);
14366   current_binding_level->parm_flag = 1;
14367
14368   DECL_IN_AGGR_P (fndecl) = 1;
14369   return fndecl;
14370 }
14371
14372 /* Go through the motions of finishing a function definition.
14373    We don't compile this method until after the whole class has
14374    been processed.
14375
14376    FINISH_METHOD must return something that looks as though it
14377    came from GROKFIELD (since we are defining a method, after all).
14378
14379    This is called after parsing the body of the function definition.
14380    STMTS is the chain of statements that makes up the function body.
14381
14382    DECL is the ..._DECL that `start_method' provided.  */
14383
14384 tree
14385 finish_method (decl)
14386      tree decl;
14387 {
14388   register tree fndecl = decl;
14389   tree old_initial;
14390
14391   register tree link;
14392
14393   if (decl == void_type_node)
14394     return decl;
14395
14396   old_initial = DECL_INITIAL (fndecl);
14397
14398   /* Undo the level for the parms (from start_method).
14399      This is like poplevel, but it causes nothing to be
14400      saved.  Saving information here confuses symbol-table
14401      output routines.  Besides, this information will
14402      be correctly output when this method is actually
14403      compiled.  */
14404
14405   /* Clear out the meanings of the local variables of this level;
14406      also record in each decl which block it belongs to.  */
14407
14408   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
14409     {
14410       if (DECL_NAME (link) != NULL_TREE)
14411         pop_binding (DECL_NAME (link), link);
14412       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
14413       DECL_CONTEXT (link) = NULL_TREE;
14414     }
14415
14416   GNU_xref_end_scope ((HOST_WIDE_INT) current_binding_level,
14417                       (HOST_WIDE_INT) current_binding_level->level_chain,
14418                       current_binding_level->parm_flag,
14419                       current_binding_level->keep);
14420
14421   poplevel (0, 0, 0);
14422
14423   DECL_INITIAL (fndecl) = old_initial;
14424
14425   /* We used to check if the context of FNDECL was different from
14426      current_class_type as another way to get inside here.  This didn't work
14427      for String.cc in libg++.  */
14428   if (DECL_FRIEND_P (fndecl))
14429     {
14430       CLASSTYPE_INLINE_FRIENDS (current_class_type)
14431         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
14432       decl = void_type_node;
14433     }
14434
14435   return decl;
14436 }
14437 \f
14438 /* Called when a new struct TYPE is defined.
14439    If this structure or union completes the type of any previous
14440    variable declaration, lay it out and output its rtl.  */
14441
14442 void
14443 hack_incomplete_structures (type)
14444      tree type;
14445 {
14446   tree *list;
14447   struct binding_level *level;
14448
14449   if (!type) /* Don't do this for class templates.  */
14450     return;
14451
14452   if (namespace_bindings_p ())
14453     {
14454       level = 0;
14455       list = &namespace_scope_incomplete;
14456     }
14457   else
14458     {
14459       level = innermost_nonclass_level ();
14460       list = &level->incomplete;
14461     }
14462
14463   while (1)
14464     {
14465       while (*list)
14466         {
14467           tree decl = TREE_VALUE (*list);
14468           if ((decl && TREE_TYPE (decl) == type)
14469               || (TREE_TYPE (decl)
14470                   && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14471                   && TREE_TYPE (TREE_TYPE (decl)) == type))
14472             {
14473               int toplevel = toplevel_bindings_p ();
14474               if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
14475                   && TREE_TYPE (TREE_TYPE (decl)) == type)
14476                 layout_type (TREE_TYPE (decl));
14477               layout_decl (decl, 0);
14478               rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
14479               if (! toplevel)
14480                 {
14481                   tree cleanup;
14482                   expand_decl (decl);
14483                   cleanup = maybe_build_cleanup (decl);
14484                   expand_decl_init (decl);
14485                   if (! expand_decl_cleanup (decl, cleanup))
14486                     cp_error ("parser lost in parsing declaration of `%D'",
14487                               decl);
14488                 }
14489               *list = TREE_CHAIN (*list);
14490             }
14491           else
14492             list = &TREE_CHAIN (*list);
14493         }
14494
14495       /* Keep looking through artificial binding levels generated
14496          for local variables.  */
14497       if (level && level->keep == 2)
14498         {
14499           level = level->level_chain;
14500           list = &level->incomplete;
14501         }
14502       else
14503         break;
14504     }
14505 }
14506
14507 /* If DECL is of a type which needs a cleanup, build that cleanup here.
14508    See build_delete for information about AUTO_DELETE.  */
14509
14510 static tree
14511 maybe_build_cleanup_1 (decl, auto_delete)
14512      tree decl, auto_delete;
14513 {
14514   tree type = TREE_TYPE (decl);
14515   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
14516     {
14517       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
14518       tree rval;
14519
14520       if (TREE_CODE (type) == ARRAY_TYPE)
14521         rval = decl;
14522       else
14523         {
14524           mark_addressable (decl);
14525           rval = build_unary_op (ADDR_EXPR, decl, 0);
14526         }
14527
14528       /* Optimize for space over speed here.  */
14529       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
14530           || flag_expensive_optimizations)
14531         flags |= LOOKUP_NONVIRTUAL;
14532
14533       rval = build_delete (TREE_TYPE (rval), rval, auto_delete, flags, 0);
14534
14535       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
14536           && ! TYPE_HAS_DESTRUCTOR (type))
14537         rval = build_compound_expr (tree_cons (NULL_TREE, rval,
14538                                                build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
14539
14540       return rval;
14541     }
14542   return 0;
14543 }
14544
14545 /* If DECL is of a type which needs a cleanup, build that cleanup
14546    here.  The cleanup does not free the storage with a call a delete.  */
14547
14548 tree
14549 maybe_build_cleanup (decl)
14550      tree decl;
14551 {
14552   return maybe_build_cleanup_1 (decl, integer_two_node);
14553 }
14554 \f
14555 /* Expand a C++ expression at the statement level.
14556    This is needed to ferret out nodes which have UNKNOWN_TYPE.
14557    The C++ type checker should get all of these out when
14558    expressions are combined with other, type-providing, expressions,
14559    leaving only orphan expressions, such as:
14560
14561    &class::bar;         / / takes its address, but does nothing with it.  */
14562
14563 void
14564 cplus_expand_expr_stmt (exp)
14565      tree exp;
14566 {
14567 #if 0
14568   /* We should do this eventually, but right now this causes regex.o from
14569      libg++ to miscompile, and tString to core dump.  */
14570   exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp);
14571 #endif
14572
14573   /* If we don't do this, we end up down inside expand_expr
14574      trying to do TYPE_MODE on the ERROR_MARK, and really
14575      go outside the bounds of the type.  */
14576   if (exp != error_mark_node)
14577     expand_expr_stmt (exp);
14578 }
14579
14580 /* When a stmt has been parsed, this function is called.  */
14581
14582 void
14583 finish_stmt ()
14584 {
14585   /* Always assume this statement was not an expression statement.  If
14586      it actually was an expression statement, its our callers
14587      responsibility to fix this up.  */
14588   last_expr_type = NULL_TREE;
14589 }
14590
14591 /* DECL was originally constructed as a non-static member function,
14592    but turned out to be static.  Update it accordingly.  */
14593
14594 void
14595 revert_static_member_fn (decl)
14596      tree decl;
14597 {
14598   tree tmp;
14599   tree function = TREE_TYPE (decl);
14600   tree args = TYPE_ARG_TYPES (function);
14601
14602   if (CP_TYPE_QUALS (TREE_TYPE (TREE_VALUE (args)))
14603       != TYPE_UNQUALIFIED)
14604     cp_error ("static member function `%#D' declared with type qualifiers",
14605               *decl);
14606
14607   args = TREE_CHAIN (args);
14608   tmp = build_function_type (TREE_TYPE (function), args);
14609   tmp = build_qualified_type (tmp, CP_TYPE_QUALS (function));
14610   tmp = build_exception_variant (tmp,
14611                                  TYPE_RAISES_EXCEPTIONS (function));
14612   TREE_TYPE (decl) = tmp;
14613   if (DECL_ARGUMENTS (decl))
14614     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
14615   DECL_STATIC_FUNCTION_P (decl) = 1;
14616 }
14617
14618 /* Initialize the variables used during compilation of a C++
14619    function.  */
14620
14621 static void
14622 push_cp_function_context (f)
14623      struct function *f;
14624 {
14625   struct language_function *p
14626     = ((struct language_function *)
14627        xcalloc (1, sizeof (struct language_function)));
14628   f->language = p;
14629
14630   /* It takes an explicit call to expand_body to generate RTL for a
14631      function.  */
14632   expanding_p = 0;
14633
14634   /* Whenever we start a new function, we destroy temporaries in the
14635      usual way.  */
14636   stmts_are_full_exprs_p = 1;
14637 }
14638
14639 /* Free the language-specific parts of F, now that we've finished
14640    compiling the function.  */
14641
14642 static void
14643 pop_cp_function_context (f)
14644      struct function *f;
14645 {
14646   if (f->language)
14647     free (f->language);
14648   f->language = 0;
14649 }
14650
14651 /* Mark P for GC.  */
14652
14653 static void
14654 mark_lang_function (p)
14655      struct language_function *p;
14656 {
14657   if (!p)
14658     return;
14659
14660   ggc_mark_tree (p->x_named_labels);
14661   ggc_mark_tree (p->x_ctor_label);
14662   ggc_mark_tree (p->x_dtor_label);
14663   ggc_mark_tree (p->x_base_init_list);
14664   ggc_mark_tree (p->x_member_init_list);
14665   ggc_mark_tree (p->x_current_class_ptr);
14666   ggc_mark_tree (p->x_current_class_ref);
14667   ggc_mark_tree (p->x_eh_spec_try_block);
14668   ggc_mark_tree (p->x_scope_stmt_stack);
14669
14670   ggc_mark_rtx (p->x_result_rtx);
14671
14672   mark_stmt_tree (&p->x_stmt_tree);
14673   mark_binding_level (&p->bindings);
14674 }
14675
14676 /* Mark the language-specific data in F for GC.  */
14677
14678 static void
14679 mark_cp_function_context (f)
14680      struct function *f;
14681 {
14682   mark_lang_function (f->language);
14683 }
14684
14685 void
14686 lang_mark_false_label_stack (l)
14687      struct label_node *l;
14688 {
14689   /* C++ doesn't use false_label_stack.  It better be NULL.  */
14690   my_friendly_assert (l == NULL, 19990904);
14691 }
14692
14693 void
14694 lang_mark_tree (t)
14695      tree t;
14696 {
14697   enum tree_code code = TREE_CODE (t);
14698   if (code == IDENTIFIER_NODE)
14699     {
14700       struct lang_identifier *li = (struct lang_identifier *) t;
14701       struct lang_id2 *li2 = li->x;
14702       ggc_mark_tree (li->namespace_bindings);
14703       ggc_mark_tree (li->bindings);
14704       ggc_mark_tree (li->class_value);
14705       ggc_mark_tree (li->class_template_info);
14706
14707       if (li2)
14708         {
14709           ggc_mark_tree (li2->label_value);
14710           ggc_mark_tree (li2->implicit_decl);
14711           ggc_mark_tree (li2->error_locus);
14712         }
14713     }
14714   else if (code == CPLUS_BINDING)
14715     {
14716       if (BINDING_HAS_LEVEL_P (t))
14717         mark_binding_level (&BINDING_LEVEL (t));
14718       else
14719         ggc_mark_tree (BINDING_SCOPE (t));
14720       ggc_mark_tree (BINDING_VALUE (t));
14721     }
14722   else if (code == OVERLOAD)
14723     ggc_mark_tree (OVL_FUNCTION (t));
14724   else if (code == TEMPLATE_PARM_INDEX)
14725     ggc_mark_tree (TEMPLATE_PARM_DECL (t));
14726   else if (TREE_CODE_CLASS (code) == 'd')
14727     {
14728       struct lang_decl *ld = DECL_LANG_SPECIFIC (t);
14729
14730       if (ld)
14731         {
14732           ggc_mark (ld);
14733           if (!DECL_GLOBAL_CTOR_P (t) && !DECL_GLOBAL_DTOR_P (t))
14734             ggc_mark_tree (ld->decl_flags.u2.access);
14735           ggc_mark_tree (ld->decl_flags.context);
14736           if (TREE_CODE (t) != NAMESPACE_DECL)
14737             ggc_mark_tree (ld->decl_flags.u.template_info);
14738           else
14739             mark_binding_level (&NAMESPACE_LEVEL (t));
14740           if (CAN_HAVE_FULL_LANG_DECL_P (t))
14741             {
14742               ggc_mark_tree (ld->befriending_classes);
14743               ggc_mark_tree (ld->saved_tree);
14744               ggc_mark_tree (ld->cloned_function);
14745               if (TREE_CODE (t) == TYPE_DECL)
14746                 ggc_mark_tree (ld->u.sorted_fields);
14747               else if (TREE_CODE (t) == FUNCTION_DECL
14748                        && !DECL_PENDING_INLINE_P (t))
14749                 mark_lang_function (DECL_SAVED_FUNCTION_DATA (t));
14750             }
14751         }
14752     }
14753   else if (TREE_CODE_CLASS (code) == 't')
14754     {
14755       struct lang_type *lt = TYPE_LANG_SPECIFIC (t);
14756
14757       if (lt && !(TREE_CODE (t) == POINTER_TYPE
14758                   && TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE))
14759         {
14760           ggc_mark (lt);
14761           ggc_mark_tree (lt->vfields);
14762           ggc_mark_tree (lt->vbases);
14763           ggc_mark_tree (lt->tags);
14764           ggc_mark_tree (lt->search_slot);
14765           ggc_mark_tree (lt->size);
14766           ggc_mark_tree (lt->pure_virtuals);
14767           ggc_mark_tree (lt->friend_classes);
14768           ggc_mark_tree (lt->rtti);
14769           ggc_mark_tree (lt->methods);
14770           ggc_mark_tree (lt->template_info);
14771           ggc_mark_tree (lt->befriending_classes);
14772         }
14773       else if (lt)
14774         /* In the case of pointer-to-member function types, the
14775            TYPE_LANG_SPECIFIC is really just a tree.  */
14776         ggc_mark_tree ((tree) lt);
14777     }
14778 }