OSDN Git Service

* class.c (build_base_field): Use TYPE_ALIGN to examine a type.
[pf3gnuchains/gcc-fork.git] / gcc / cp / class.c
1 /* Functions related to building classes and their related objects.
2    Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000 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 /* High-level class interface.  */
25
26 #include "config.h"
27 #include "system.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "flags.h"
31 #include "rtl.h"
32 #include "output.h"
33 #include "toplev.h"
34 #include "ggc.h"
35 #include "lex.h"
36
37 #include "obstack.h"
38 #define obstack_chunk_alloc xmalloc
39 #define obstack_chunk_free free
40
41 /* This is how we tell when two virtual member functions are really the
42    same.  */
43 #define SAME_FN(FN1DECL, FN2DECL) (DECL_ASSEMBLER_NAME (FN1DECL) == DECL_ASSEMBLER_NAME (FN2DECL))
44
45 extern void set_class_shadows PARAMS ((tree));
46
47 /* The number of nested classes being processed.  If we are not in the
48    scope of any class, this is zero.  */
49
50 int current_class_depth;
51
52 /* In order to deal with nested classes, we keep a stack of classes.
53    The topmost entry is the innermost class, and is the entry at index
54    CURRENT_CLASS_DEPTH  */
55
56 typedef struct class_stack_node {
57   /* The name of the class.  */
58   tree name;
59
60   /* The _TYPE node for the class.  */
61   tree type;
62
63   /* The access specifier pending for new declarations in the scope of
64      this class.  */
65   tree access;
66
67   /* If were defining TYPE, the names used in this class.  */
68   splay_tree names_used;
69 }* class_stack_node_t;
70
71 /* The stack itself.  This is an dynamically resized array.  The
72    number of elements allocated is CURRENT_CLASS_STACK_SIZE.  */
73 static int current_class_stack_size;
74 static class_stack_node_t current_class_stack;
75
76 static tree get_vfield_name PARAMS ((tree));
77 static void finish_struct_anon PARAMS ((tree));
78 static tree build_vbase_pointer PARAMS ((tree, tree));
79 static tree build_vtable_entry PARAMS ((tree, tree, tree));
80 static tree get_vtable_name PARAMS ((tree));
81 static tree get_derived_offset PARAMS ((tree, tree));
82 static tree get_basefndecls PARAMS ((tree, tree));
83 static void set_rtti_entry PARAMS ((tree, tree, tree));
84 static int build_primary_vtable PARAMS ((tree, tree));
85 static int build_secondary_vtable PARAMS ((tree, tree));
86 static tree dfs_finish_vtbls PARAMS ((tree, void *));
87 static tree dfs_accumulate_vtbl_inits PARAMS ((tree, void *));
88 static void finish_vtbls PARAMS ((tree));
89 static void modify_vtable_entry PARAMS ((tree, tree, tree, tree, tree *));
90 static void add_virtual_function PARAMS ((tree *, tree *, int *, tree, tree));
91 static tree delete_duplicate_fields_1 PARAMS ((tree, tree));
92 static void delete_duplicate_fields PARAMS ((tree));
93 static void finish_struct_bits PARAMS ((tree));
94 static int alter_access PARAMS ((tree, tree, tree));
95 static void handle_using_decl PARAMS ((tree, tree));
96 static int overrides PARAMS ((tree, tree));
97 static int strictly_overrides PARAMS ((tree, tree));
98 static void mark_overriders PARAMS ((tree, tree));
99 static void check_for_override PARAMS ((tree, tree));
100 static tree dfs_modify_vtables PARAMS ((tree, void *));
101 static tree modify_all_vtables PARAMS ((tree, int *, tree));
102 static void determine_primary_base PARAMS ((tree, int *));
103 static void finish_struct_methods PARAMS ((tree));
104 static void maybe_warn_about_overly_private_class PARAMS ((tree));
105 static int field_decl_cmp PARAMS ((const tree *, const tree *));
106 static int method_name_cmp PARAMS ((const tree *, const tree *));
107 static tree add_implicitly_declared_members PARAMS ((tree, int, int, int));
108 static tree fixed_type_or_null PARAMS ((tree, int *));
109 static tree resolve_address_of_overloaded_function PARAMS ((tree, tree, int,
110                                                           int, tree));
111 static void build_vtable_entry_ref PARAMS ((tree, tree, tree));
112 static tree build_vtbl_initializer PARAMS ((tree, tree));
113 static int count_fields PARAMS ((tree));
114 static int add_fields_to_vec PARAMS ((tree, tree, int));
115 static void check_bitfield_decl PARAMS ((tree));
116 static void check_field_decl PARAMS ((tree, tree, int *, int *, int *, int *));
117 static void check_field_decls PARAMS ((tree, tree *, int *, int *, int *, 
118                                      int *));
119 static void build_base_field PARAMS ((record_layout_info, tree, int *,
120                                       unsigned int *, varray_type *));
121 static varray_type build_base_fields PARAMS ((record_layout_info, int *));
122 static tree build_vbase_pointer_fields PARAMS ((record_layout_info, int *));
123 static tree build_vtbl_or_vbase_field PARAMS ((tree, tree, tree, tree, tree,
124                                                int *));
125 static void check_methods PARAMS ((tree));
126 static void remove_zero_width_bit_fields PARAMS ((tree));
127 static void check_bases PARAMS ((tree, int *, int *, int *));
128 static void check_bases_and_members PARAMS ((tree, int *));
129 static tree create_vtable_ptr PARAMS ((tree, int *, int *, tree *, tree *));
130 static void layout_class_type PARAMS ((tree, int *, int *, tree *, tree *));
131 static void fixup_pending_inline PARAMS ((struct pending_inline *));
132 static void fixup_inline_methods PARAMS ((tree));
133 static void set_primary_base PARAMS ((tree, int, int *));
134 static tree dfs_propagate_binfo_offsets PARAMS ((tree, void *));
135 static void propagate_binfo_offsets PARAMS ((tree, tree));
136 static void layout_basetypes PARAMS ((tree));
137 static void layout_virtual_bases PARAMS ((tree));
138 static tree dfs_set_offset_for_shared_vbases PARAMS ((tree, void *));
139 static tree dfs_set_offset_for_unshared_vbases PARAMS ((tree, void *));
140 static tree dfs_build_vbase_offset_vtbl_entries PARAMS ((tree, void *));
141 static tree build_vbase_offset_vtbl_entries PARAMS ((tree, tree));
142 static tree dfs_vcall_offset_queue_p PARAMS ((tree, void *));
143 static tree dfs_build_vcall_offset_vtbl_entries PARAMS ((tree, void *));
144 static tree build_vcall_offset_vtbl_entries PARAMS ((tree, tree));
145 static tree dfs_count_virtuals PARAMS ((tree, void *));
146 static void start_vtable PARAMS ((tree, int *));
147 static void layout_vtable_decl PARAMS ((tree, int));
148 static int num_vfun_entries PARAMS ((tree));
149 static tree dfs_find_final_overrider PARAMS ((tree, void *));
150 static tree find_final_overrider PARAMS ((tree, tree, tree));
151 static tree dfs_find_base PARAMS ((tree, void *));
152 static int make_new_vtable PARAMS ((tree, tree));
153 extern void dump_class_hierarchy PARAMS ((tree, int));
154 static tree build_vtable PARAMS ((tree, tree, tree));
155 static void initialize_vtable PARAMS ((tree, tree));
156 static void layout_nonempty_base_or_field PARAMS ((record_layout_info,
157                                                    tree, tree,
158                                                    varray_type));
159
160 /* Variables shared between class.c and call.c.  */
161
162 #ifdef GATHER_STATISTICS
163 int n_vtables = 0;
164 int n_vtable_entries = 0;
165 int n_vtable_searches = 0;
166 int n_vtable_elems = 0;
167 int n_convert_harshness = 0;
168 int n_compute_conversion_costs = 0;
169 int n_build_method_call = 0;
170 int n_inner_fields_searched = 0;
171 #endif
172
173 /* Virtual base class layout.  */
174
175 /* Returns a list of virtual base class pointers as a chain of
176    FIELD_DECLS.  */
177
178 static tree
179 build_vbase_pointer_fields (rli, empty_p)
180      record_layout_info rli;
181      int *empty_p;
182 {
183   /* Chain to hold all the new FIELD_DECLs which point at virtual
184      base classes.  */
185   tree rec = rli->t;
186   tree vbase_decls = NULL_TREE;
187   tree binfos = TYPE_BINFO_BASETYPES (rec);
188   int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
189   tree decl;
190   int i;
191
192   /* Under the new ABI, there are no vbase pointers in the object.
193      Instead, the offsets are stored in the vtable.  */
194   if (vbase_offsets_in_vtable_p ())
195     return NULL_TREE;
196
197   /* Loop over the baseclasses, adding vbase pointers as needed.  */
198   for (i = 0; i < n_baseclasses; i++)
199     {
200       register tree base_binfo = TREE_VEC_ELT (binfos, i);
201       register tree basetype = BINFO_TYPE (base_binfo);
202
203       if (TYPE_SIZE (basetype) == 0)
204         /* This error is now reported in xref_tag, thus giving better
205            location information.  */
206         continue;
207
208       /* All basetypes are recorded in the association list of the
209          derived type.  */
210
211       if (TREE_VIA_VIRTUAL (base_binfo))
212         {
213           int j;
214           const char *name;
215
216           /* The offset for a virtual base class is only used in computing
217              virtual function tables and for initializing virtual base
218              pointers.  It is built once `get_vbase_types' is called.  */
219
220           /* If this basetype can come from another vbase pointer
221              without an additional indirection, we will share
222              that pointer.  If an indirection is involved, we
223              make our own pointer.  */
224           for (j = 0; j < n_baseclasses; j++)
225             {
226               tree other_base_binfo = TREE_VEC_ELT (binfos, j);
227               if (! TREE_VIA_VIRTUAL (other_base_binfo)
228                   && BINFO_FOR_VBASE (basetype, BINFO_TYPE (other_base_binfo)))
229                 goto got_it;
230             }
231           FORMAT_VBASE_NAME (name, basetype);
232           decl = build_vtbl_or_vbase_field (get_identifier (name), 
233                                             get_identifier (VTABLE_BASE),
234                                             build_pointer_type (basetype),
235                                             rec,
236                                             basetype,
237                                             empty_p);
238           BINFO_VPTR_FIELD (base_binfo) = decl;
239           TREE_CHAIN (decl) = vbase_decls;
240           layout_field (rli, decl);
241           vbase_decls = decl;
242           *empty_p = 0;
243
244         got_it:
245           /* The space this decl occupies has already been accounted for.  */
246           ;
247         }
248     }
249
250   return vbase_decls;
251 }
252
253 /* Called from build_vbase_offset_vtbl_entries via dfs_walk.  */
254
255 static tree
256 dfs_build_vbase_offset_vtbl_entries (binfo, data)
257      tree binfo;
258      void *data;
259 {
260   tree list = (tree) data;
261
262   if (TREE_TYPE (list) == binfo)
263     /* The TREE_TYPE of LIST is the base class from which we started
264        walking.  If that BINFO is virtual it's not a virtual baseclass
265        of itself.  */
266     ;
267   else if (TREE_VIA_VIRTUAL (binfo))
268     {
269       tree init;
270       tree vbase;
271
272       /* Remember the index to the vbase offset for this virtual
273          base.  */
274       vbase = BINFO_FOR_VBASE (TREE_TYPE (binfo), TREE_PURPOSE (list));
275       if (!TREE_VALUE (list))
276         BINFO_VPTR_FIELD (vbase) = build_int_2 (-1, 0);
277       else
278         {
279           BINFO_VPTR_FIELD (vbase) = TREE_PURPOSE (TREE_VALUE (list));
280           BINFO_VPTR_FIELD (vbase)
281             = fold (build (MINUS_EXPR, integer_type_node,
282                            BINFO_VPTR_FIELD (vbase), integer_one_node));
283         }
284
285       /* And record the offset at which this virtual base lies in the
286          vtable.  */
287       init = BINFO_OFFSET (binfo);
288       TREE_VALUE (list) = tree_cons (BINFO_VPTR_FIELD (vbase),
289                                      init, TREE_VALUE (list));
290     }
291
292   SET_BINFO_VTABLE_PATH_MARKED (binfo);
293   
294   return NULL_TREE;
295 }
296
297 /* Returns the initializers for the vbase offset entries in the vtable
298    for BINFO (which is part of the class hierarchy dominated by T), in
299    reverse order.  */
300
301 static tree
302 build_vbase_offset_vtbl_entries (binfo, t)
303      tree binfo;
304      tree t;
305 {
306   tree inits;
307   tree init;
308   tree list;
309
310   /* Under the old ABI, pointers to virtual bases are stored in each
311      object.  */
312   if (!vbase_offsets_in_vtable_p ())
313     return NULL_TREE;
314
315   /* If there are no virtual baseclasses, then there is nothing to
316      do.  */
317   if (!TYPE_USES_VIRTUAL_BASECLASSES (BINFO_TYPE (binfo)))
318     return NULL_TREE;
319
320   inits = NULL_TREE;
321
322   /* The offsets are allocated in the reverse order of a
323      depth-first left-to-right traversal of the hierarchy.  We use
324      BINFO_VTABLE_PATH_MARKED because we are ourselves during a
325      dfs_walk, and so BINFO_MARKED is already in use.  */
326   list = build_tree_list (t, NULL_TREE);
327   TREE_TYPE (list) = binfo;
328   dfs_walk (binfo,
329             dfs_build_vbase_offset_vtbl_entries,
330             dfs_vtable_path_unmarked_real_bases_queue_p,
331             list);
332   dfs_walk (binfo,
333             dfs_vtable_path_unmark,
334             dfs_vtable_path_marked_real_bases_queue_p,
335             list);
336   inits = nreverse (TREE_VALUE (list));
337
338   /* We've now got offsets in the right order.  However, the offsets
339      we've stored are offsets from the beginning of the complete
340      object, and we need offsets from this BINFO.  */
341   for (init = inits; init; init = TREE_CHAIN (init))
342     {
343       /* The dfs_build_vbase_offset_vtbl_entries routine uses the
344          TREE_PURPOSE to scribble in.  But, we need to clear it now so
345          that the values are not perceived as labeled initializers.  */
346       TREE_PURPOSE (init) = NULL_TREE;
347       TREE_VALUE (init)
348         = fold (build1 (NOP_EXPR, vtable_entry_type,
349                         size_diffop (TREE_VALUE (init),
350                                      BINFO_OFFSET (binfo))));
351     }
352
353   return inits;
354 }
355
356 typedef struct vcall_offset_data_s
357 {
358   /* The binfo for the most-derived type.  */
359   tree derived;
360   /* The binfo for the virtual base for which we're building
361      initializers.  */
362   tree vbase;
363   /* The vcall offset initializers built up so far.  */
364   tree inits;
365   /* The number of vcall offsets accumulated.  */
366   int offsets;
367 } vcall_offset_data;
368
369 /* Called from build_vcall_offset_vtbl_entries via dfs_walk.  */
370
371 static tree
372 dfs_vcall_offset_queue_p (binfo, data)
373      tree binfo;
374      void *data;
375 {
376   vcall_offset_data* vod = (vcall_offset_data *) data;
377
378   return (binfo == vod->vbase) ? binfo : dfs_skip_vbases (binfo, NULL);
379 }
380
381 /* Called from build_vcall_offset_vtbl_entries via dfs_walk.  */
382
383 static tree
384 dfs_build_vcall_offset_vtbl_entries (binfo, data)
385      tree binfo;
386      void *data;
387 {
388   vcall_offset_data* vod;
389   tree virtuals;
390   tree binfo_inits;
391
392   /* Primary bases are not interesting; all of the virtual
393      function table entries have been overridden.  */
394   if (BINFO_PRIMARY_MARKED_P (binfo))
395      return NULL_TREE;
396
397   vod = (vcall_offset_data *) data;
398   binfo_inits = NULL_TREE;
399
400   /* We chain the offsets on in reverse order.  That's correct --
401      build_vtbl_initializer will straighten them out.  */
402   for (virtuals = skip_rtti_stuff (binfo,
403                                    BINFO_TYPE (binfo),
404                                    NULL);
405        virtuals;
406        virtuals = TREE_CHAIN (virtuals))
407     {
408       /* Figure out what function we're looking at.  */
409       tree fn = TREE_VALUE (virtuals);
410       tree base = DECL_CONTEXT (fn);
411       /* The FN comes from BASE.  So, we must caculate the adjustment
412          from the virtual base that derived from BINFO to BASE.  */
413       tree base_binfo = get_binfo (base, vod->derived, /*protect=*/0);
414
415       binfo_inits
416         = tree_cons (NULL_TREE,
417                      fold (build1 (NOP_EXPR, vtable_entry_type,
418                                    size_diffop (BINFO_OFFSET (base_binfo),
419                                                 BINFO_OFFSET (vod->vbase)))),
420                      binfo_inits);
421     }
422
423   /* Now add the initializers we've just created to the list that will
424      be returned to our caller.  */
425   vod->inits = chainon (vod->inits, binfo_inits);
426
427   return NULL_TREE;
428 }
429
430 /* Returns the initializers for the vcall offset entries in the vtable
431    for BINFO (which is part of the class hierarchy dominated by T), in
432    reverse order.  */
433
434 static tree
435 build_vcall_offset_vtbl_entries (binfo, t)
436      tree binfo;
437      tree t;
438 {
439   vcall_offset_data vod;
440
441   /* Under the old ABI, the adjustments to the `this' pointer were made
442      elsewhere.  */
443   if (!vcall_offsets_in_vtable_p ())
444     return NULL_TREE;
445
446   /* We only need these entries if this base is a virtual base.  */
447   if (!TREE_VIA_VIRTUAL (binfo))
448     return NULL_TREE;
449
450   /* We need a vcall offset for each of the virtual functions in this
451      vtable.  For example:
452
453        class A { virtual void f (); };
454        class B : virtual public A { };
455        class C: virtual public A, public B {};
456       
457      Now imagine:
458
459        B* b = new C;
460        b->f();
461
462      The location of `A' is not at a fixed offset relative to `B'; the
463      offset depends on the complete object derived from `B'.  So, 
464      `B' vtable contains an entry for `f' that indicates by what
465      amount the `this' pointer for `B' needs to be adjusted to arrive
466      at `A'.  
467
468      We need entries for all the functions in our primary vtable and
469      in our non-virtual bases vtables.  For each base, the entries
470      appear in the same order as in the base; but the bases themselves
471      appear in reverse depth-first, left-to-right order.  */
472   vod.derived = t;
473   vod.vbase = binfo;
474   vod.inits = NULL_TREE;
475   dfs_walk (binfo,
476             dfs_build_vcall_offset_vtbl_entries,
477             dfs_vcall_offset_queue_p,
478             &vod);
479
480   return vod.inits;
481 }
482
483 /* Returns a pointer to the virtual base class of EXP that has the
484    indicated TYPE.  EXP is of class type, not a pointer type.  */
485
486 static tree
487 build_vbase_pointer (exp, type)
488      tree exp, type;
489 {
490   if (vbase_offsets_in_vtable_p ())
491     {
492       tree vbase;
493       tree vbase_ptr;
494
495       /* Find the shared copy of TYPE; that's where the vtable offset
496          is recorded.  */
497       vbase = BINFO_FOR_VBASE (type, TREE_TYPE (exp));
498       /* Find the virtual function table pointer.  */
499       vbase_ptr = build_vfield_ref (exp, TREE_TYPE (exp));
500       /* Compute the location where the offset will lie.  */
501       vbase_ptr = build_binary_op (PLUS_EXPR, 
502                                    vbase_ptr,
503                                    BINFO_VPTR_FIELD (vbase));
504       vbase_ptr = build1 (NOP_EXPR, 
505                           build_pointer_type (ptrdiff_type_node),
506                           vbase_ptr);
507       /* Add the contents of this location to EXP.  */
508       return build (PLUS_EXPR,
509                     build_pointer_type (type),
510                     build_unary_op (ADDR_EXPR, exp, /*noconvert=*/0),
511                     build1 (INDIRECT_REF, ptrdiff_type_node, vbase_ptr));
512     }
513   else
514     {
515       char *name;
516       FORMAT_VBASE_NAME (name, type);
517       return build_component_ref (exp, get_identifier (name), NULL_TREE, 0);
518     }
519 }
520
521 /* Build multi-level access to EXPR using hierarchy path PATH.
522    CODE is PLUS_EXPR if we are going with the grain,
523    and MINUS_EXPR if we are not (in which case, we cannot traverse
524    virtual baseclass links).
525
526    TYPE is the type we want this path to have on exit.
527
528    NONNULL is non-zero if  we know (for any reason) that EXPR is
529    not, in fact, zero.  */
530
531 tree
532 build_vbase_path (code, type, expr, path, nonnull)
533      enum tree_code code;
534      tree type, expr, path;
535      int nonnull;
536 {
537   register int changed = 0;
538   tree last = NULL_TREE, last_virtual = NULL_TREE;
539   int fixed_type_p;
540   tree null_expr = 0, nonnull_expr;
541   tree basetype;
542   tree offset = integer_zero_node;
543
544   if (BINFO_INHERITANCE_CHAIN (path) == NULL_TREE)
545     return build1 (NOP_EXPR, type, expr);
546
547   /* We could do better if we had additional logic to convert back to the
548      unconverted type (the static type of the complete object), and then
549      convert back to the type we want.  Until that is done, we only optimize
550      if the complete type is the same type as expr has.  */
551   fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull);
552
553   if (!fixed_type_p && TREE_SIDE_EFFECTS (expr))
554     expr = save_expr (expr);
555   nonnull_expr = expr;
556
557   path = reverse_path (path);
558
559   basetype = BINFO_TYPE (path);
560
561   while (path)
562     {
563       if (TREE_VIA_VIRTUAL (TREE_VALUE (path)))
564         {
565           last_virtual = BINFO_TYPE (TREE_VALUE (path));
566           if (code == PLUS_EXPR)
567             {
568               changed = ! fixed_type_p;
569
570               if (changed)
571                 {
572                   tree ind;
573
574                   /* We already check for ambiguous things in the caller, just
575                      find a path.  */
576                   if (last)
577                     {
578                       tree binfo = get_binfo (last, TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (nonnull_expr))), 0);
579                       nonnull_expr = convert_pointer_to_real (binfo, nonnull_expr);
580                     }
581                   ind = build_indirect_ref (nonnull_expr, NULL_PTR);
582                   nonnull_expr = build_vbase_pointer (ind, last_virtual);
583                   if (nonnull == 0
584                       && TREE_CODE (type) == POINTER_TYPE
585                       && null_expr == NULL_TREE)
586                     {
587                       null_expr = build1 (NOP_EXPR, build_pointer_type (last_virtual), integer_zero_node);
588                       expr = build (COND_EXPR, build_pointer_type (last_virtual),
589                                     build (EQ_EXPR, boolean_type_node, expr,
590                                            integer_zero_node),
591                                     null_expr, nonnull_expr);
592                     }
593                 }
594               /* else we'll figure out the offset below.  */
595
596               /* Happens in the case of parse errors.  */
597               if (nonnull_expr == error_mark_node)
598                 return error_mark_node;
599             }
600           else
601             {
602               cp_error ("cannot cast up from virtual baseclass `%T'",
603                           last_virtual);
604               return error_mark_node;
605             }
606         }
607       last = TREE_VALUE (path);
608       path = TREE_CHAIN (path);
609     }
610   /* LAST is now the last basetype assoc on the path.  */
611
612   /* A pointer to a virtual base member of a non-null object
613      is non-null.  Therefore, we only need to test for zeroness once.
614      Make EXPR the canonical expression to deal with here.  */
615   if (null_expr)
616     {
617       TREE_OPERAND (expr, 2) = nonnull_expr;
618       TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1))
619         = TREE_TYPE (nonnull_expr);
620     }
621   else
622     expr = nonnull_expr;
623
624   /* If we go through any virtual base pointers, make sure that
625      casts to BASETYPE from the last virtual base class use
626      the right value for BASETYPE.  */
627   if (changed)
628     {
629       tree intype = TREE_TYPE (TREE_TYPE (expr));
630
631       if (TYPE_MAIN_VARIANT (intype) != BINFO_TYPE (last))
632         offset
633           = BINFO_OFFSET (get_binfo (last, TYPE_MAIN_VARIANT (intype), 0));
634     }
635   else
636     offset = BINFO_OFFSET (last);
637
638   if (! integer_zerop (offset))
639     {
640       /* Bash types to make the backend happy.  */
641       offset = cp_convert (type, offset);
642
643       /* If expr might be 0, we need to preserve that zeroness.  */
644       if (nonnull == 0)
645         {
646           if (null_expr)
647             TREE_TYPE (null_expr) = type;
648           else
649             null_expr = build1 (NOP_EXPR, type, integer_zero_node);
650           if (TREE_SIDE_EFFECTS (expr))
651             expr = save_expr (expr);
652
653           return build (COND_EXPR, type,
654                         build (EQ_EXPR, boolean_type_node, expr, integer_zero_node),
655                         null_expr,
656                         build (code, type, expr, offset));
657         }
658       else return build (code, type, expr, offset);
659     }
660
661   /* Cannot change the TREE_TYPE of a NOP_EXPR here, since it may
662      be used multiple times in initialization of multiple inheritance.  */
663   if (null_expr)
664     {
665       TREE_TYPE (expr) = type;
666       return expr;
667     }
668   else
669     return build1 (NOP_EXPR, type, expr);
670 }
671
672 \f
673 /* Virtual function things.  */
674
675 /* Build an entry in the virtual function table.  DELTA is the offset
676    for the `this' pointer.  VCALL_INDEX is the vtable index containing
677    the vcall offset; zero if none.  ENTRY is the virtual function
678    table entry itself.  It's TREE_TYPE must be VFUNC_PTR_TYPE_NODE,
679    but it may not actually be a virtual function table pointer.  (For
680    example, it might be the address of the RTTI object, under the new
681    ABI.)  */
682
683 static tree
684 build_vtable_entry (delta, vcall_index, entry)
685      tree delta;
686      tree vcall_index;
687      tree entry;
688 {
689   if (flag_vtable_thunks)
690     {
691       HOST_WIDE_INT idelta;
692       HOST_WIDE_INT ivindex;
693
694       idelta = tree_low_cst (delta, 0);
695       ivindex = tree_low_cst (vcall_index, 0);
696       if ((idelta || ivindex) 
697           && ! DECL_PURE_VIRTUAL_P (TREE_OPERAND (entry, 0)))
698         {
699           entry = make_thunk (entry, idelta, ivindex);
700           entry = build1 (ADDR_EXPR, vtable_entry_type, entry);
701           TREE_READONLY (entry) = 1;
702           TREE_CONSTANT (entry) = 1;
703         }
704 #ifdef GATHER_STATISTICS
705       n_vtable_entries += 1;
706 #endif
707       return entry;
708     }
709   else
710     {
711       extern int flag_huge_objects;
712       tree elems = tree_cons (NULL_TREE, delta,
713                               tree_cons (NULL_TREE, integer_zero_node,
714                                          build_tree_list (NULL_TREE, entry)));
715       tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems);
716
717       /* We don't use vcall offsets when not using vtable thunks.  */
718       my_friendly_assert (integer_zerop (vcall_index), 20000125);
719
720       /* DELTA used to be constructed by `size_int' and/or size_binop,
721          which caused overflow problems when it was negative.  That should
722          be fixed now.  */
723
724       if (! int_fits_type_p (delta, delta_type_node))
725         {
726           if (flag_huge_objects)
727             sorry ("object size exceeds built-in limit for virtual function table implementation");
728           else
729             sorry ("object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects");
730         }
731       
732       TREE_CONSTANT (entry) = 1;
733       TREE_STATIC (entry) = 1;
734       TREE_READONLY (entry) = 1;
735
736 #ifdef GATHER_STATISTICS
737       n_vtable_entries += 1;
738 #endif
739
740       return entry;
741     }
742 }
743
744 /* We want to give the assembler the vtable identifier as well as
745    the offset to the function pointer.  So we generate
746
747    __asm__ __volatile__ (".vtable_entry %c0, %c1"
748       : : "s"(&class_vtable),
749           "i"((long)&vtbl[idx].pfn - (long)&vtbl[0])); */
750
751 static void
752 build_vtable_entry_ref (basetype, vtbl, idx)
753      tree basetype, vtbl, idx;
754 {
755   static char asm_stmt[] = ".vtable_entry %c0, %c1";
756   tree s, i, i2;
757
758   s = build_unary_op (ADDR_EXPR, TYPE_BINFO_VTABLE (basetype), 0);
759   s = build_tree_list (build_string (1, "s"), s);
760
761   i = build_array_ref (vtbl, idx);
762   if (!flag_vtable_thunks)
763     i = build_component_ref (i, pfn_identifier, vtable_entry_type, 0);
764   i = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i, 0));
765   i2 = build_array_ref (vtbl, build_int_2(0,0));
766   i2 = build_c_cast (ptrdiff_type_node, build_unary_op (ADDR_EXPR, i2, 0));
767   i = build_binary_op (MINUS_EXPR, i, i2);
768   i = build_tree_list (build_string (1, "i"), i);
769
770   finish_asm_stmt (ridpointers[RID_VOLATILE],
771                    build_string (sizeof(asm_stmt)-1, asm_stmt),
772                    NULL_TREE, chainon (s, i), NULL_TREE);
773 }
774
775 /* Given an object INSTANCE, return an expression which yields the
776    virtual function vtable element corresponding to INDEX.  There are
777    many special cases for INSTANCE which we take care of here, mainly
778    to avoid creating extra tree nodes when we don't have to.  */
779
780 tree
781 build_vtbl_ref (instance, idx)
782      tree instance, idx;
783 {
784   tree vtbl, aref;
785   tree basetype = TREE_TYPE (instance);
786
787   if (TREE_CODE (basetype) == REFERENCE_TYPE)
788     basetype = TREE_TYPE (basetype);
789
790   if (instance == current_class_ref)
791     vtbl = build_vfield_ref (instance, basetype);
792   else
793     {
794       if (optimize)
795         {
796           /* Try to figure out what a reference refers to, and
797              access its virtual function table directly.  */
798           tree ref = NULL_TREE;
799
800           if (TREE_CODE (instance) == INDIRECT_REF
801               && TREE_CODE (TREE_TYPE (TREE_OPERAND (instance, 0))) == REFERENCE_TYPE)
802             ref = TREE_OPERAND (instance, 0);
803           else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
804             ref = instance;
805
806           if (ref && TREE_CODE (ref) == VAR_DECL
807               && DECL_INITIAL (ref))
808             {
809               tree init = DECL_INITIAL (ref);
810
811               while (TREE_CODE (init) == NOP_EXPR
812                      || TREE_CODE (init) == NON_LVALUE_EXPR)
813                 init = TREE_OPERAND (init, 0);
814               if (TREE_CODE (init) == ADDR_EXPR)
815                 {
816                   init = TREE_OPERAND (init, 0);
817                   if (IS_AGGR_TYPE (TREE_TYPE (init))
818                       && (TREE_CODE (init) == PARM_DECL
819                           || TREE_CODE (init) == VAR_DECL))
820                     instance = init;
821                 }
822             }
823         }
824
825       if (IS_AGGR_TYPE (TREE_TYPE (instance))
826           && (TREE_CODE (instance) == RESULT_DECL
827               || TREE_CODE (instance) == PARM_DECL
828               || TREE_CODE (instance) == VAR_DECL))
829         vtbl = TYPE_BINFO_VTABLE (basetype);
830       else
831         vtbl = build_vfield_ref (instance, basetype);
832     }
833
834   assemble_external (vtbl);
835
836   if (flag_vtable_gc)
837     build_vtable_entry_ref (basetype, vtbl, idx);
838
839   aref = build_array_ref (vtbl, idx);
840
841   return aref;
842 }
843
844 /* Given an object INSTANCE, return an expression which yields the
845    virtual function corresponding to INDEX.  There are many special
846    cases for INSTANCE which we take care of here, mainly to avoid
847    creating extra tree nodes when we don't have to.  */
848
849 tree
850 build_vfn_ref (ptr_to_instptr, instance, idx)
851      tree *ptr_to_instptr, instance;
852      tree idx;
853 {
854   tree aref = build_vtbl_ref (instance, idx);
855
856   /* When using thunks, there is no extra delta, and we get the pfn
857      directly.  */
858   if (flag_vtable_thunks)
859     return aref;
860
861   if (ptr_to_instptr)
862     {
863       /* Save the intermediate result in a SAVE_EXPR so we don't have to
864          compute each component of the virtual function pointer twice.  */ 
865       if (TREE_CODE (aref) == INDIRECT_REF)
866         TREE_OPERAND (aref, 0) = save_expr (TREE_OPERAND (aref, 0));
867
868       *ptr_to_instptr
869         = build (PLUS_EXPR, TREE_TYPE (*ptr_to_instptr),
870                  *ptr_to_instptr,
871                  cp_convert (ptrdiff_type_node,
872                              build_component_ref (aref, delta_identifier, NULL_TREE, 0)));
873     }
874
875   return build_component_ref (aref, pfn_identifier, NULL_TREE, 0);
876 }
877
878 /* Return the name of the virtual function table (as an IDENTIFIER_NODE)
879    for the given TYPE.  */
880
881 static tree
882 get_vtable_name (type)
883      tree type;
884 {
885   tree type_id = build_typename_overload (type);
886   char *buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX)
887                                + IDENTIFIER_LENGTH (type_id) + 2);
888   const char *ptr = IDENTIFIER_POINTER (type_id);
889   int i;
890   for (i = 0; ptr[i] == OPERATOR_TYPENAME_FORMAT[i]; i++) ;
891 #if 0
892   /* We don't take off the numbers; build_secondary_vtable uses the
893      DECL_ASSEMBLER_NAME for the type, which includes the number
894      in `3foo'.  If we were to pull them off here, we'd end up with
895      something like `_vt.foo.3bar', instead of a uniform definition.  */
896   while (ptr[i] >= '0' && ptr[i] <= '9')
897     i += 1;
898 #endif
899   sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, ptr+i);
900   return get_identifier (buf);
901 }
902
903 /* Return the offset to the main vtable for a given base BINFO.  */
904
905 tree
906 get_vfield_offset (binfo)
907      tree binfo;
908 {
909   tree tmp
910     = size_binop (FLOOR_DIV_EXPR,
911                   bit_position (TYPE_VFIELD (BINFO_TYPE (binfo))),
912                   bitsize_int (BITS_PER_UNIT));
913
914   return size_binop (PLUS_EXPR, convert (sizetype, tmp),
915                      BINFO_OFFSET (binfo));
916 }
917
918 /* Get the offset to the start of the original binfo that we derived
919    this binfo from.  If we find TYPE first, return the offset only
920    that far.  The shortened search is useful because the this pointer
921    on method calling is expected to point to a DECL_CONTEXT (fndecl)
922    object, and not a baseclass of it.   */
923
924
925 static tree
926 get_derived_offset (binfo, type)
927      tree binfo, type;
928 {
929   tree offset1 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
930   tree offset2;
931   int i;
932
933   while (BINFO_BASETYPES (binfo)
934          && (i = CLASSTYPE_VFIELD_PARENT (BINFO_TYPE (binfo))) != -1)
935     {
936       tree binfos = BINFO_BASETYPES (binfo);
937       if (BINFO_TYPE (binfo) == type)
938         break;
939       binfo = TREE_VEC_ELT (binfos, i);
940     }
941
942   offset2 = get_vfield_offset (TYPE_BINFO (BINFO_TYPE (binfo)));
943   return size_binop (MINUS_EXPR, offset1, offset2);
944 }
945
946 /* Update the rtti info for this class.  */
947
948 static void
949 set_rtti_entry (virtuals, offset, type)
950      tree virtuals, offset, type;
951 {
952   tree decl;
953
954   if (CLASSTYPE_COM_INTERFACE (type))
955     return;
956
957   if (flag_rtti)
958     decl = get_tinfo_decl (type);
959   else if (!new_abi_rtti_p ())
960     /* If someone tries to get RTTI information for a type compiled
961        without RTTI, they're out of luck.  By calling __pure_virtual
962        in this case, we give a small clue as to what went wrong.  We
963        could consider having a __no_typeinfo function as well, for a
964        more specific hint.  */
965     decl = abort_fndecl;
966   else
967     /* For the new-abi, we just point to the type_info object.  */
968     decl = NULL_TREE;
969
970   if (flag_vtable_thunks)
971     {
972       /* The first slot holds the offset.  */
973       BV_DELTA (virtuals) = offset;
974       BV_VCALL_INDEX (virtuals) = integer_zero_node;
975
976       /* The next node holds the decl.  */
977       virtuals = TREE_CHAIN (virtuals);
978       offset = integer_zero_node;
979     }
980
981   /* This slot holds the function to call.  */
982   BV_DELTA (virtuals) = offset;
983   BV_VCALL_INDEX (virtuals) = integer_zero_node;
984   BV_FN (virtuals) = decl;
985 }
986
987 /* Create a VAR_DECL for a primary or secondary vtable for
988    CLASS_TYPE.  Use NAME for the name of the vtable, and VTABLE_TYPE
989    for its type.  */
990
991 static tree
992 build_vtable (class_type, name, vtable_type)
993      tree class_type;
994      tree name;
995      tree vtable_type;
996 {
997   tree decl;
998
999   decl = build_lang_decl (VAR_DECL, name, vtable_type);
1000   DECL_CONTEXT (decl) = class_type;
1001   DECL_ARTIFICIAL (decl) = 1;
1002   TREE_STATIC (decl) = 1;
1003 #ifndef WRITABLE_VTABLES
1004   /* Make them READONLY by default. (mrs) */
1005   TREE_READONLY (decl) = 1;
1006 #endif
1007   DECL_VIRTUAL_P (decl) = 1;
1008   import_export_vtable (decl, class_type, 0);
1009
1010   return decl;
1011 }
1012
1013 /* Get the VAR_DECL of the vtable for TYPE. TYPE need not be polymorphic,
1014    or even complete.  If this does not exist, create it.  If COMPLETE is
1015    non-zero, then complete the definition of it -- that will render it
1016    impossible to actually build the vtable, but is useful to get at those
1017    which are known to exist in the runtime.  */
1018
1019 tree 
1020 get_vtable_decl (type, complete)
1021      tree type;
1022      int complete;
1023 {
1024   tree name = get_vtable_name (type);
1025   tree decl = IDENTIFIER_GLOBAL_VALUE (name);
1026   
1027   if (decl)
1028     {
1029       my_friendly_assert (TREE_CODE (decl) == VAR_DECL
1030                           && DECL_VIRTUAL_P (decl), 20000118);
1031       return decl;
1032     }
1033   
1034   decl = build_vtable (type, name, void_type_node);
1035   decl = pushdecl_top_level (decl);
1036   SET_IDENTIFIER_GLOBAL_VALUE (name, decl);
1037   
1038   /* At one time the vtable info was grabbed 2 words at a time.  This
1039      fails on sparc unless you have 8-byte alignment.  (tiemann) */
1040   DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
1041                            DECL_ALIGN (decl));
1042
1043   if (complete)
1044     cp_finish_decl (decl, NULL_TREE, NULL_TREE, 0);
1045
1046   return decl;
1047 }
1048
1049 /* Build the primary virtual function table for TYPE.  If BINFO is
1050    non-NULL, build the vtable starting with the initial approximation
1051    that it is the same as the one which is the head of the association
1052    list.  Returns a non-zero value if a new vtable is actually
1053    created.  */
1054
1055 static int
1056 build_primary_vtable (binfo, type)
1057      tree binfo, type;
1058 {
1059   tree virtuals, decl;
1060
1061   decl = get_vtable_decl (type, /*complete=*/0);
1062   
1063   if (binfo)
1064     {
1065       tree offset;
1066
1067       if (BINFO_NEW_VTABLE_MARKED (binfo))
1068         /* We have already created a vtable for this base, so there's
1069            no need to do it again.  */
1070         return 0;
1071       
1072       virtuals = copy_list (BINFO_VIRTUALS (binfo));
1073       TREE_TYPE (decl) = TREE_TYPE (BINFO_VTABLE (binfo));
1074       DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (BINFO_VTABLE (binfo)));
1075       DECL_SIZE_UNIT (decl)
1076         = TYPE_SIZE_UNIT (TREE_TYPE (BINFO_VTABLE (binfo)));
1077
1078       /* Now do rtti stuff.  */
1079       offset = get_derived_offset (TYPE_BINFO (type), NULL_TREE);
1080       offset = size_diffop (size_zero_node, offset);
1081       set_rtti_entry (virtuals, offset, type);
1082     }
1083   else
1084     {
1085       my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
1086                           20000118);
1087       virtuals = NULL_TREE;
1088     }
1089
1090 #ifdef GATHER_STATISTICS
1091   n_vtables += 1;
1092   n_vtable_elems += list_length (virtuals);
1093 #endif
1094
1095   /* Initialize the association list for this type, based
1096      on our first approximation.  */
1097   TYPE_BINFO_VTABLE (type) = decl;
1098   TYPE_BINFO_VIRTUALS (type) = virtuals;
1099
1100   binfo = TYPE_BINFO (type);
1101   SET_BINFO_NEW_VTABLE_MARKED (binfo);
1102   return 1;
1103 }
1104
1105 /* Give TYPE a new virtual function table which is initialized
1106    with a skeleton-copy of its original initialization.  The only
1107    entry that changes is the `delta' entry, so we can really
1108    share a lot of structure.
1109
1110    FOR_TYPE is the derived type which caused this table to
1111    be needed.
1112
1113    BINFO is the type association which provided TYPE for FOR_TYPE.
1114
1115    The order in which vtables are built (by calling this function) for
1116    an object must remain the same, otherwise a binary incompatibility
1117    can result.  */
1118
1119 static int
1120 build_secondary_vtable (binfo, for_type)
1121      tree binfo, for_type;
1122 {
1123   tree basetype;
1124   tree orig_decl = BINFO_VTABLE (binfo);
1125   tree name;
1126   tree new_decl;
1127   tree offset;
1128   tree path = binfo;
1129   char *buf, *buf2;
1130   char joiner = '_';
1131   int i;
1132
1133 #ifdef JOINER
1134   joiner = JOINER;
1135 #endif
1136
1137   if (TREE_VIA_VIRTUAL (binfo))
1138     my_friendly_assert (binfo == BINFO_FOR_VBASE (BINFO_TYPE (binfo),
1139                                                   current_class_type),
1140                         170);
1141
1142   if (BINFO_NEW_VTABLE_MARKED (binfo))
1143     /* We already created a vtable for this base.  There's no need to
1144        do it again.  */
1145     return 0;
1146
1147   /* Remember that we've created a vtable for this BINFO, so that we
1148      don't try to do so again.  */
1149   SET_BINFO_NEW_VTABLE_MARKED (binfo);
1150   
1151   /* Make fresh virtual list, so we can smash it later.  */
1152   BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
1153
1154   if (TREE_VIA_VIRTUAL (binfo))
1155     {
1156       tree binfo1 = BINFO_FOR_VBASE (BINFO_TYPE (binfo), for_type);
1157
1158       /* XXX - This should never happen, if it does, the caller should
1159          ensure that the binfo is from for_type's binfos, not from any
1160          base type's.  We can remove all this code after a while.  */
1161       if (binfo1 != binfo)
1162         warning ("internal inconsistency: binfo offset error for rtti");
1163
1164       offset = BINFO_OFFSET (binfo1);
1165     }
1166   else
1167     offset = BINFO_OFFSET (binfo);
1168
1169   set_rtti_entry (BINFO_VIRTUALS (binfo),
1170                   size_diffop (size_zero_node, offset),
1171                   for_type);
1172
1173   /* In the new ABI, secondary vtables are laid out as part of the
1174      same structure as the primary vtable.  */
1175   if (merge_primary_and_secondary_vtables_p ())
1176     {
1177       BINFO_VTABLE (binfo) = NULL_TREE;
1178       return 1;
1179     }
1180
1181   /* Create the declaration for the secondary vtable.  */
1182   basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo));
1183   buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype);
1184   i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1;
1185
1186   /* We know that the vtable that we are going to create doesn't exist
1187      yet in the global namespace, and when we finish, it will be
1188      pushed into the global namespace.  In complex MI hierarchies, we
1189      have to loop while the name we are thinking of adding is globally
1190      defined, adding more name components to the vtable name as we
1191      loop, until the name is unique.  This is because in complex MI
1192      cases, we might have the same base more than once.  This means
1193      that the order in which this function is called for vtables must
1194      remain the same, otherwise binary compatibility can be
1195      compromised.  */
1196
1197   while (1)
1198     {
1199       char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type)
1200                                     + 1 + i);
1201       char *new_buf2;
1202
1203       sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner,
1204                buf2);
1205       buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX) + strlen (buf1) + 1);
1206       sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
1207       name = get_identifier (buf);
1208
1209       /* If this name doesn't clash, then we can use it, otherwise
1210          we add more to the name until it is unique.  */
1211
1212       if (! IDENTIFIER_GLOBAL_VALUE (name))
1213         break;
1214
1215       /* Set values for next loop through, if the name isn't unique.  */
1216
1217       path = BINFO_INHERITANCE_CHAIN (path);
1218
1219       /* We better not run out of stuff to make it unique.  */
1220       my_friendly_assert (path != NULL_TREE, 368);
1221
1222       basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path));
1223
1224       if (for_type == basetype)
1225         {
1226           /* If we run out of basetypes in the path, we have already
1227              found created a vtable with that name before, we now
1228              resort to tacking on _%d to distinguish them.  */
1229           int j = 2;
1230           i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i + 1 + 3;
1231           buf1 = (char *) alloca (i);
1232           do {
1233             sprintf (buf1, "%s%c%s%c%d",
1234                      TYPE_ASSEMBLER_NAME_STRING (basetype), joiner,
1235                      buf2, joiner, j);
1236             buf = (char *) alloca (strlen (VTABLE_NAME_PREFIX)
1237                                    + strlen (buf1) + 1);
1238             sprintf (buf, "%s%s", VTABLE_NAME_PREFIX, buf1);
1239             name = get_identifier (buf);
1240
1241             /* If this name doesn't clash, then we can use it,
1242                otherwise we add something different to the name until
1243                it is unique.  */
1244           } while (++j <= 999 && IDENTIFIER_GLOBAL_VALUE (name));
1245
1246           /* Hey, they really like MI don't they?  Increase the 3
1247              above to 6, and the 999 to 999999.  :-)  */
1248           my_friendly_assert (j <= 999, 369);
1249
1250           break;
1251         }
1252
1253       i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i;
1254       new_buf2 = (char *) alloca (i);
1255       sprintf (new_buf2, "%s%c%s",
1256                TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2);
1257       buf2 = new_buf2;
1258     }
1259
1260   new_decl = build_vtable (for_type, name, TREE_TYPE (orig_decl));
1261   DECL_ALIGN (new_decl) = DECL_ALIGN (orig_decl);
1262   BINFO_VTABLE (binfo) = pushdecl_top_level (new_decl);
1263
1264 #ifdef GATHER_STATISTICS
1265   n_vtables += 1;
1266   n_vtable_elems += list_length (BINFO_VIRTUALS (binfo));
1267 #endif
1268
1269   return 1;
1270 }
1271
1272 /* Create a new vtable for BINFO which is the hierarchy dominated by
1273    T.  */
1274
1275 static int
1276 make_new_vtable (t, binfo)
1277      tree t;
1278      tree binfo;
1279 {
1280   if (binfo == TYPE_BINFO (t))
1281     /* In this case, it is *type*'s vtable we are modifying.  We start
1282        with the approximation that it's vtable is that of the
1283        immediate base class.  */
1284     return build_primary_vtable (TYPE_BINFO (DECL_CONTEXT (TYPE_VFIELD (t))), 
1285                                  t);
1286   else
1287     /* This is our very own copy of `basetype' to play with.  Later,
1288        we will fill in all the virtual functions that override the
1289        virtual functions in these base classes which are not defined
1290        by the current type.  */
1291     return build_secondary_vtable (binfo, t);
1292 }
1293
1294 /* Make *VIRTUALS, an entry on the BINFO_VIRTUALS list for BINFO
1295    (which is in the hierarchy dominated by T) list FNDECL as its
1296    BV_FN.  DELTA is the required adjustment from the `this' pointer
1297    where the vtable entry appears to the `this' required when the
1298    function is actually called.  */
1299
1300 static void
1301 modify_vtable_entry (t, binfo, fndecl, delta, virtuals)
1302      tree t;
1303      tree binfo;
1304      tree fndecl;
1305      tree delta;
1306      tree *virtuals;
1307 {
1308   tree vcall_index;
1309   tree v;
1310
1311   v = *virtuals;
1312   vcall_index = integer_zero_node;
1313
1314   if (fndecl != BV_FN (v)
1315       || !tree_int_cst_equal (delta, BV_DELTA (v))
1316       || !tree_int_cst_equal (vcall_index, BV_VCALL_INDEX (v)))
1317     {
1318       tree base_fndecl;
1319
1320       /* We need a new vtable for BINFO.  */
1321       if (make_new_vtable (t, binfo))
1322         {
1323           /* If we really did make a new vtable, we also made a copy
1324              of the BINFO_VIRTUALS list.  Now, we have to find the
1325              corresponding entry in that list.  */
1326           *virtuals = BINFO_VIRTUALS (binfo);
1327           while (BV_FN (*virtuals) != BV_FN (v))
1328             *virtuals = TREE_CHAIN (*virtuals);
1329           v = *virtuals;
1330         }
1331
1332       base_fndecl = BV_FN (v);
1333       BV_DELTA (v) = delta;
1334       BV_VCALL_INDEX (v) = vcall_index;
1335       BV_FN (v) = fndecl;
1336
1337       /* Now assign virtual dispatch information, if unset.  We can
1338          dispatch this, through any overridden base function.  */
1339       if (TREE_CODE (DECL_VINDEX (fndecl)) != INTEGER_CST)
1340         {
1341           DECL_VINDEX (fndecl) = DECL_VINDEX (base_fndecl);
1342           DECL_VIRTUAL_CONTEXT (fndecl) = DECL_VIRTUAL_CONTEXT (base_fndecl);
1343         }
1344     }
1345 }
1346
1347 /* Call this function whenever its known that a vtable for T is going
1348    to be needed.  It's safe to call it more than once.  *HAS_VIRTUAL_P
1349    is initialized to the number of slots that are reserved at the
1350    beginning of the vtable for RTTI information.  */
1351
1352 static void
1353 start_vtable (t, has_virtual_p)
1354      tree t;
1355      int *has_virtual_p;
1356 {
1357   if (*has_virtual_p == 0 && ! CLASSTYPE_COM_INTERFACE (t))
1358     {
1359       /* If we are using thunks, use two slots at the front, one
1360          for the offset pointer, one for the tdesc pointer.
1361          For ARM-style vtables, use the same slot for both.  */
1362       if (flag_vtable_thunks)
1363         *has_virtual_p = 2;
1364       else
1365         *has_virtual_p = 1;
1366     }
1367 }
1368
1369 /* Add a virtual function to all the appropriate vtables for the class
1370    T.  DECL_VINDEX(X) should be error_mark_node, if we want to
1371    allocate a new slot in our table.  If it is error_mark_node, we
1372    know that no other function from another vtable is overridden by X.
1373    HAS_VIRTUAL keeps track of how many virtuals there are in our main
1374    vtable for the type, and we build upon the NEW_VIRTUALS list
1375    and return it.  */
1376
1377 static void
1378 add_virtual_function (new_virtuals_p, overridden_virtuals_p,
1379                       has_virtual, fndecl, t)
1380      tree *new_virtuals_p;
1381      tree *overridden_virtuals_p;
1382      int *has_virtual;
1383      tree fndecl;
1384      tree t; /* Structure type.  */
1385 {
1386   tree new_virtual;
1387
1388   /* If this function doesn't override anything from a base class, we
1389      can just assign it a new DECL_VINDEX now.  Otherwise, if it does
1390      override something, we keep it around and assign its DECL_VINDEX
1391      later, in modify_all_vtables.  */
1392   if (TREE_CODE (DECL_VINDEX (fndecl)) == INTEGER_CST)
1393     /* We've already dealt with this function.  */
1394     return;
1395
1396   new_virtual = build_tree_list (integer_zero_node, fndecl);
1397   BV_VCALL_INDEX (new_virtual) = integer_zero_node;
1398
1399   if (DECL_VINDEX (fndecl) == error_mark_node)
1400     {
1401       /* FNDECL is a new virtual function; it doesn't override any
1402          virtual function in a base class.  */
1403
1404       /* We remember that this was the base sub-object for rtti.  */
1405       CLASSTYPE_RTTI (t) = t;
1406
1407       start_vtable (t, has_virtual);
1408
1409       /* Now assign virtual dispatch information.  */
1410       DECL_VINDEX (fndecl) = build_shared_int_cst ((*has_virtual)++);
1411       DECL_VIRTUAL_CONTEXT (fndecl) = t;
1412
1413       /* Save the state we've computed on the NEW_VIRTUALS list.  */
1414       TREE_CHAIN (new_virtual) = *new_virtuals_p;
1415       *new_virtuals_p = new_virtual;
1416     }
1417   else
1418     {
1419       /* FNDECL overrides a function from a base class.  */
1420       TREE_CHAIN (new_virtual) = *overridden_virtuals_p;
1421       *overridden_virtuals_p = new_virtual;
1422     }
1423 }
1424 \f
1425 extern struct obstack *current_obstack;
1426
1427 /* Add method METHOD to class TYPE.
1428
1429    If non-NULL, FIELDS is the entry in the METHOD_VEC vector entry of
1430    the class type where the method should be added.  */
1431
1432 void
1433 add_method (type, fields, method)
1434      tree type, *fields, method;
1435 {
1436   int using = (DECL_CONTEXT (method) != type);
1437   
1438   if (fields && *fields)
1439     *fields = build_overload (method, *fields);
1440   else 
1441     {
1442       int len;
1443       int slot;
1444       tree method_vec;
1445
1446       if (!CLASSTYPE_METHOD_VEC (type))
1447         /* Make a new method vector.  We start with 8 entries.  We must
1448            allocate at least two (for constructors and destructors), and
1449            we're going to end up with an assignment operator at some
1450            point as well.  
1451
1452            We could use a TREE_LIST for now, and convert it to a
1453            TREE_VEC in finish_struct, but we would probably waste more
1454            memory making the links in the list than we would by
1455            over-allocating the size of the vector here.  Furthermore,
1456            we would complicate all the code that expects this to be a
1457            vector.  */
1458         CLASSTYPE_METHOD_VEC (type) = make_tree_vec (8);
1459
1460       method_vec = CLASSTYPE_METHOD_VEC (type);
1461       len = TREE_VEC_LENGTH (method_vec);
1462
1463       if (DECL_NAME (method) == constructor_name (type))
1464         /* A new constructor or destructor.  Constructors go in 
1465            slot 0; destructors go in slot 1.  */
1466         slot = DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (method)) ? 1 : 0;
1467       else
1468         {
1469           /* See if we already have an entry with this name.  */
1470           for (slot = 2; slot < len; ++slot)
1471             if (!TREE_VEC_ELT (method_vec, slot)
1472                 || (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, 
1473                                                           slot))) 
1474                     == DECL_NAME (method)))
1475               break;
1476                 
1477           if (slot == len)
1478             {
1479               /* We need a bigger method vector.  */
1480               tree new_vec = make_tree_vec (2 * len);
1481               bcopy ((PTR) &TREE_VEC_ELT (method_vec, 0),
1482                      (PTR) &TREE_VEC_ELT (new_vec, 0),
1483                      len * sizeof (tree));
1484               len = 2 * len;
1485               method_vec = CLASSTYPE_METHOD_VEC (type) = new_vec;
1486             }
1487
1488           if (DECL_CONV_FN_P (method) && !TREE_VEC_ELT (method_vec, slot))
1489             {
1490               /* Type conversion operators have to come before
1491                  ordinary methods; add_conversions depends on this to
1492                  speed up looking for conversion operators.  So, if
1493                  necessary, we slide some of the vector elements up.
1494                  In theory, this makes this algorithm O(N^2) but we
1495                  don't expect many conversion operators.  */
1496               for (slot = 2; slot < len; ++slot)
1497                 {
1498                   tree fn = TREE_VEC_ELT (method_vec, slot);
1499   
1500                   if (!fn)
1501                     /* There are no more entries in the vector, so we
1502                        can insert the new conversion operator here.  */
1503                     break;
1504                   
1505                   if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
1506                     /* We can insert the new function right at the
1507                        SLOTth position.  */
1508                     break;
1509                 }
1510   
1511               if (!TREE_VEC_ELT (method_vec, slot))
1512                 /* There is nothing in the Ith slot, so we can avoid
1513                    moving anything.  */
1514                 ; 
1515               else
1516                 {
1517                   /* We know the last slot in the vector is empty
1518                      because we know that at this point there's room
1519                      for a new function.  */
1520                   bcopy ((PTR) &TREE_VEC_ELT (method_vec, slot),
1521                          (PTR) &TREE_VEC_ELT (method_vec, slot + 1),
1522                          (len - slot - 1) * sizeof (tree));
1523                   TREE_VEC_ELT (method_vec, slot) = NULL_TREE;
1524                 }
1525             }
1526         }
1527       
1528       if (template_class_depth (type))
1529         /* TYPE is a template class.  Don't issue any errors now; wait
1530            until instantiation time to complain.  */
1531           ;
1532       else
1533         {
1534           tree fns;
1535
1536           /* Check to see if we've already got this method.  */
1537           for (fns = TREE_VEC_ELT (method_vec, slot);
1538                fns;
1539                fns = OVL_NEXT (fns))
1540             {
1541               tree fn = OVL_CURRENT (fns);
1542                  
1543               if (TREE_CODE (fn) != TREE_CODE (method))
1544                 continue;
1545
1546               if (TREE_CODE (method) != TEMPLATE_DECL)
1547                 {
1548                   /* [over.load] Member function declarations with the
1549                      same name and the same parameter types cannot be
1550                      overloaded if any of them is a static member
1551                      function declaration.  */
1552                   if ((DECL_STATIC_FUNCTION_P (fn)
1553                        != DECL_STATIC_FUNCTION_P (method))
1554                       || using)
1555                     {
1556                       tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
1557                       tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
1558
1559                       if (! DECL_STATIC_FUNCTION_P (fn))
1560                         parms1 = TREE_CHAIN (parms1);
1561                       if (! DECL_STATIC_FUNCTION_P (method))
1562                         parms2 = TREE_CHAIN (parms2);
1563
1564                       if (compparms (parms1, parms2))
1565                         {
1566                           if (using)
1567                             /* Defer to the local function.  */
1568                             return;
1569                           else
1570                             cp_error ("`%#D' and `%#D' cannot be overloaded",
1571                                       fn, method);
1572                         }
1573                     }
1574
1575                   /* Since this is an ordinary function in a
1576                      non-template class, it's mangled name can be used
1577                      as a unique identifier.  This technique is only
1578                      an optimization; we would get the same results if
1579                      we just used decls_match here.  */
1580                   if (DECL_ASSEMBLER_NAME (fn) 
1581                       != DECL_ASSEMBLER_NAME (method))
1582                     continue;
1583                 }
1584               else if (!decls_match (fn, method))
1585                 continue;
1586
1587               /* There has already been a declaration of this method
1588                  or member template.  */
1589               cp_error_at ("`%D' has already been declared in `%T'", 
1590                            method, type);
1591
1592               /* We don't call duplicate_decls here to merge the
1593                  declarations because that will confuse things if the
1594                  methods have inline definitions.  In particular, we
1595                  will crash while processing the definitions.  */
1596               return;
1597             }
1598         }
1599
1600       /* Actually insert the new method.  */
1601       TREE_VEC_ELT (method_vec, slot) 
1602         = build_overload (method, TREE_VEC_ELT (method_vec, slot));
1603
1604       /* Add the new binding.  */ 
1605       if (!DECL_CONSTRUCTOR_P (method)
1606           && !DECL_DESTRUCTOR_P (method))
1607         push_class_level_binding (DECL_NAME (method),
1608                                   TREE_VEC_ELT (method_vec, slot));
1609     }
1610 }
1611
1612 /* Subroutines of finish_struct.  */
1613
1614 /* Look through the list of fields for this struct, deleting
1615    duplicates as we go.  This must be recursive to handle
1616    anonymous unions.
1617
1618    FIELD is the field which may not appear anywhere in FIELDS.
1619    FIELD_PTR, if non-null, is the starting point at which
1620    chained deletions may take place.
1621    The value returned is the first acceptable entry found
1622    in FIELDS.
1623
1624    Note that anonymous fields which are not of UNION_TYPE are
1625    not duplicates, they are just anonymous fields.  This happens
1626    when we have unnamed bitfields, for example.  */
1627
1628 static tree
1629 delete_duplicate_fields_1 (field, fields)
1630      tree field, fields;
1631 {
1632   tree x;
1633   tree prev = 0;
1634   if (DECL_NAME (field) == 0)
1635     {
1636       if (! ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1637         return fields;
1638
1639       for (x = TYPE_FIELDS (TREE_TYPE (field)); x; x = TREE_CHAIN (x))
1640         fields = delete_duplicate_fields_1 (x, fields);
1641       return fields;
1642     }
1643   else
1644     {
1645       for (x = fields; x; prev = x, x = TREE_CHAIN (x))
1646         {
1647           if (DECL_NAME (x) == 0)
1648             {
1649               if (! ANON_AGGR_TYPE_P (TREE_TYPE (x)))
1650                 continue;
1651               TYPE_FIELDS (TREE_TYPE (x))
1652                 = delete_duplicate_fields_1 (field, TYPE_FIELDS (TREE_TYPE (x)));
1653               if (TYPE_FIELDS (TREE_TYPE (x)) == 0)
1654                 {
1655                   if (prev == 0)
1656                     fields = TREE_CHAIN (fields);
1657                   else
1658                     TREE_CHAIN (prev) = TREE_CHAIN (x);
1659                 }
1660             }
1661           else if (TREE_CODE (field) == USING_DECL)
1662             /* A using declaration may is allowed to appear more than
1663                once.  We'll prune these from the field list later, and
1664                handle_using_decl will complain about invalid multiple
1665                uses.  */
1666             ;
1667           else if (DECL_NAME (field) == DECL_NAME (x))
1668             {
1669               if (TREE_CODE (field) == CONST_DECL
1670                   && TREE_CODE (x) == CONST_DECL)
1671                 cp_error_at ("duplicate enum value `%D'", x);
1672               else if (TREE_CODE (field) == CONST_DECL
1673                        || TREE_CODE (x) == CONST_DECL)
1674                 cp_error_at ("duplicate field `%D' (as enum and non-enum)",
1675                              x);
1676               else if (DECL_DECLARES_TYPE_P (field)
1677                        && DECL_DECLARES_TYPE_P (x))
1678                 {
1679                   if (same_type_p (TREE_TYPE (field), TREE_TYPE (x)))
1680                     continue;
1681                   cp_error_at ("duplicate nested type `%D'", x);
1682                 }
1683               else if (DECL_DECLARES_TYPE_P (field)
1684                        || DECL_DECLARES_TYPE_P (x))
1685                 {
1686                   /* Hide tag decls.  */
1687                   if ((TREE_CODE (field) == TYPE_DECL
1688                        && DECL_ARTIFICIAL (field))
1689                       || (TREE_CODE (x) == TYPE_DECL
1690                           && DECL_ARTIFICIAL (x)))
1691                     continue;
1692                   cp_error_at ("duplicate field `%D' (as type and non-type)",
1693                                x);
1694                 }
1695               else
1696                 cp_error_at ("duplicate member `%D'", x);
1697               if (prev == 0)
1698                 fields = TREE_CHAIN (fields);
1699               else
1700                 TREE_CHAIN (prev) = TREE_CHAIN (x);
1701             }
1702         }
1703     }
1704   return fields;
1705 }
1706
1707 static void
1708 delete_duplicate_fields (fields)
1709      tree fields;
1710 {
1711   tree x;
1712   for (x = fields; x && TREE_CHAIN (x); x = TREE_CHAIN (x))
1713     TREE_CHAIN (x) = delete_duplicate_fields_1 (x, TREE_CHAIN (x));
1714 }
1715
1716 /* Change the access of FDECL to ACCESS in T.  Return 1 if change was
1717    legit, otherwise return 0.  */
1718
1719 static int
1720 alter_access (t, fdecl, access)
1721      tree t;
1722      tree fdecl;
1723      tree access;
1724 {
1725   tree elem = purpose_member (t, DECL_ACCESS (fdecl));
1726   if (elem)
1727     {
1728       if (TREE_VALUE (elem) != access)
1729         {
1730           if (TREE_CODE (TREE_TYPE (fdecl)) == FUNCTION_DECL)
1731             cp_error_at ("conflicting access specifications for method `%D', ignored", TREE_TYPE (fdecl));
1732           else
1733             error ("conflicting access specifications for field `%s', ignored",
1734                    IDENTIFIER_POINTER (DECL_NAME (fdecl)));
1735         }
1736       else
1737         {
1738           /* They're changing the access to the same thing they changed
1739              it to before.  That's OK.  */
1740           ;
1741         }
1742     }
1743   else
1744     {
1745       enforce_access (t, fdecl);
1746       DECL_ACCESS (fdecl) = tree_cons (t, access, DECL_ACCESS (fdecl));
1747       return 1;
1748     }
1749   return 0;
1750 }
1751
1752 /* Process the USING_DECL, which is a member of T.  */
1753
1754 static void
1755 handle_using_decl (using_decl, t)
1756      tree using_decl;
1757      tree t;
1758 {
1759   tree ctype = DECL_INITIAL (using_decl);
1760   tree name = DECL_NAME (using_decl);
1761   tree access
1762     = TREE_PRIVATE (using_decl) ? access_private_node
1763     : TREE_PROTECTED (using_decl) ? access_protected_node
1764     : access_public_node;
1765   tree fdecl, binfo;
1766   tree flist = NULL_TREE;
1767   tree old_value;
1768
1769   binfo = binfo_or_else (ctype, t);
1770   if (! binfo)
1771     return;
1772   
1773   if (name == constructor_name (ctype)
1774       || name == constructor_name_full (ctype))
1775     {
1776       cp_error_at ("using-declaration for constructor", using_decl);
1777       return;
1778     }
1779
1780   fdecl = lookup_member (binfo, name, 0, 0);
1781   
1782   if (!fdecl)
1783     {
1784       cp_error_at ("no members matching `%D' in `%#T'", using_decl, ctype);
1785       return;
1786     }
1787
1788   if (BASELINK_P (fdecl))
1789     /* Ignore base type this came from. */
1790     fdecl = TREE_VALUE (fdecl);
1791
1792   old_value = IDENTIFIER_CLASS_VALUE (name);
1793   if (old_value)
1794     {
1795       if (is_overloaded_fn (old_value))
1796         old_value = OVL_CURRENT (old_value);
1797
1798       if (DECL_P (old_value) && DECL_CONTEXT (old_value) == t)
1799         /* OK */;
1800       else
1801         old_value = NULL_TREE;
1802     }
1803
1804   if (is_overloaded_fn (fdecl))
1805     flist = fdecl;
1806   else if (! DECL_LANG_SPECIFIC (fdecl))
1807     my_friendly_abort (20000221);
1808
1809   if (! old_value)
1810     ;
1811   else if (is_overloaded_fn (old_value))
1812     {
1813       if (flist)
1814         /* It's OK to use functions from a base when there are functions with
1815            the same name already present in the current class.  */;
1816       else
1817         {
1818           cp_error ("`%D' invalid in `%#T'", using_decl, t);
1819           cp_error_at ("  because of local method `%#D' with same name",
1820                        OVL_CURRENT (old_value));
1821           return;
1822         }
1823     }
1824   else
1825     {
1826       cp_error ("`%D' invalid in `%#T'", using_decl, t);
1827       cp_error_at ("  because of local field `%#D' with same name", old_value);
1828       return;
1829     }
1830   
1831   /* Make type T see field decl FDECL with access ACCESS.*/
1832   if (flist)
1833     for (; flist; flist = OVL_NEXT (flist))
1834       {
1835         add_method (t, 0, OVL_CURRENT (flist));
1836         alter_access (t, OVL_CURRENT (flist), access);
1837       }
1838   else
1839     alter_access (t, fdecl, access);
1840 }
1841 \f
1842 /* Run through the base clases of T, updating
1843    CANT_HAVE_DEFAULT_CTOR_P, CANT_HAVE_CONST_CTOR_P, and
1844    NO_CONST_ASN_REF_P.  Also set flag bits in T based on properties of
1845    the bases.  */
1846
1847 static void
1848 check_bases (t, cant_have_default_ctor_p, cant_have_const_ctor_p,
1849              no_const_asn_ref_p)
1850      tree t;
1851      int *cant_have_default_ctor_p;
1852      int *cant_have_const_ctor_p;
1853      int *no_const_asn_ref_p;
1854 {
1855   int n_baseclasses;
1856   int i;
1857   int seen_nearly_empty_base_p;
1858   tree binfos;
1859
1860   binfos = TYPE_BINFO_BASETYPES (t);
1861   n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1862   seen_nearly_empty_base_p = 0;
1863
1864   /* An aggregate cannot have baseclasses.  */
1865   CLASSTYPE_NON_AGGREGATE (t) |= (n_baseclasses != 0);
1866
1867   for (i = 0; i < n_baseclasses; ++i) 
1868     {
1869       tree base_binfo;
1870       tree basetype;
1871
1872       /* Figure out what base we're looking at.  */
1873       base_binfo = TREE_VEC_ELT (binfos, i);
1874       basetype = TREE_TYPE (base_binfo);
1875
1876       /* If the type of basetype is incomplete, then we already
1877          complained about that fact (and we should have fixed it up as
1878          well).  */
1879       if (TYPE_SIZE (basetype) == 0)
1880         {
1881           int j;
1882           /* The base type is of incomplete type.  It is
1883              probably best to pretend that it does not
1884              exist.  */
1885           if (i == n_baseclasses-1)
1886             TREE_VEC_ELT (binfos, i) = NULL_TREE;
1887           TREE_VEC_LENGTH (binfos) -= 1;
1888           n_baseclasses -= 1;
1889           for (j = i; j+1 < n_baseclasses; j++)
1890             TREE_VEC_ELT (binfos, j) = TREE_VEC_ELT (binfos, j+1);
1891           continue;
1892         }
1893
1894       /* Effective C++ rule 14.  We only need to check TYPE_POLYMORPHIC_P
1895          here because the case of virtual functions but non-virtual
1896          dtor is handled in finish_struct_1.  */
1897       if (warn_ecpp && ! TYPE_POLYMORPHIC_P (basetype)
1898           && TYPE_HAS_DESTRUCTOR (basetype))
1899         cp_warning ("base class `%#T' has a non-virtual destructor",
1900                     basetype);
1901
1902       /* If the base class doesn't have copy constructors or
1903          assignment operators that take const references, then the
1904          derived class cannot have such a member automatically
1905          generated.  */
1906       if (! TYPE_HAS_CONST_INIT_REF (basetype))
1907         *cant_have_const_ctor_p = 1;
1908       if (TYPE_HAS_ASSIGN_REF (basetype)
1909           && !TYPE_HAS_CONST_ASSIGN_REF (basetype))
1910         *no_const_asn_ref_p = 1;
1911       /* Similarly, if the base class doesn't have a default
1912          constructor, then the derived class won't have an
1913          automatically generated default constructor.  */
1914       if (TYPE_HAS_CONSTRUCTOR (basetype)
1915           && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (basetype))
1916         {
1917           *cant_have_default_ctor_p = 1;
1918           if (! TYPE_HAS_CONSTRUCTOR (t))
1919             cp_pedwarn ("base `%T' with only non-default constructor in class without a constructor",
1920                         basetype);
1921         }
1922
1923       /* If the base class is not empty or nearly empty, then this
1924          class cannot be nearly empty.  */
1925       if (!CLASSTYPE_NEARLY_EMPTY_P (basetype) && !is_empty_class (basetype))
1926         CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1927       /* And if there is more than one nearly empty base, then the
1928          derived class is not nearly empty either.  */
1929       else if (CLASSTYPE_NEARLY_EMPTY_P (basetype) 
1930                && seen_nearly_empty_base_p)
1931         CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
1932       /* If this is the first nearly empty base class, then remember
1933          that we saw it.  */
1934       else if (CLASSTYPE_NEARLY_EMPTY_P (basetype))
1935         seen_nearly_empty_base_p = 1;
1936
1937       /* A lot of properties from the bases also apply to the derived
1938          class.  */
1939       TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (basetype);
1940       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
1941         |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (basetype);
1942       TYPE_HAS_COMPLEX_ASSIGN_REF (t) 
1943         |= TYPE_HAS_COMPLEX_ASSIGN_REF (basetype);
1944       TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (basetype);
1945       TYPE_OVERLOADS_CALL_EXPR (t) |= TYPE_OVERLOADS_CALL_EXPR (basetype);
1946       TYPE_OVERLOADS_ARRAY_REF (t) |= TYPE_OVERLOADS_ARRAY_REF (basetype);
1947       TYPE_OVERLOADS_ARROW (t) |= TYPE_OVERLOADS_ARROW (basetype);
1948       TYPE_POLYMORPHIC_P (t) |= TYPE_POLYMORPHIC_P (basetype);
1949
1950       /* Derived classes can implicitly become COMified if their bases
1951          are COM.  */
1952       if (CLASSTYPE_COM_INTERFACE (basetype))
1953         CLASSTYPE_COM_INTERFACE (t) = 1;
1954       else if (i == 0 && CLASSTYPE_COM_INTERFACE (t))
1955         {
1956           cp_error 
1957             ("COM interface type `%T' with non-COM leftmost base class `%T'",
1958              t, basetype);
1959           CLASSTYPE_COM_INTERFACE (t) = 0;
1960         }
1961     }
1962 }
1963
1964 /* Make the Ith baseclass of T its primary base.  */
1965
1966 static void
1967 set_primary_base (t, i, has_virtual_p)
1968      tree t;
1969      int i;
1970      int *has_virtual_p;
1971 {
1972   tree basetype;
1973
1974   CLASSTYPE_VFIELD_PARENT (t) = i;
1975   basetype = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (t));
1976   TYPE_BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (basetype);
1977   TYPE_BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (basetype);
1978   TYPE_VFIELD (t) = TYPE_VFIELD (basetype);
1979   CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
1980   *has_virtual_p = CLASSTYPE_VSIZE (basetype);
1981 }
1982
1983 /* Determine the primary class for T.  */
1984
1985 static void
1986 determine_primary_base (t, has_virtual_p)
1987      tree t;
1988      int *has_virtual_p;
1989 {
1990   int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
1991
1992   /* If there are no baseclasses, there is certainly no primary base.  */
1993   if (n_baseclasses == 0)
1994     return;
1995
1996   *has_virtual_p = 0;
1997
1998   for (i = 0; i < n_baseclasses; i++)
1999     {
2000       tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
2001       tree basetype = BINFO_TYPE (base_binfo);
2002
2003       if (TYPE_CONTAINS_VPTR_P (basetype))
2004         {
2005           /* Even a virtual baseclass can contain our RTTI
2006              information.  But, we prefer a non-virtual polymorphic
2007              baseclass.  */
2008           if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2009             CLASSTYPE_RTTI (t) = CLASSTYPE_RTTI (basetype);
2010
2011           /* A virtual baseclass can't be the primary base under the
2012              old ABI.  And under the new ABI we still prefer a
2013              non-virtual base.  */
2014           if (TREE_VIA_VIRTUAL (base_binfo))
2015             continue;
2016
2017           if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2018             {
2019               set_primary_base (t, i, has_virtual_p);
2020               CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
2021             }
2022           else
2023             {
2024               tree vfields;
2025
2026               /* Only add unique vfields, and flatten them out as we go.  */
2027               for (vfields = CLASSTYPE_VFIELDS (basetype);
2028                    vfields;
2029                    vfields = TREE_CHAIN (vfields))
2030                 if (VF_BINFO_VALUE (vfields) == NULL_TREE
2031                     || ! TREE_VIA_VIRTUAL (VF_BINFO_VALUE (vfields)))
2032                   CLASSTYPE_VFIELDS (t) 
2033                     = tree_cons (base_binfo, 
2034                                  VF_BASETYPE_VALUE (vfields),
2035                                  CLASSTYPE_VFIELDS (t));
2036
2037               if (*has_virtual_p == 0)
2038                 set_primary_base (t, i, has_virtual_p);
2039             }
2040         }
2041     }
2042
2043   if (!TYPE_VFIELD (t))
2044     CLASSTYPE_VFIELD_PARENT (t) = -1;
2045
2046   /* The new ABI allows for the use of a "nearly-empty" virtual base
2047      class as the primary base class if no non-virtual polymorphic
2048      base can be found.  */
2049   if (flag_new_abi && !CLASSTYPE_HAS_PRIMARY_BASE_P (t))
2050     for (i = 0; i < n_baseclasses; ++i)
2051       {
2052         tree base_binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (t), i);
2053         tree basetype = BINFO_TYPE (base_binfo);
2054
2055         if (TREE_VIA_VIRTUAL (base_binfo) 
2056             && CLASSTYPE_NEARLY_EMPTY_P (basetype))
2057           {
2058             set_primary_base (t, i, has_virtual_p);
2059             CLASSTYPE_VFIELDS (t) = copy_list (CLASSTYPE_VFIELDS (basetype));
2060             break;
2061           }
2062       }
2063
2064   /* Mark the primary base classes at this point.  */
2065   mark_primary_bases (t);
2066 }
2067 \f
2068 /* Set memoizing fields and bits of T (and its variants) for later
2069    use.  */
2070
2071 static void
2072 finish_struct_bits (t)
2073      tree t;
2074 {
2075   int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
2076
2077   /* Fix up variants (if any).  */
2078   tree variants = TYPE_NEXT_VARIANT (t);
2079   while (variants)
2080     {
2081       /* These fields are in the _TYPE part of the node, not in
2082          the TYPE_LANG_SPECIFIC component, so they are not shared.  */
2083       TYPE_HAS_CONSTRUCTOR (variants) = TYPE_HAS_CONSTRUCTOR (t);
2084       TYPE_HAS_DESTRUCTOR (variants) = TYPE_HAS_DESTRUCTOR (t);
2085       TYPE_NEEDS_CONSTRUCTING (variants) = TYPE_NEEDS_CONSTRUCTING (t);
2086       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (variants) 
2087         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t);
2088
2089       TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (variants) 
2090         = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t);
2091       TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t);
2092       TYPE_USES_VIRTUAL_BASECLASSES (variants) = TYPE_USES_VIRTUAL_BASECLASSES (t);
2093       /* Copy whatever these are holding today.  */
2094       TYPE_MIN_VALUE (variants) = TYPE_MIN_VALUE (t);
2095       TYPE_MAX_VALUE (variants) = TYPE_MAX_VALUE (t);
2096       TYPE_FIELDS (variants) = TYPE_FIELDS (t);
2097       TYPE_SIZE (variants) = TYPE_SIZE (t);
2098       TYPE_SIZE_UNIT (variants) = TYPE_SIZE_UNIT (t);
2099       variants = TYPE_NEXT_VARIANT (variants);
2100     }
2101
2102   if (n_baseclasses && TYPE_POLYMORPHIC_P (t))
2103     /* For a class w/o baseclasses, `finish_struct' has set
2104        CLASS_TYPE_ABSTRACT_VIRTUALS correctly (by
2105        definition). Similarly for a class whose base classes do not
2106        have vtables. When neither of these is true, we might have
2107        removed abstract virtuals (by providing a definition), added
2108        some (by declaring new ones), or redeclared ones from a base
2109        class. We need to recalculate what's really an abstract virtual
2110        at this point (by looking in the vtables).  */
2111       get_pure_virtuals (t);
2112
2113   if (n_baseclasses)
2114     {
2115       /* Notice whether this class has type conversion functions defined.  */
2116       tree binfo = TYPE_BINFO (t);
2117       tree binfos = BINFO_BASETYPES (binfo);
2118       tree basetype;
2119
2120       for (i = n_baseclasses-1; i >= 0; i--)
2121         {
2122           basetype = BINFO_TYPE (TREE_VEC_ELT (binfos, i));
2123
2124           TYPE_HAS_CONVERSION (t) |= TYPE_HAS_CONVERSION (basetype);
2125         }
2126     }
2127
2128   /* If this type has a copy constructor, force its mode to be BLKmode, and
2129      force its TREE_ADDRESSABLE bit to be nonzero.  This will cause it to
2130      be passed by invisible reference and prevent it from being returned in
2131      a register.
2132
2133      Also do this if the class has BLKmode but can still be returned in
2134      registers, since function_cannot_inline_p won't let us inline
2135      functions returning such a type.  This affects the HP-PA.  */
2136   if (! TYPE_HAS_TRIVIAL_INIT_REF (t)
2137       || (TYPE_MODE (t) == BLKmode && ! aggregate_value_p (t)
2138           && CLASSTYPE_NON_AGGREGATE (t)))
2139     {
2140       tree variants;
2141       DECL_MODE (TYPE_MAIN_DECL (t)) = BLKmode;
2142       for (variants = t; variants; variants = TYPE_NEXT_VARIANT (variants))
2143         {
2144           TYPE_MODE (variants) = BLKmode;
2145           TREE_ADDRESSABLE (variants) = 1;
2146         }
2147     }
2148 }
2149
2150 /* Issue warnings about T having private constructors, but no friends,
2151    and so forth.  
2152
2153    HAS_NONPRIVATE_METHOD is nonzero if T has any non-private methods or
2154    static members.  HAS_NONPRIVATE_STATIC_FN is nonzero if T has any
2155    non-private static member functions.  */
2156
2157 static void
2158 maybe_warn_about_overly_private_class (t)
2159      tree t;
2160 {
2161   int has_member_fn = 0;
2162   int has_nonprivate_method = 0;
2163   tree fn;
2164
2165   if (!warn_ctor_dtor_privacy
2166       /* If the class has friends, those entities might create and
2167          access instances, so we should not warn.  */
2168       || (CLASSTYPE_FRIEND_CLASSES (t)
2169           || DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))
2170       /* We will have warned when the template was declared; there's
2171          no need to warn on every instantiation.  */
2172       || CLASSTYPE_TEMPLATE_INSTANTIATION (t))
2173     /* There's no reason to even consider warning about this 
2174        class.  */
2175     return;
2176     
2177   /* We only issue one warning, if more than one applies, because
2178      otherwise, on code like:
2179
2180      class A {
2181        // Oops - forgot `public:'
2182        A();
2183        A(const A&);
2184        ~A();
2185      };
2186
2187      we warn several times about essentially the same problem.  */
2188
2189   /* Check to see if all (non-constructor, non-destructor) member
2190      functions are private.  (Since there are no friends or
2191      non-private statics, we can't ever call any of the private member
2192      functions.)  */
2193   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
2194     /* We're not interested in compiler-generated methods; they don't
2195        provide any way to call private members.  */
2196     if (!DECL_ARTIFICIAL (fn)) 
2197       {
2198         if (!TREE_PRIVATE (fn))
2199           {
2200             if (DECL_STATIC_FUNCTION_P (fn)) 
2201               /* A non-private static member function is just like a
2202                  friend; it can create and invoke private member
2203                  functions, and be accessed without a class
2204                  instance.  */
2205               return;
2206                 
2207             has_nonprivate_method = 1;
2208             break;
2209           }
2210         else if (!DECL_CONSTRUCTOR_P (fn) && !DECL_DESTRUCTOR_P (fn))
2211           has_member_fn = 1;
2212       } 
2213
2214   if (!has_nonprivate_method && has_member_fn) 
2215     {
2216       /* There are no non-private methods, and there's at least one
2217          private member function that isn't a constructor or
2218          destructor.  (If all the private members are
2219          constructors/destructors we want to use the code below that
2220          issues error messages specifically referring to
2221          constructors/destructors.)  */
2222       int i;
2223       tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
2224       for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); i++)
2225         if (TREE_VIA_PUBLIC (TREE_VEC_ELT (binfos, i))
2226             || TREE_VIA_PROTECTED (TREE_VEC_ELT (binfos, i)))
2227           {
2228             has_nonprivate_method = 1;
2229             break;
2230           }
2231       if (!has_nonprivate_method) 
2232         {
2233           cp_warning ("all member functions in class `%T' are private", t);
2234           return;
2235         }
2236     }
2237
2238   /* Even if some of the member functions are non-private, the class
2239      won't be useful for much if all the constructors or destructors
2240      are private: such an object can never be created or destroyed.  */
2241   if (TYPE_HAS_DESTRUCTOR (t))
2242     {
2243       tree dtor = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1);
2244
2245       if (TREE_PRIVATE (dtor))
2246         {
2247           cp_warning ("`%#T' only defines a private destructor and has no friends",
2248                       t);
2249           return;
2250         }
2251     }
2252
2253   if (TYPE_HAS_CONSTRUCTOR (t))
2254     {
2255       int nonprivate_ctor = 0;
2256           
2257       /* If a non-template class does not define a copy
2258          constructor, one is defined for it, enabling it to avoid
2259          this warning.  For a template class, this does not
2260          happen, and so we would normally get a warning on:
2261
2262            template <class T> class C { private: C(); };  
2263           
2264          To avoid this asymmetry, we check TYPE_HAS_INIT_REF.  All
2265          complete non-template or fully instantiated classes have this
2266          flag set.  */
2267       if (!TYPE_HAS_INIT_REF (t))
2268         nonprivate_ctor = 1;
2269       else 
2270         for (fn = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 0);
2271              fn;
2272              fn = OVL_NEXT (fn)) 
2273           {
2274             tree ctor = OVL_CURRENT (fn);
2275             /* Ideally, we wouldn't count copy constructors (or, in
2276                fact, any constructor that takes an argument of the
2277                class type as a parameter) because such things cannot
2278                be used to construct an instance of the class unless
2279                you already have one.  But, for now at least, we're
2280                more generous.  */
2281             if (! TREE_PRIVATE (ctor))
2282               {
2283                 nonprivate_ctor = 1;
2284                 break;
2285               }
2286           }
2287
2288       if (nonprivate_ctor == 0)
2289         {
2290           cp_warning ("`%#T' only defines private constructors and has no friends",
2291                       t);
2292           return;
2293         }
2294     }
2295 }
2296
2297 /* Function to help qsort sort FIELD_DECLs by name order.  */
2298
2299 static int
2300 field_decl_cmp (x, y)
2301      const tree *x, *y;
2302 {
2303   if (DECL_NAME (*x) == DECL_NAME (*y))
2304     /* A nontype is "greater" than a type.  */
2305     return DECL_DECLARES_TYPE_P (*y) - DECL_DECLARES_TYPE_P (*x);
2306   if (DECL_NAME (*x) == NULL_TREE)
2307     return -1;
2308   if (DECL_NAME (*y) == NULL_TREE)
2309     return 1;
2310   if (DECL_NAME (*x) < DECL_NAME (*y))
2311     return -1;
2312   return 1;
2313 }
2314
2315 /* Comparison function to compare two TYPE_METHOD_VEC entries by name.  */
2316
2317 static int
2318 method_name_cmp (m1, m2)
2319      const tree *m1, *m2;
2320 {
2321   if (*m1 == NULL_TREE && *m2 == NULL_TREE)
2322     return 0;
2323   if (*m1 == NULL_TREE)
2324     return -1;
2325   if (*m2 == NULL_TREE)
2326     return 1;
2327   if (DECL_NAME (OVL_CURRENT (*m1)) < DECL_NAME (OVL_CURRENT (*m2)))
2328     return -1;
2329   return 1;
2330 }
2331
2332 /* Warn about duplicate methods in fn_fields.  Also compact method
2333    lists so that lookup can be made faster.
2334
2335    Data Structure: List of method lists.  The outer list is a
2336    TREE_LIST, whose TREE_PURPOSE field is the field name and the
2337    TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs.  TREE_CHAIN
2338    links the entire list of methods for TYPE_METHODS.  Friends are
2339    chained in the same way as member functions (? TREE_CHAIN or
2340    DECL_CHAIN), but they live in the TREE_TYPE field of the outer
2341    list.  That allows them to be quickly deleted, and requires no
2342    extra storage.
2343
2344    If there are any constructors/destructors, they are moved to the
2345    front of the list.  This makes pushclass more efficient.
2346
2347    @@ The above comment is obsolete.  It mostly describes what add_method
2348    @@ and add_implicitly_declared_members do.
2349
2350    Sort methods that are not special (i.e., constructors, destructors, and
2351    type conversion operators) so that we can find them faster in search.  */
2352
2353 static void
2354 finish_struct_methods (t)
2355      tree t;
2356 {
2357   tree fn_fields;
2358   tree method_vec;
2359   tree ctor_name = constructor_name (t);
2360   int slot, len;
2361
2362   if (!TYPE_METHODS (t))
2363     {
2364       /* Clear these for safety; perhaps some parsing error could set
2365          these incorrectly.  */
2366       TYPE_HAS_CONSTRUCTOR (t) = 0;
2367       TYPE_HAS_DESTRUCTOR (t) = 0;
2368       CLASSTYPE_METHOD_VEC (t) = NULL_TREE;
2369       return;
2370     }
2371
2372   method_vec = CLASSTYPE_METHOD_VEC (t);
2373   my_friendly_assert (method_vec != NULL_TREE, 19991215);
2374   len = TREE_VEC_LENGTH (method_vec);
2375
2376   /* First fill in entry 0 with the constructors, entry 1 with destructors,
2377      and the next few with type conversion operators (if any).  */
2378   for (fn_fields = TYPE_METHODS (t); fn_fields; 
2379        fn_fields = TREE_CHAIN (fn_fields))
2380     {
2381       tree fn_name = DECL_NAME (fn_fields);
2382
2383       /* Clear out this flag.
2384
2385          @@ Doug may figure out how to break
2386          @@ this with nested classes and friends.  */
2387       DECL_IN_AGGR_P (fn_fields) = 0;
2388
2389       /* Note here that a copy ctor is private, so we don't dare generate
2390          a default copy constructor for a class that has a member
2391          of this type without making sure they have access to it.  */
2392       if (fn_name == ctor_name)
2393         {
2394           tree parmtypes = FUNCTION_ARG_CHAIN (fn_fields);
2395           tree parmtype = parmtypes ? TREE_VALUE (parmtypes) : void_type_node;
2396           
2397           if (TREE_CODE (parmtype) == REFERENCE_TYPE
2398               && TYPE_MAIN_VARIANT (TREE_TYPE (parmtype)) == t)
2399             {
2400               if (TREE_CHAIN (parmtypes) == NULL_TREE
2401                   || TREE_CHAIN (parmtypes) == void_list_node
2402                   || TREE_PURPOSE (TREE_CHAIN (parmtypes)))
2403                 {
2404                   if (TREE_PROTECTED (fn_fields))
2405                     TYPE_HAS_NONPUBLIC_CTOR (t) = 1;
2406                   else if (TREE_PRIVATE (fn_fields))
2407                     TYPE_HAS_NONPUBLIC_CTOR (t) = 2;
2408                 }
2409             }
2410         }
2411       else if (fn_name == ansi_opname[(int) MODIFY_EXPR])
2412         {
2413           tree parmtype = TREE_VALUE (FUNCTION_ARG_CHAIN (fn_fields));
2414
2415           if (copy_assignment_arg_p (parmtype, DECL_VIRTUAL_P (fn_fields)))
2416             {
2417               if (TREE_PROTECTED (fn_fields))
2418                 TYPE_HAS_NONPUBLIC_ASSIGN_REF (t) = 1;
2419               else if (TREE_PRIVATE (fn_fields))
2420                 TYPE_HAS_NONPUBLIC_ASSIGN_REF (t) = 2;
2421             }
2422         }
2423     }
2424
2425   if (TYPE_HAS_DESTRUCTOR (t) && !TREE_VEC_ELT (method_vec, 1))
2426     /* We thought there was a destructor, but there wasn't.  Some
2427        parse errors cause this anomalous situation.  */
2428     TYPE_HAS_DESTRUCTOR (t) = 0;
2429     
2430   /* Issue warnings about private constructors and such.  If there are
2431      no methods, then some public defaults are generated.  */
2432   maybe_warn_about_overly_private_class (t);
2433
2434   /* Now sort the methods.  */
2435   while (len > 2 && TREE_VEC_ELT (method_vec, len-1) == NULL_TREE)
2436     len--;
2437   TREE_VEC_LENGTH (method_vec) = len;
2438
2439   /* The type conversion ops have to live at the front of the vec, so we
2440      can't sort them.  */
2441   for (slot = 2; slot < len; ++slot)
2442     {
2443       tree fn = TREE_VEC_ELT (method_vec, slot);
2444   
2445       if (!DECL_CONV_FN_P (OVL_CURRENT (fn)))
2446         break;
2447     }
2448   if (len - slot > 1)
2449     qsort (&TREE_VEC_ELT (method_vec, slot), len-slot, sizeof (tree),
2450            (int (*)(const void *, const void *))method_name_cmp);
2451 }
2452
2453 /* Emit error when a duplicate definition of a type is seen.  Patch up.  */
2454
2455 void
2456 duplicate_tag_error (t)
2457      tree t;
2458 {
2459   cp_error ("redefinition of `%#T'", t);
2460   cp_error_at ("previous definition here", t);
2461
2462   /* Pretend we haven't defined this type.  */
2463
2464   /* All of the component_decl's were TREE_CHAINed together in the parser.
2465      finish_struct_methods walks these chains and assembles all methods with
2466      the same base name into DECL_CHAINs. Now we don't need the parser chains
2467      anymore, so we unravel them.  */
2468
2469   /* This used to be in finish_struct, but it turns out that the
2470      TREE_CHAIN is used by dbxout_type_methods and perhaps some other
2471      things...  */
2472   if (CLASSTYPE_METHOD_VEC (t)) 
2473     {
2474       tree method_vec = CLASSTYPE_METHOD_VEC (t);
2475       int i, len  = TREE_VEC_LENGTH (method_vec);
2476       for (i = 0; i < len; i++)
2477         {
2478           tree unchain = TREE_VEC_ELT (method_vec, i);
2479           while (unchain != NULL_TREE) 
2480             {
2481               TREE_CHAIN (OVL_CURRENT (unchain)) = NULL_TREE;
2482               unchain = OVL_NEXT (unchain);
2483             }
2484         }
2485     }
2486
2487   if (TYPE_LANG_SPECIFIC (t))
2488     {
2489       tree binfo = TYPE_BINFO (t);
2490       int interface_only = CLASSTYPE_INTERFACE_ONLY (t);
2491       int interface_unknown = CLASSTYPE_INTERFACE_UNKNOWN (t);
2492       tree template_info = CLASSTYPE_TEMPLATE_INFO (t);
2493       int use_template = CLASSTYPE_USE_TEMPLATE (t);
2494
2495       bzero ((char *) TYPE_LANG_SPECIFIC (t), sizeof (struct lang_type));
2496       BINFO_BASETYPES(binfo) = NULL_TREE;
2497
2498       TYPE_BINFO (t) = binfo;
2499       CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
2500       SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
2501       TYPE_REDEFINED (t) = 1;
2502       CLASSTYPE_TEMPLATE_INFO (t) = template_info;
2503       CLASSTYPE_USE_TEMPLATE (t) = use_template;
2504     }
2505   TYPE_SIZE (t) = NULL_TREE;
2506   TYPE_MODE (t) = VOIDmode;
2507   TYPE_FIELDS (t) = NULL_TREE;
2508   TYPE_METHODS (t) = NULL_TREE;
2509   TYPE_VFIELD (t) = NULL_TREE;
2510   TYPE_CONTEXT (t) = NULL_TREE;
2511   TYPE_NONCOPIED_PARTS (t) = NULL_TREE;
2512 }
2513
2514 /* Make the BINFO's vtablehave N entries, including RTTI entries,
2515    vbase and vcall offsets, etc.  Set its type and call the backend
2516    to lay it out.  */
2517
2518 static void
2519 layout_vtable_decl (binfo, n)
2520      tree binfo;
2521      int n;
2522 {
2523   tree itype;
2524   tree atype;
2525
2526   itype = size_int (n);
2527   atype = build_cplus_array_type (vtable_entry_type, 
2528                                   build_index_type (itype));
2529   layout_type (atype);
2530
2531   /* We may have to grow the vtable.  */
2532   if (!same_type_p (TREE_TYPE (BINFO_VTABLE (binfo)), atype))
2533     {
2534       tree vtable = BINFO_VTABLE (binfo);
2535
2536       TREE_TYPE (vtable) = atype;
2537       DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = 0;
2538       layout_decl (vtable, 0);
2539
2540       /* At one time the vtable info was grabbed 2 words at a time.  This
2541          fails on Sparc unless you have 8-byte alignment.  */
2542       DECL_ALIGN (vtable) = MAX (TYPE_ALIGN (double_type_node),
2543                                  DECL_ALIGN (vtable));
2544     }
2545 }
2546
2547 /* Returns the number of virtual function table entries (excluding
2548    RTTI information, vbase and vcall offests, etc.) in the vtable for
2549    BINFO.  */
2550
2551 static int
2552 num_vfun_entries (binfo)
2553      tree binfo;
2554 {
2555   return list_length (skip_rtti_stuff (binfo,
2556                                        BINFO_TYPE (binfo),
2557                                        NULL));
2558 }
2559
2560 /* Called from num_extra_vtbl_entries via dfs_walk.  */
2561
2562 static tree
2563 dfs_count_virtuals (binfo, data)
2564      tree binfo;
2565      void *data;
2566 {
2567   /* Non-primary bases are not interesting; all of the virtual
2568      function table entries have been overridden.  */
2569   if (!BINFO_PRIMARY_MARKED_P (binfo))
2570     ((vcall_offset_data *) data)->offsets += num_vfun_entries (binfo);
2571   
2572   return NULL_TREE;
2573 }
2574
2575 /* Returns the number of extra entries (at negative indices) required
2576    for BINFO's vtable.  */
2577
2578 tree
2579 num_extra_vtbl_entries (binfo)
2580      tree binfo;
2581 {
2582   tree type;
2583   int entries;
2584
2585   type = BINFO_TYPE (binfo);
2586   entries = 0;
2587
2588   /* There is an entry for the offset to each virtual base.  */
2589   if (vbase_offsets_in_vtable_p ())
2590     entries += list_length (CLASSTYPE_VBASECLASSES (type));
2591
2592   /* If this is a virtual base, there are entries for each virtual
2593      function defined in this class or its bases.  */
2594   if (vcall_offsets_in_vtable_p () && TREE_VIA_VIRTUAL (binfo))
2595     {
2596       vcall_offset_data vod;
2597
2598       vod.vbase = binfo;
2599       vod.offsets = 0;
2600       dfs_walk (binfo,
2601                 dfs_count_virtuals,
2602                 dfs_vcall_offset_queue_p,
2603                 &vod);
2604       entries += vod.offsets;
2605     }
2606       
2607   return entries ? size_int (entries) : size_zero_node;
2608 }
2609
2610 /* Returns the offset (in bytes) from the beginning of BINFO's vtable
2611    where the vptr should actually point.  */
2612
2613 tree
2614 size_extra_vtbl_entries (binfo)
2615      tree binfo;
2616 {
2617   tree offset = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (vtable_entry_type),
2618                             num_extra_vtbl_entries (binfo));
2619   return fold (offset);
2620 }
2621
2622 /* Construct the initializer for BINFOs virtual function table.  BINFO
2623    is part of the hierarchy dominated by T.  The value returned is a
2624    TREE_LIST suitable for wrapping in a CONSTRUCTOR to use as the
2625    DECL_INITIAL for a vtable.  */
2626
2627 static tree
2628 build_vtbl_initializer (binfo, t)
2629      tree binfo;
2630      tree t;
2631 {
2632   tree v = BINFO_VIRTUALS (binfo);
2633   tree inits = NULL_TREE;
2634   tree type = BINFO_TYPE (binfo);
2635
2636   /* Add entries to the vtable that indicate how to adjust the this
2637      pointer when calling a virtual function in this class.  */
2638   inits = build_vcall_offset_vtbl_entries (binfo, t);
2639
2640   /* Add entries to the vtable for offsets to our virtual bases.  */
2641   inits = chainon (build_vbase_offset_vtbl_entries (binfo, t),
2642                    inits);
2643
2644   /* Process the RTTI stuff at the head of the list.  If we're not
2645      using vtable thunks, then the RTTI entry is just an ordinary
2646      function, and we can process it just like the other virtual
2647      function entries.  */
2648   if (!CLASSTYPE_COM_INTERFACE (type) && flag_vtable_thunks)
2649     {
2650       tree offset;
2651       tree init;
2652
2653       /* The first entry is an offset.  */
2654       offset = TREE_PURPOSE (v);
2655       my_friendly_assert (TREE_CODE (offset) == INTEGER_CST,
2656                           19990727);
2657
2658       /* Convert the offset to look like a function pointer, so that
2659          we can put it in the vtable.  */
2660       init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset);
2661       TREE_CONSTANT (init) = 1;
2662       inits = tree_cons (NULL_TREE, init, inits);
2663
2664       v = TREE_CHAIN (v);
2665       
2666       if (new_abi_rtti_p ())
2667         {
2668           tree decl = TREE_VALUE (v);
2669           
2670           if (decl)
2671             decl = build_unary_op (ADDR_EXPR, decl, 0);
2672           else
2673             decl = integer_zero_node;
2674           decl = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
2675           TREE_CONSTANT (decl) = 1;
2676           decl = build_vtable_entry (integer_zero_node, integer_zero_node,
2677                                      decl);
2678           inits = tree_cons (NULL_TREE, decl, inits);
2679           
2680           v = TREE_CHAIN (v);
2681         }
2682       /* In the old abi the second entry (the tdesc pointer) is
2683          just an ordinary function, so it can be dealt with like the
2684          virtual functions.  */
2685     }
2686
2687   /* Go through all the ordinary virtual functions, building up
2688      initializers.  */
2689   while (v)
2690     {
2691       tree delta;
2692       tree vcall_index;
2693       tree fn;
2694       tree pfn;
2695       tree init;
2696
2697       /* Pull the offset for `this', and the function to call, out of
2698          the list.  */
2699       delta = BV_DELTA (v);
2700       vcall_index = BV_VCALL_INDEX (v);
2701       fn = BV_FN (v);
2702       my_friendly_assert (TREE_CODE (delta) == INTEGER_CST, 19990727);
2703       my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL, 19990727);
2704
2705       /* You can't call an abstract virtual function; it's abstract.
2706          So, we replace these functions with __pure_virtual.  */
2707       if (DECL_PURE_VIRTUAL_P (fn))
2708         fn = abort_fndecl;
2709
2710       /* Take the address of the function, considering it to be of an
2711          appropriate generic type.  */
2712       pfn = build1 (ADDR_EXPR, vfunc_ptr_type_node, fn);
2713       /* The address of a function can't change.  */
2714       TREE_CONSTANT (pfn) = 1;
2715       /* Enter it in the vtable.  */
2716       init = build_vtable_entry (delta, vcall_index, pfn);
2717       /* And add it to the chain of initializers.  */
2718       inits = tree_cons (NULL_TREE, init, inits);
2719
2720       /* Keep going.  */
2721       v = TREE_CHAIN (v);
2722     }
2723
2724   /* The initializers were built up in reverse order; straighten them
2725      out now.  */
2726   return nreverse (inits);
2727 }
2728
2729 /* Initialize the vtable for BINFO with the INITS.  */
2730
2731 static void
2732 initialize_vtable (binfo, inits)
2733      tree binfo;
2734      tree inits;
2735 {
2736   tree context;
2737   tree decl;
2738
2739   layout_vtable_decl (binfo, list_length (inits));
2740   decl = BINFO_VTABLE (binfo);
2741   context = DECL_CONTEXT (decl);
2742   DECL_CONTEXT (decl) = 0;
2743   DECL_INITIAL (decl) = build_nt (CONSTRUCTOR, NULL_TREE, inits);
2744   cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
2745   DECL_CONTEXT (decl) = context;
2746 }
2747
2748 /* Called from finish_vtbls via dfs_walk.  */
2749
2750 static tree
2751 dfs_finish_vtbls (binfo, data)
2752      tree binfo;
2753      void *data;
2754 {
2755   if (!BINFO_PRIMARY_MARKED_P (binfo)
2756       && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo))
2757       && BINFO_NEW_VTABLE_MARKED (binfo))
2758     initialize_vtable (binfo, 
2759                        build_vtbl_initializer (binfo, (tree) data));
2760
2761   CLEAR_BINFO_NEW_VTABLE_MARKED (binfo);
2762   SET_BINFO_MARKED (binfo);
2763
2764   return NULL_TREE;
2765 }
2766
2767 /* Called from finish_vtbls via dfs_walk when using the new ABI.
2768    Accumulates the vtable initializers for all of the vtables into
2769    TREE_VALUE (DATA).  */
2770
2771 static tree
2772 dfs_accumulate_vtbl_inits (binfo, data)
2773      tree binfo;
2774      void *data;
2775 {
2776   if (!BINFO_PRIMARY_MARKED_P (binfo)
2777       && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo))
2778       && BINFO_NEW_VTABLE_MARKED (binfo))
2779     {
2780       tree l;
2781       tree t;
2782
2783       l = (tree) data;
2784       t = TREE_PURPOSE (l);
2785
2786       /* If this is a secondary vtable, record its location.  */
2787       if (binfo != TYPE_BINFO (t))
2788         {
2789           tree vtbl;
2790
2791           vtbl = TYPE_BINFO_VTABLE (t);
2792           vtbl = build1 (ADDR_EXPR, 
2793                          build_pointer_type (TREE_TYPE (vtbl)),
2794                          vtbl);
2795           BINFO_VTABLE (binfo)
2796             = build (PLUS_EXPR, TREE_TYPE (vtbl), vtbl,
2797                      size_binop (MULT_EXPR,
2798                                  TYPE_SIZE_UNIT (TREE_TYPE (vtbl)),
2799                                  size_int (list_length (TREE_VALUE (l)))));
2800         }
2801
2802       /* Add the initializers for this vtable to the initailizers for
2803          the other vtables we've already got.  */
2804       TREE_VALUE (l) 
2805         = chainon (TREE_VALUE (l),
2806                    build_vtbl_initializer (binfo, t));
2807     }
2808
2809   CLEAR_BINFO_NEW_VTABLE_MARKED (binfo);
2810   SET_BINFO_MARKED (binfo);
2811
2812   return NULL_TREE;
2813 }
2814
2815 /* Create all the necessary vtables for T and its base classes.  */
2816
2817 static void
2818 finish_vtbls (t)
2819      tree t;
2820 {
2821   if (merge_primary_and_secondary_vtables_p ())
2822     {
2823       tree list;
2824
2825       /* Under the new ABI, we lay out the primary and secondary
2826          vtables in one contiguous vtable.  The primary vtable is
2827          first, followed by the secondary vtables as encountered in a
2828          pre-order depth-first left-to-right traversal.  */
2829       list = build_tree_list (t, NULL_TREE);
2830       dfs_walk_real (TYPE_BINFO (t), 
2831                      dfs_accumulate_vtbl_inits,
2832                      NULL, 
2833                      dfs_unmarked_real_bases_queue_p, 
2834                      list);
2835       if (TYPE_BINFO_VTABLE (t))
2836         initialize_vtable (TYPE_BINFO (t), TREE_VALUE (list));
2837     }
2838   else
2839     dfs_walk (TYPE_BINFO (t), dfs_finish_vtbls, 
2840               dfs_unmarked_real_bases_queue_p, t);
2841
2842   dfs_walk (TYPE_BINFO (t), dfs_unmark, 
2843             dfs_marked_real_bases_queue_p, t);
2844 }
2845
2846 /* True if we should override the given BASE_FNDECL with the given
2847    FNDECL.  */
2848
2849 static int
2850 overrides (fndecl, base_fndecl)
2851      tree fndecl, base_fndecl;
2852 {
2853   /* Destructors have special names.  */
2854   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (base_fndecl))
2855       && DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (fndecl)))
2856     return 1;
2857   if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (base_fndecl))
2858       || DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (fndecl)))
2859     return 0;
2860   if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl))
2861     {
2862       tree types, base_types;
2863 #if 0
2864       retypes = TREE_TYPE (TREE_TYPE (fndecl));
2865       base_retypes = TREE_TYPE (TREE_TYPE (base_fndecl));
2866 #endif
2867       types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
2868       base_types = TYPE_ARG_TYPES (TREE_TYPE (base_fndecl));
2869       if ((TYPE_QUALS (TREE_TYPE (TREE_VALUE (base_types)))
2870            == TYPE_QUALS (TREE_TYPE (TREE_VALUE (types))))
2871           && compparms (TREE_CHAIN (base_types), TREE_CHAIN (types)))
2872         return 1;
2873     }
2874   return 0;
2875 }
2876
2877 typedef struct find_final_overrider_data_s {
2878   /* The function for which we are trying to find a final overrider.  */
2879   tree fn;
2880   /* The base class in which the function was declared.  */
2881   tree declaring_base;
2882   /* The most derived class in the hierarchy.  */
2883   tree most_derived_type;
2884   /* The final overriding function.  */
2885   tree overriding_fn;
2886   /* The BINFO for the class in which the final overriding function
2887      appears.  */
2888   tree overriding_base;
2889 } find_final_overrider_data;
2890
2891 /* Called from find_final_overrider via dfs_walk.  */
2892
2893 static tree
2894 dfs_find_final_overrider (binfo, data)
2895      tree binfo;
2896      void *data;
2897 {
2898   find_final_overrider_data *ffod = (find_final_overrider_data *) data;
2899
2900   if (same_type_p (BINFO_TYPE (binfo), 
2901                    BINFO_TYPE (ffod->declaring_base))
2902       && tree_int_cst_equal (BINFO_OFFSET (binfo),
2903                              BINFO_OFFSET (ffod->declaring_base)))
2904     {
2905       tree path;
2906       tree method;
2907
2908       /* We've found a path to the declaring base.  Walk down the path
2909          looking for an overrider for FN.  */
2910       for (path = reverse_path (binfo); 
2911            path; 
2912            path = TREE_CHAIN (path))
2913         {
2914           for (method = TYPE_METHODS (BINFO_TYPE (TREE_VALUE (path)));
2915                method;
2916                method = TREE_CHAIN (method))
2917             if (DECL_VIRTUAL_P (method) && overrides (method, ffod->fn))
2918               break;
2919
2920           if (method)
2921             break;
2922         }
2923
2924       /* If we found an overrider, record the overriding function, and
2925          the base from which it came.  */
2926       if (path)
2927         {
2928           if (ffod->overriding_fn && ffod->overriding_fn != method)
2929             {
2930               /* We've found a different overrider along a different
2931                  path.  That can be OK if the new one overrides the
2932                  old one.  Consider:
2933               
2934                    struct S { virtual void f(); };
2935                    struct T : public virtual S { virtual void f(); };
2936                    struct U : public virtual S, public virtual T {};
2937               
2938                  Here `T::f' is the final overrider for `S::f'.  */
2939               if (strictly_overrides (method, ffod->overriding_fn))
2940                 {
2941                   ffod->overriding_fn = method;
2942                   ffod->overriding_base = TREE_VALUE (path);
2943                 }
2944               else if (!strictly_overrides (ffod->overriding_fn, method))
2945                 {
2946                   cp_error ("no unique final overrider for `%D' in `%T'", 
2947                             ffod->most_derived_type,
2948                             ffod->fn);
2949                   cp_error ("candidates are: `%#D'", ffod->overriding_fn);
2950                   cp_error ("                `%#D'", method);
2951                   return error_mark_node;
2952                 }
2953             }
2954           else if (ffod->overriding_base
2955                    && (!tree_int_cst_equal 
2956                        (BINFO_OFFSET (TREE_VALUE (path)),
2957                         BINFO_OFFSET (ffod->overriding_base))))
2958             {
2959               /* We've found two instances of the same base that
2960                  provide overriders.  */
2961               cp_error ("no unique final overrider for `%D' since there two instances of `%T' in `%T'", 
2962                         ffod->fn,
2963                         BINFO_TYPE (ffod->overriding_base),
2964                         ffod->most_derived_type);
2965               return error_mark_node;
2966             }
2967           else
2968             {
2969               ffod->overriding_fn = method;
2970               ffod->overriding_base = TREE_VALUE (path);
2971             }
2972         }
2973     }
2974
2975   return NULL_TREE;
2976 }
2977
2978 /* Returns a TREE_LIST whose TREE_PURPOSE is the final overrider for
2979    FN and whose TREE_VALUE is the binfo for the base where the
2980    overriding occurs.  BINFO (in the hierarchy dominated by T) is the
2981    base object in which FN is declared.  */
2982
2983 static tree
2984 find_final_overrider (t, binfo, fn)
2985      tree t;
2986      tree binfo;
2987      tree fn;
2988 {
2989   find_final_overrider_data ffod;
2990
2991   /* Getting this right is a little tricky.  This is legal:
2992
2993        struct S { virtual void f (); };
2994        struct T { virtual void f (); };
2995        struct U : public S, public T { };
2996
2997      even though calling `f' in `U' is ambiguous.  But, 
2998
2999        struct R { virtual void f(); };
3000        struct S : virtual public R { virtual void f (); };
3001        struct T : virtual public R { virtual void f (); };
3002        struct U : public S, public T { };
3003
3004      is not -- there's no way  to decide whether to put `S::f' or
3005      `T::f' in the vtable for `R'.  
3006      
3007      The solution is to look at all paths to BINFO.  If we find
3008      different overriders along any two, then there is a problem.  */
3009   ffod.fn = fn;
3010   ffod.declaring_base = binfo;
3011   ffod.most_derived_type = t;
3012   ffod.overriding_fn = NULL_TREE;
3013   ffod.overriding_base = NULL_TREE;
3014
3015   if (dfs_walk (TYPE_BINFO (t),
3016                 dfs_find_final_overrider,
3017                 NULL,
3018                 &ffod))
3019     return error_mark_node;
3020
3021   return build_tree_list (ffod.overriding_fn, ffod.overriding_base);
3022 }
3023
3024 /* Return the BINFO_VIRTUALS list for BINFO, without the RTTI stuff at
3025    the front.  If non-NULL, N is set to the number of entries
3026    skipped.  */
3027
3028 tree
3029 skip_rtti_stuff (binfo, t, n)
3030      tree binfo;
3031      tree t;
3032      HOST_WIDE_INT *n;
3033 {
3034   tree virtuals;
3035
3036   if (CLASSTYPE_COM_INTERFACE (t))
3037     return 0;
3038
3039   if (n)
3040     *n = 0;
3041   virtuals = BINFO_VIRTUALS (binfo);
3042   if (virtuals)
3043     {
3044       /* We always reserve a slot for the offset/tdesc entry.  */
3045       if (n)
3046         ++*n;
3047       virtuals = TREE_CHAIN (virtuals);
3048     }
3049   if (flag_vtable_thunks && virtuals)
3050     {
3051       /* The second slot is reserved for the tdesc pointer when thunks
3052          are used.  */
3053       if (n)
3054         ++*n;
3055       virtuals = TREE_CHAIN (virtuals);
3056     }
3057
3058   return virtuals;
3059 }
3060
3061 /* Called via dfs_walk.  Returns BINFO if BINFO has the same type as
3062    DATA (which is really an _TYPE node).  */
3063
3064 static tree
3065 dfs_find_base (binfo, data)
3066      tree binfo;
3067      void *data;
3068 {
3069   return (same_type_p (BINFO_TYPE (binfo), (tree) data)
3070           ? binfo : NULL_TREE);
3071 }
3072
3073 /* Called from modify_all_vtables via dfs_walk.  */
3074
3075 static tree
3076 dfs_modify_vtables (binfo, data)
3077      tree binfo;
3078      void *data;
3079 {
3080   if (/* There's no need to modify the vtable for a primary base;
3081          we're not going to use that vtable anyhow.  */
3082       !BINFO_PRIMARY_MARKED_P (binfo)
3083       /* Similarly, a base without a vtable needs no modification.  */
3084       && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
3085     {
3086       tree t;
3087       tree virtuals;
3088       tree old_virtuals;
3089
3090       t = (tree) data;
3091
3092       /* If we're supporting RTTI then we always need a new vtable to
3093          point to the RTTI information.  Under the new ABI we may need
3094          a new vtable to contain vcall and vbase offsets.  */
3095       if (flag_rtti || flag_new_abi)
3096         make_new_vtable (t, binfo);
3097       
3098       /* Now, go through each of the virtual functions in the virtual
3099          function table for BINFO.  Find the final overrider, and
3100          update the BINFO_VIRTUALS list appropriately.  */
3101       for (virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), NULL),
3102              old_virtuals = skip_rtti_stuff (TYPE_BINFO (BINFO_TYPE (binfo)),
3103                                              BINFO_TYPE (binfo),
3104                                              NULL);
3105            virtuals;
3106            virtuals = TREE_CHAIN (virtuals),
3107              old_virtuals = TREE_CHAIN (old_virtuals))
3108         {
3109           tree b;
3110           tree fn;
3111           tree overrider;
3112           tree vindex;
3113           tree delta;
3114           HOST_WIDE_INT vindex_val, i;
3115
3116
3117           /* Find the function which originally caused this vtable
3118              entry to be present.  */
3119           fn = BV_FN (old_virtuals);
3120           vindex = DECL_VINDEX (fn);
3121           b = dfs_walk (binfo, dfs_find_base, NULL, DECL_VIRTUAL_CONTEXT (fn));
3122           fn = skip_rtti_stuff (TYPE_BINFO (BINFO_TYPE (b)),
3123                                 BINFO_TYPE (b),
3124                                 &i);
3125           vindex_val = tree_low_cst (vindex, 0);
3126           while (i < vindex_val)
3127             {
3128               fn = TREE_CHAIN (fn);
3129               ++i;
3130             }
3131           fn = BV_FN (fn);
3132
3133           /* Handle the case of a virtual function defined in BINFO
3134              itself.  */
3135           overrider = find_final_overrider (t, b, fn);
3136           if (overrider == error_mark_node)
3137             continue;
3138
3139           /* The `this' pointer needs to be adjusted from pointing to
3140              BINFO to pointing at the base where the final overrider
3141              appears.  */
3142           delta = size_binop (PLUS_EXPR,
3143                               get_derived_offset (binfo,
3144                                                   DECL_VIRTUAL_CONTEXT (fn)),
3145                               BINFO_OFFSET (binfo));
3146           delta = size_diffop (BINFO_OFFSET (TREE_VALUE (overrider)), delta);
3147
3148           modify_vtable_entry (t, 
3149                                binfo, 
3150                                TREE_PURPOSE (overrider),
3151                                delta,
3152                                &virtuals);
3153         }
3154     }
3155
3156   SET_BINFO_MARKED (binfo);
3157
3158   return NULL_TREE;
3159 }
3160
3161 /* Update all of the primary and secondary vtables for T.  Create new
3162    vtables as required, and initialize their RTTI information.  Each
3163    of the functions in OVERRIDDEN_VIRTUALS overrides a virtual
3164    function from a base class; find and modify the appropriate entries
3165    to point to the overriding functions.  Returns a list, in
3166    declaration order, of the functions that are overridden in this
3167    class, but do not appear in the primary base class vtable, and
3168    which should therefore be appended to the end of the vtable for T.  */
3169
3170 static tree
3171 modify_all_vtables (t, has_virtual_p, overridden_virtuals)
3172      tree t;
3173      int *has_virtual_p;
3174      tree overridden_virtuals;
3175 {
3176   tree binfo;
3177
3178   binfo = TYPE_BINFO (t);
3179
3180   /* Update all of the vtables.  */
3181   dfs_walk (binfo, 
3182             dfs_modify_vtables, 
3183             dfs_unmarked_real_bases_queue_p,
3184             t);
3185   dfs_walk (binfo, dfs_unmark, dfs_marked_real_bases_queue_p, t);
3186
3187   /* If we should include overriding functions for secondary vtables
3188      in our primary vtable, add them now.  */
3189   if (all_overridden_vfuns_in_vtables_p ())
3190     {
3191       tree *fnsp = &overridden_virtuals;
3192
3193       while (*fnsp)
3194         {
3195           tree fn = TREE_VALUE (*fnsp);
3196
3197           if (BINFO_VIRTUALS (binfo)
3198               && !value_member (fn, BINFO_VIRTUALS (binfo)))
3199             {
3200               /* We know we need a vtable for this class now.  */
3201               start_vtable (t, has_virtual_p);
3202               /* Set the vtable index.  */
3203               DECL_VINDEX (fn) 
3204                 = build_shared_int_cst ((*has_virtual_p)++);
3205               /* We don't need to convert to a base class when calling
3206                  this function.  */
3207               DECL_VIRTUAL_CONTEXT (fn) = t;
3208
3209               /* We don't need to adjust the `this' pointer when
3210                  calling this function.  */
3211               BV_DELTA (*fnsp) = integer_zero_node;
3212               BV_VCALL_INDEX (*fnsp) = integer_zero_node;
3213
3214               /* This is an overridden function not already in our
3215                  vtable.  Keep it.  */
3216               fnsp = &TREE_CHAIN (*fnsp);
3217             }
3218           else
3219             /* We've already got an entry for this function.  Skip
3220                it.  */
3221             *fnsp = TREE_CHAIN (*fnsp);
3222         }
3223     }
3224   else
3225     overridden_virtuals = NULL_TREE;
3226
3227   return overridden_virtuals;
3228 }
3229
3230 /* Here, we already know that they match in every respect.
3231    All we have to check is where they had their declarations.  */
3232
3233 static int 
3234 strictly_overrides (fndecl1, fndecl2)
3235      tree fndecl1, fndecl2;
3236 {
3237   int distance = get_base_distance (DECL_CONTEXT (fndecl2),
3238                                     DECL_CONTEXT (fndecl1),
3239                                     0, (tree *)0);
3240   if (distance == -2 || distance > 0)
3241     return 1;
3242   return 0;
3243 }
3244
3245 /* Get the base virtual function declarations in T that are either
3246    overridden or hidden by FNDECL as a list.  We set TREE_PURPOSE with
3247    the overrider/hider.  */
3248
3249 static tree
3250 get_basefndecls (fndecl, t)
3251      tree fndecl, t;
3252 {
3253   tree methods = TYPE_METHODS (t);
3254   tree base_fndecls = NULL_TREE;
3255   tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
3256   int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
3257
3258   while (methods)
3259     {
3260       if (TREE_CODE (methods) == FUNCTION_DECL
3261           && DECL_VINDEX (methods) != NULL_TREE
3262           && DECL_NAME (fndecl) == DECL_NAME (methods))
3263         base_fndecls = tree_cons (fndecl, methods, base_fndecls);
3264
3265       methods = TREE_CHAIN (methods);
3266     }
3267
3268   if (base_fndecls)
3269     return base_fndecls;
3270
3271   for (i = 0; i < n_baseclasses; i++)
3272     {
3273       tree base_binfo = TREE_VEC_ELT (binfos, i);
3274       tree basetype = BINFO_TYPE (base_binfo);
3275
3276       base_fndecls = chainon (get_basefndecls (fndecl, basetype),
3277                               base_fndecls);
3278     }
3279
3280   return base_fndecls;
3281 }
3282
3283 /* Mark the functions that have been hidden with their overriders.
3284    Since we start out with all functions already marked with a hider,
3285    no need to mark functions that are just hidden.
3286
3287    Subroutine of warn_hidden.  */
3288
3289 static void
3290 mark_overriders (fndecl, base_fndecls)
3291      tree fndecl, base_fndecls;
3292 {
3293   for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
3294     {
3295       if (overrides (fndecl, TREE_VALUE (base_fndecls)))
3296         TREE_PURPOSE (base_fndecls) = fndecl;
3297     }
3298 }
3299
3300 /* If this declaration supersedes the declaration of
3301    a method declared virtual in the base class, then
3302    mark this field as being virtual as well.  */
3303
3304 static void
3305 check_for_override (decl, ctype)
3306      tree decl, ctype;
3307 {
3308   tree binfos = BINFO_BASETYPES (TYPE_BINFO (ctype));
3309   int i, n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
3310   int virtualp = DECL_VIRTUAL_P (decl);
3311   int found_overriden_fn = 0;
3312
3313   for (i = 0; i < n_baselinks; i++)
3314     {
3315       tree base_binfo = TREE_VEC_ELT (binfos, i);
3316       if (TYPE_POLYMORPHIC_P (BINFO_TYPE (base_binfo)))
3317         {
3318           tree tmp = get_matching_virtual
3319             (base_binfo, decl,
3320              DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (decl)));
3321
3322           if (tmp && !found_overriden_fn)
3323             {
3324               /* If this function overrides some virtual in some base
3325                  class, then the function itself is also necessarily
3326                  virtual, even if the user didn't explicitly say so.  */
3327               DECL_VIRTUAL_P (decl) = 1;
3328
3329               /* The TMP we really want is the one from the deepest
3330                  baseclass on this path, taking care not to
3331                  duplicate if we have already found it (via another
3332                  path to its virtual baseclass.  */
3333               if (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE)
3334                 {
3335                   cp_error_at ("`static %#D' cannot be declared", decl);
3336                   cp_error_at ("  since `virtual %#D' declared in base class",
3337                                tmp);
3338                   break;
3339                 }
3340               virtualp = 1;
3341
3342               /* Set DECL_VINDEX to a value that is neither an
3343                  INTEGER_CST nor the error_mark_node so that
3344                  add_virtual_function will realize this is an
3345                  overridden function.  */
3346               DECL_VINDEX (decl) 
3347                 = tree_cons (tmp, NULL_TREE, DECL_VINDEX (decl));
3348               
3349               /* We now know that DECL overrides something,
3350                  which is all that is important.  But, we must
3351                  continue to iterate through all the base-classes
3352                  in order to allow get_matching_virtual to check for
3353                  various illegal overrides.  */
3354               found_overriden_fn = 1;
3355             }
3356         }
3357     }
3358   if (virtualp)
3359     {
3360       if (DECL_VINDEX (decl) == NULL_TREE)
3361         DECL_VINDEX (decl) = error_mark_node;
3362       IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
3363     }
3364 }
3365
3366 /* Warn about hidden virtual functions that are not overridden in t.
3367    We know that constructors and destructors don't apply.  */
3368
3369 void
3370 warn_hidden (t)
3371      tree t;
3372 {
3373   tree method_vec = CLASSTYPE_METHOD_VEC (t);
3374   int n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
3375   int i;
3376
3377   /* We go through each separately named virtual function.  */
3378   for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
3379     {
3380       tree fns = TREE_VEC_ELT (method_vec, i);
3381       tree fndecl = NULL_TREE;
3382
3383       tree base_fndecls = NULL_TREE;
3384       tree binfos = BINFO_BASETYPES (TYPE_BINFO (t));
3385       int i, n_baseclasses = binfos ? TREE_VEC_LENGTH (binfos) : 0;
3386
3387       /* First see if we have any virtual functions in this batch.  */
3388       for (; fns; fns = OVL_NEXT (fns))
3389         {
3390           fndecl = OVL_CURRENT (fns);
3391           if (DECL_VINDEX (fndecl))
3392             break;
3393         }
3394
3395       if (fns == NULL_TREE)
3396         continue;
3397
3398       /* First we get a list of all possible functions that might be
3399          hidden from each base class.  */
3400       for (i = 0; i < n_baseclasses; i++)
3401         {
3402           tree base_binfo = TREE_VEC_ELT (binfos, i);
3403           tree basetype = BINFO_TYPE (base_binfo);
3404
3405           base_fndecls = chainon (get_basefndecls (fndecl, basetype),
3406                                   base_fndecls);
3407         }
3408
3409       fns = OVL_NEXT (fns);
3410
3411       /* ...then mark up all the base functions with overriders, preferring
3412          overriders to hiders.  */
3413       if (base_fndecls)
3414         for (; fns; fns = OVL_NEXT (fns))
3415           {
3416             fndecl = OVL_CURRENT (fns);
3417             if (DECL_VINDEX (fndecl))
3418               mark_overriders (fndecl, base_fndecls);
3419           }
3420
3421       /* Now give a warning for all base functions without overriders,
3422          as they are hidden.  */
3423       for (; base_fndecls; base_fndecls = TREE_CHAIN (base_fndecls))
3424         {
3425           if (! overrides (TREE_PURPOSE (base_fndecls),
3426                            TREE_VALUE (base_fndecls)))
3427             {
3428               /* Here we know it is a hider, and no overrider exists.  */
3429               cp_warning_at ("`%D' was hidden", TREE_VALUE (base_fndecls));
3430               cp_warning_at ("  by `%D'", TREE_PURPOSE (base_fndecls));
3431             }
3432         }
3433     }
3434 }
3435
3436 /* Check for things that are invalid.  There are probably plenty of other
3437    things we should check for also.  */
3438
3439 static void
3440 finish_struct_anon (t)
3441      tree t;
3442 {
3443   tree field;
3444
3445   for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3446     {
3447       if (TREE_STATIC (field))
3448         continue;
3449       if (TREE_CODE (field) != FIELD_DECL)
3450         continue;
3451
3452       if (DECL_NAME (field) == NULL_TREE
3453           && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
3454         {
3455           tree elt = TYPE_FIELDS (TREE_TYPE (field));
3456           for (; elt; elt = TREE_CHAIN (elt))
3457             {
3458               if (DECL_ARTIFICIAL (elt))
3459                 continue;
3460
3461               if (DECL_NAME (elt) == constructor_name (t))
3462                 cp_pedwarn_at ("ISO C++ forbids member `%D' with same name as enclosing class",
3463                                elt);
3464
3465               if (TREE_CODE (elt) != FIELD_DECL)
3466                 {
3467                   cp_pedwarn_at ("`%#D' invalid; an anonymous union can only have non-static data members",
3468                                  elt);
3469                   continue;
3470                 }
3471
3472               if (TREE_PRIVATE (elt))
3473                 cp_pedwarn_at ("private member `%#D' in anonymous union",
3474                                elt);
3475               else if (TREE_PROTECTED (elt))
3476                 cp_pedwarn_at ("protected member `%#D' in anonymous union",
3477                                elt);
3478
3479               TREE_PRIVATE (elt) = TREE_PRIVATE (field);
3480               TREE_PROTECTED (elt) = TREE_PROTECTED (field);
3481             }
3482         }
3483     }
3484 }
3485
3486 extern int interface_only, interface_unknown;
3487
3488 /* Create default constructors, assignment operators, and so forth for
3489    the type indicated by T, if they are needed.
3490    CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
3491    CANT_HAVE_ASSIGNMENT are nonzero if, for whatever reason, the class
3492    cannot have a default constructor, copy constructor taking a const
3493    reference argument, or an assignment operator, respectively.  If a
3494    virtual destructor is created, its DECL is returned; otherwise the
3495    return value is NULL_TREE.  */
3496
3497 static tree
3498 add_implicitly_declared_members (t, cant_have_default_ctor,
3499                                  cant_have_const_cctor,
3500                                  cant_have_assignment)
3501      tree t;
3502      int cant_have_default_ctor;
3503      int cant_have_const_cctor;
3504      int cant_have_assignment;
3505 {
3506   tree default_fn;
3507   tree implicit_fns = NULL_TREE;
3508   tree name = TYPE_IDENTIFIER (t);
3509   tree virtual_dtor = NULL_TREE;
3510   tree *f;
3511
3512   /* Destructor.  */
3513   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t))
3514     {
3515       default_fn = cons_up_default_function (t, name, 0);
3516       check_for_override (default_fn, t);
3517
3518       /* If we couldn't make it work, then pretend we didn't need it.  */
3519       if (default_fn == void_type_node)
3520         TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0;
3521       else
3522         {
3523           TREE_CHAIN (default_fn) = implicit_fns;
3524           implicit_fns = default_fn;
3525
3526           if (DECL_VINDEX (default_fn))
3527             virtual_dtor = default_fn;
3528         }
3529     }
3530   else
3531     /* Any non-implicit destructor is non-trivial.  */
3532     TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
3533
3534   /* Default constructor.  */
3535   if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor)
3536     {
3537       default_fn = cons_up_default_function (t, name, 2);
3538       TREE_CHAIN (default_fn) = implicit_fns;
3539       implicit_fns = default_fn;
3540     }
3541
3542   /* Copy constructor.  */
3543   if (! TYPE_HAS_INIT_REF (t) && ! TYPE_FOR_JAVA (t))
3544     {
3545       /* ARM 12.18: You get either X(X&) or X(const X&), but
3546          not both.  --Chip  */
3547       default_fn = cons_up_default_function (t, name,
3548                                              3 + cant_have_const_cctor);
3549       TREE_CHAIN (default_fn) = implicit_fns;
3550       implicit_fns = default_fn;
3551     }
3552
3553   /* Assignment operator.  */
3554   if (! TYPE_HAS_ASSIGN_REF (t) && ! TYPE_FOR_JAVA (t))
3555     {
3556       default_fn = cons_up_default_function (t, name,
3557                                              5 + cant_have_assignment);
3558       TREE_CHAIN (default_fn) = implicit_fns;
3559       implicit_fns = default_fn;
3560     }
3561
3562   /* Now, hook all of the new functions on to TYPE_METHODS,
3563      and add them to the CLASSTYPE_METHOD_VEC.  */
3564   for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
3565     add_method (t, 0, *f);
3566   *f = TYPE_METHODS (t);
3567   TYPE_METHODS (t) = implicit_fns;
3568
3569   return virtual_dtor;
3570 }
3571
3572 /* Subroutine of finish_struct_1.  Recursively count the number of fields
3573    in TYPE, including anonymous union members.  */
3574
3575 static int
3576 count_fields (fields)
3577      tree fields;
3578 {
3579   tree x;
3580   int n_fields = 0;
3581   for (x = fields; x; x = TREE_CHAIN (x))
3582     {
3583       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3584         n_fields += count_fields (TYPE_FIELDS (TREE_TYPE (x)));
3585       else
3586         n_fields += 1;
3587     }
3588   return n_fields;
3589 }
3590
3591 /* Subroutine of finish_struct_1.  Recursively add all the fields in the
3592    TREE_LIST FIELDS to the TREE_VEC FIELD_VEC, starting at offset IDX.  */
3593
3594 static int
3595 add_fields_to_vec (fields, field_vec, idx)
3596      tree fields, field_vec;
3597      int idx;
3598 {
3599   tree x;
3600   for (x = fields; x; x = TREE_CHAIN (x))
3601     {
3602       if (TREE_CODE (x) == FIELD_DECL && ANON_AGGR_TYPE_P (TREE_TYPE (x)))
3603         idx = add_fields_to_vec (TYPE_FIELDS (TREE_TYPE (x)), field_vec, idx);
3604       else
3605         TREE_VEC_ELT (field_vec, idx++) = x;
3606     }
3607   return idx;
3608 }
3609
3610 /* FIELD is a bit-field.  We are finishing the processing for its
3611    enclosing type.  Issue any appropriate messages and set appropriate
3612    flags.  */
3613
3614 static void
3615 check_bitfield_decl (field)
3616      tree field;
3617 {
3618   tree type = TREE_TYPE (field);
3619
3620   /* Invalid bit-field size done by grokfield.  */
3621   /* Detect invalid bit-field type. Simply checking if TYPE is
3622      integral is insufficient, as that is the array core of the field
3623      type. If TREE_TYPE (field) is integral, then TYPE must be the same.  */
3624   if (DECL_INITIAL (field)
3625       && ! INTEGRAL_TYPE_P (TREE_TYPE (field)))
3626     {
3627       cp_error_at ("bit-field `%#D' with non-integral type", field);
3628       DECL_INITIAL (field) = NULL;
3629     }
3630
3631   /* Detect and ignore out of range field width.  */
3632   if (DECL_INITIAL (field))
3633     {
3634       tree w = DECL_INITIAL (field);
3635
3636       /* Avoid the non_lvalue wrapper added by fold for PLUS_EXPRs.  */
3637       STRIP_NOPS (w);
3638
3639       /* detect invalid field size.  */
3640       if (TREE_CODE (w) == CONST_DECL)
3641         w = DECL_INITIAL (w);
3642       else if (TREE_READONLY_DECL_P (w))
3643         w = decl_constant_value (w);
3644
3645       if (TREE_CODE (w) != INTEGER_CST)
3646         {
3647           cp_error_at ("bit-field `%D' width not an integer constant",
3648                        field);
3649           DECL_INITIAL (field) = NULL_TREE;
3650         }
3651       else if (tree_int_cst_sgn (w) < 0)
3652         {
3653           DECL_INITIAL (field) = NULL;
3654           cp_error_at ("negative width in bit-field `%D'", field);
3655         }
3656       else if (integer_zerop (w) && DECL_NAME (field) != 0)
3657         {
3658           DECL_INITIAL (field) = NULL;
3659           cp_error_at ("zero width for bit-field `%D'", field);
3660         }
3661       else if (0 < compare_tree_int (w,
3662                                      TYPE_PRECISION
3663                                      (long_long_unsigned_type_node)))
3664         {
3665           /* The backend will dump if you try to use something too
3666              big; avoid that.  */
3667           DECL_INITIAL (field) = NULL;
3668           sorry ("bit-fields larger than %d bits",
3669                  TYPE_PRECISION (long_long_unsigned_type_node));
3670           cp_error_at ("  in declaration of `%D'", field);
3671         }
3672       else if (compare_tree_int (w, TYPE_PRECISION (type)) > 0
3673                && TREE_CODE (type) != ENUMERAL_TYPE
3674                && TREE_CODE (type) != BOOLEAN_TYPE)
3675         cp_warning_at ("width of `%D' exceeds its type", field);
3676       else if (TREE_CODE (type) == ENUMERAL_TYPE
3677                && (0 > compare_tree_int (w,
3678                                          min_precision (TYPE_MIN_VALUE (type),
3679                                                         TREE_UNSIGNED (type)))
3680                    ||  0 > compare_tree_int (w,
3681                                              min_precision
3682                                              (TYPE_MAX_VALUE (type),
3683                                               TREE_UNSIGNED (type)))))
3684         cp_warning_at ("`%D' is too small to hold all values of `%#T'",
3685                        field, type);
3686
3687       if (DECL_INITIAL (field))
3688         {
3689           DECL_INITIAL (field) = NULL_TREE;
3690           DECL_SIZE (field) = convert (bitsizetype, w);
3691           DECL_BIT_FIELD (field) = 1;
3692
3693           if (integer_zerop (w))
3694             {
3695 #ifdef EMPTY_FIELD_BOUNDARY
3696               DECL_ALIGN (field) = MAX (DECL_ALIGN (field), 
3697                                         EMPTY_FIELD_BOUNDARY);
3698 #endif
3699 #ifdef PCC_BITFIELD_TYPE_MATTERS
3700               if (PCC_BITFIELD_TYPE_MATTERS)
3701                 DECL_ALIGN (field) = MAX (DECL_ALIGN (field), 
3702                                           TYPE_ALIGN (type));
3703 #endif
3704             }
3705         }
3706     }
3707   else
3708     /* Non-bit-fields are aligned for their type.  */
3709     DECL_ALIGN (field) = MAX (DECL_ALIGN (field), TYPE_ALIGN (type));
3710 }
3711
3712 /* FIELD is a non bit-field.  We are finishing the processing for its
3713    enclosing type T.  Issue any appropriate messages and set appropriate
3714    flags.  */
3715
3716 static void
3717 check_field_decl (field, t, cant_have_const_ctor,
3718                   cant_have_default_ctor, no_const_asn_ref,
3719                   any_default_members)
3720      tree field;
3721      tree t;
3722      int *cant_have_const_ctor;
3723      int *cant_have_default_ctor;
3724      int *no_const_asn_ref;
3725      int *any_default_members;
3726 {
3727   tree type = strip_array_types (TREE_TYPE (field));
3728
3729   /* An anonymous union cannot contain any fields which would change
3730      the settings of CANT_HAVE_CONST_CTOR and friends.  */
3731   if (ANON_UNION_TYPE_P (type))
3732     ;
3733   /* And, we don't set TYPE_HAS_CONST_INIT_REF, etc., for anonymous
3734      structs.  So, we recurse through their fields here.  */
3735   else if (ANON_AGGR_TYPE_P (type))
3736     {
3737       tree fields;
3738
3739       for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
3740         if (TREE_CODE (field) == FIELD_DECL && !DECL_C_BIT_FIELD (field))
3741           check_field_decl (fields, t, cant_have_const_ctor,
3742                             cant_have_default_ctor, no_const_asn_ref,
3743                             any_default_members);
3744     }
3745   /* Check members with class type for constructors, destructors,
3746      etc.  */
3747   else if (CLASS_TYPE_P (type))
3748     {
3749       /* Never let anything with uninheritable virtuals
3750          make it through without complaint.  */
3751       abstract_virtuals_error (field, type);
3752                       
3753       if (TREE_CODE (t) == UNION_TYPE)
3754         {
3755           if (TYPE_NEEDS_CONSTRUCTING (type))
3756             cp_error_at ("member `%#D' with constructor not allowed in union",
3757                          field);
3758           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3759             cp_error_at ("member `%#D' with destructor not allowed in union",
3760                          field);
3761           if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3762             cp_error_at ("member `%#D' with copy assignment operator not allowed in union",
3763                          field);
3764         }
3765       else
3766         {
3767           TYPE_NEEDS_CONSTRUCTING (t) |= TYPE_NEEDS_CONSTRUCTING (type);
3768           TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) 
3769             |= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type);
3770           TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_HAS_COMPLEX_ASSIGN_REF (type);
3771           TYPE_HAS_COMPLEX_INIT_REF (t) |= TYPE_HAS_COMPLEX_INIT_REF (type);
3772         }
3773
3774       if (!TYPE_HAS_CONST_INIT_REF (type))
3775         *cant_have_const_ctor = 1;
3776
3777       if (!TYPE_HAS_CONST_ASSIGN_REF (type))
3778         *no_const_asn_ref = 1;
3779
3780       if (TYPE_HAS_CONSTRUCTOR (type)
3781           && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3782         *cant_have_default_ctor = 1;
3783     }
3784   if (DECL_INITIAL (field) != NULL_TREE)
3785     {
3786       /* `build_class_init_list' does not recognize
3787          non-FIELD_DECLs.  */
3788       if (TREE_CODE (t) == UNION_TYPE && any_default_members != 0)
3789         cp_error_at ("multiple fields in union `%T' initialized");
3790       *any_default_members = 1;
3791     }
3792
3793   /* Non-bit-fields are aligned for their type, except packed fields
3794      which require only BITS_PER_UNIT alignment.  */
3795   DECL_ALIGN (field) = MAX (DECL_ALIGN (field), 
3796                             (DECL_PACKED (field) 
3797                              ? BITS_PER_UNIT
3798                              : TYPE_ALIGN (TREE_TYPE (field))));
3799 }
3800
3801 /* Check the data members (both static and non-static), class-scoped
3802    typedefs, etc., appearing in the declaration of T.  Issue
3803    appropriate diagnostics.  Sets ACCESS_DECLS to a list (in
3804    declaration order) of access declarations; each TREE_VALUE in this
3805    list is a USING_DECL.
3806
3807    In addition, set the following flags:
3808
3809      EMPTY_P
3810        The class is empty, i.e., contains no non-static data members.
3811
3812      CANT_HAVE_DEFAULT_CTOR_P
3813        This class cannot have an implicitly generated default
3814        constructor.
3815
3816      CANT_HAVE_CONST_CTOR_P
3817        This class cannot have an implicitly generated copy constructor
3818        taking a const reference.
3819
3820      CANT_HAVE_CONST_ASN_REF
3821        This class cannot have an implicitly generated assignment
3822        operator taking a const reference.
3823
3824    All of these flags should be initialized before calling this
3825    function.
3826
3827    Returns a pointer to the end of the TYPE_FIELDs chain; additional
3828    fields can be added by adding to this chain.  */
3829
3830 static void
3831 check_field_decls (t, access_decls, empty_p, 
3832                    cant_have_default_ctor_p, cant_have_const_ctor_p,
3833                    no_const_asn_ref_p)
3834      tree t;
3835      tree *access_decls;
3836      int *empty_p;
3837      int *cant_have_default_ctor_p;
3838      int *cant_have_const_ctor_p;
3839      int *no_const_asn_ref_p;
3840 {
3841   tree *field;
3842   tree *next;
3843   int has_pointers;
3844   int any_default_members;
3845
3846   /* First, delete any duplicate fields.  */
3847   delete_duplicate_fields (TYPE_FIELDS (t));
3848
3849   /* Assume there are no access declarations.  */
3850   *access_decls = NULL_TREE;
3851   /* Assume this class has no pointer members.  */
3852   has_pointers = 0;
3853   /* Assume none of the members of this class have default
3854      initializations.  */
3855   any_default_members = 0;
3856
3857   for (field = &TYPE_FIELDS (t); *field; field = next)
3858     {
3859       tree x = *field;
3860       tree type = TREE_TYPE (x);
3861
3862       GNU_xref_member (current_class_name, x);
3863
3864       next = &TREE_CHAIN (x);
3865
3866       if (TREE_CODE (x) == FIELD_DECL)
3867         {
3868           DECL_PACKED (x) |= TYPE_PACKED (t);
3869
3870           if (DECL_C_BIT_FIELD (x) && integer_zerop (DECL_INITIAL (x)))
3871             /* We don't treat zero-width bitfields as making a class
3872                non-empty.  */
3873             ;
3874           else
3875             {
3876               /* The class is non-empty.  */
3877               *empty_p = 0;
3878               /* The class is not even nearly empty.  */
3879               CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
3880             }
3881         }
3882
3883       if (TREE_CODE (x) == USING_DECL)
3884         {
3885           /* Prune the access declaration from the list of fields.  */
3886           *field = TREE_CHAIN (x);
3887
3888           /* Save the access declarations for our caller.  */
3889           *access_decls = tree_cons (NULL_TREE, x, *access_decls);
3890
3891           /* Since we've reset *FIELD there's no reason to skip to the
3892              next field.  */
3893           next = field;
3894           continue;
3895         }
3896
3897       if (TREE_CODE (x) == TYPE_DECL
3898           || TREE_CODE (x) == TEMPLATE_DECL)
3899         continue;
3900
3901       /* If we've gotten this far, it's a data member, possibly static,
3902          or an enumerator.  */
3903
3904       DECL_FIELD_CONTEXT (x) = t;
3905
3906       /* ``A local class cannot have static data members.'' ARM 9.4 */
3907       if (current_function_decl && TREE_STATIC (x))
3908         cp_error_at ("field `%D' in local class cannot be static", x);
3909
3910       /* Perform error checking that did not get done in
3911          grokdeclarator.  */
3912       if (TREE_CODE (type) == FUNCTION_TYPE)
3913         {
3914           cp_error_at ("field `%D' invalidly declared function type",
3915                        x);
3916           type = build_pointer_type (type);
3917           TREE_TYPE (x) = type;
3918         }
3919       else if (TREE_CODE (type) == METHOD_TYPE)
3920         {
3921           cp_error_at ("field `%D' invalidly declared method type", x);
3922           type = build_pointer_type (type);
3923           TREE_TYPE (x) = type;
3924         }
3925       else if (TREE_CODE (type) == OFFSET_TYPE)
3926         {
3927           cp_error_at ("field `%D' invalidly declared offset type", x);
3928           type = build_pointer_type (type);
3929           TREE_TYPE (x) = type;
3930         }
3931
3932       if (type == error_mark_node)
3933         continue;
3934           
3935       DECL_SAVED_INSNS (x) = 0;
3936
3937       /* When this goes into scope, it will be a non-local reference.  */
3938       DECL_NONLOCAL (x) = 1;
3939
3940       if (TREE_CODE (x) == CONST_DECL)
3941         continue;
3942
3943       if (TREE_CODE (x) == VAR_DECL)
3944         {
3945           if (TREE_CODE (t) == UNION_TYPE)
3946             /* Unions cannot have static members.  */
3947             cp_error_at ("field `%D' declared static in union", x);
3948               
3949           continue;
3950         }
3951
3952       /* Now it can only be a FIELD_DECL.  */
3953
3954       if (TREE_PRIVATE (x) || TREE_PROTECTED (x))
3955         CLASSTYPE_NON_AGGREGATE (t) = 1;
3956
3957       /* If this is of reference type, check if it needs an init.
3958          Also do a little ANSI jig if necessary.  */
3959       if (TREE_CODE (type) == REFERENCE_TYPE)
3960         {
3961           CLASSTYPE_NON_POD_P (t) = 1;
3962           if (DECL_INITIAL (x) == NULL_TREE)
3963             CLASSTYPE_REF_FIELDS_NEED_INIT (t) = 1;
3964
3965           /* ARM $12.6.2: [A member initializer list] (or, for an
3966              aggregate, initialization by a brace-enclosed list) is the
3967              only way to initialize nonstatic const and reference
3968              members.  */
3969           *cant_have_default_ctor_p = 1;
3970           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
3971
3972           if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
3973             {
3974               if (DECL_NAME (x))
3975                 cp_warning_at ("non-static reference `%#D' in class without a constructor", x);
3976               else
3977                 cp_warning_at ("non-static reference in class without a constructor", x);
3978             }
3979         }
3980
3981       type = strip_array_types (type);
3982       
3983       if (TREE_CODE (type) == POINTER_TYPE)
3984         has_pointers = 1;
3985
3986       if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
3987         CLASSTYPE_HAS_MUTABLE (t) = 1;
3988
3989       if (! pod_type_p (type)
3990           /* For some reason, pointers to members are POD types themselves,
3991              but are not allowed in POD structs.  Silly.  */
3992           || TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
3993         CLASSTYPE_NON_POD_P (t) = 1;
3994
3995       /* If any field is const, the structure type is pseudo-const.  */
3996       if (CP_TYPE_CONST_P (type))
3997         {
3998           C_TYPE_FIELDS_READONLY (t) = 1;
3999           if (DECL_INITIAL (x) == NULL_TREE)
4000             CLASSTYPE_READONLY_FIELDS_NEED_INIT (t) = 1;
4001
4002           /* ARM $12.6.2: [A member initializer list] (or, for an
4003              aggregate, initialization by a brace-enclosed list) is the
4004              only way to initialize nonstatic const and reference
4005              members.  */
4006           *cant_have_default_ctor_p = 1;
4007           TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 1;
4008
4009           if (! TYPE_HAS_CONSTRUCTOR (t) && extra_warnings)
4010             {
4011               if (DECL_NAME (x))
4012                 cp_warning_at ("non-static const member `%#D' in class without a constructor", x);
4013               else
4014                 cp_warning_at ("non-static const member in class without a constructor", x);
4015             }
4016         }
4017       /* A field that is pseudo-const makes the structure likewise.  */
4018       else if (IS_AGGR_TYPE (type))
4019         {
4020           C_TYPE_FIELDS_READONLY (t) |= C_TYPE_FIELDS_READONLY (type);
4021           CLASSTYPE_READONLY_FIELDS_NEED_INIT (t) 
4022             |= CLASSTYPE_READONLY_FIELDS_NEED_INIT (type);
4023         }
4024
4025       /* We set DECL_C_BIT_FIELD in grokbitfield.
4026          If the type and width are valid, we'll also set DECL_BIT_FIELD.  */
4027       if (DECL_C_BIT_FIELD (x))
4028         check_bitfield_decl (x);
4029       else
4030         check_field_decl (x, t,
4031                           cant_have_const_ctor_p,
4032                           cant_have_default_ctor_p, 
4033                           no_const_asn_ref_p,
4034                           &any_default_members);
4035     }
4036
4037   /* Effective C++ rule 11.  */
4038   if (has_pointers && warn_ecpp && TYPE_HAS_CONSTRUCTOR (t)
4039       && ! (TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
4040     {
4041       cp_warning ("`%#T' has pointer data members", t);
4042       
4043       if (! TYPE_HAS_INIT_REF (t))
4044         {
4045           cp_warning ("  but does not override `%T(const %T&)'", t, t);
4046           if (! TYPE_HAS_ASSIGN_REF (t))
4047             cp_warning ("  or `operator=(const %T&)'", t);
4048         }
4049       else if (! TYPE_HAS_ASSIGN_REF (t))
4050         cp_warning ("  but does not override `operator=(const %T&)'", t);
4051     }
4052
4053
4054   /* Check anonymous struct/anonymous union fields.  */
4055   finish_struct_anon (t);
4056
4057   /* We've built up the list of access declarations in reverse order.
4058      Fix that now.  */
4059   *access_decls = nreverse (*access_decls);
4060 }
4061
4062 /* Return a FIELD_DECL for a pointer-to-virtual-table or
4063    pointer-to-virtual-base.  The NAME, ASSEMBLER_NAME, and TYPE of the
4064    field are as indicated.  The CLASS_TYPE in which this field occurs
4065    is also indicated.  FCONTEXT is the type that is needed for the debug
4066    info output routines.  *EMPTY_P is set to a non-zero value by this
4067    function to indicate that a class containing this field is
4068    non-empty.  */
4069
4070 static tree
4071 build_vtbl_or_vbase_field (name, assembler_name, type, class_type, fcontext,
4072                            empty_p)
4073      tree name;
4074      tree assembler_name;
4075      tree type;
4076      tree class_type;
4077      tree fcontext;
4078      int *empty_p;
4079 {
4080   tree field;
4081
4082   /* This class is non-empty.  */
4083   *empty_p = 0;
4084
4085   /* Build the FIELD_DECL.  */
4086   field = build_lang_decl (FIELD_DECL, name, type);
4087   DECL_ASSEMBLER_NAME (field) = assembler_name;
4088   DECL_VIRTUAL_P (field) = 1;
4089   DECL_ARTIFICIAL (field) = 1;
4090   DECL_FIELD_CONTEXT (field) = class_type;
4091   DECL_FCONTEXT (field) = fcontext;
4092   DECL_SAVED_INSNS (field) = 0;
4093   DECL_ALIGN (field) = TYPE_ALIGN (type);
4094
4095   /* Return it.  */
4096   return field;
4097 }
4098
4099 /* Return the BINFO_OFFSET for BINFO as a native integer, not an
4100    INTEGER_CST.  */
4101
4102 static unsigned HOST_WIDE_INT
4103 get_binfo_offset_as_int (binfo)
4104      tree binfo;
4105 {
4106   tree offset;
4107
4108   offset = BINFO_OFFSET (binfo);
4109   my_friendly_assert (TREE_CODE (offset) == INTEGER_CST, 20000313);
4110   my_friendly_assert (TREE_INT_CST_HIGH (offset) == 0, 20000313);
4111
4112   return (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (offset);
4113 }
4114
4115 /* Record the type of BINFO in the slot in DATA (which is really a
4116    `varray_type *') corresponding to the BINFO_OFFSET.  */
4117
4118 static tree
4119 dfs_record_base_offsets (binfo, data)
4120      tree binfo;
4121      void *data;
4122 {
4123   varray_type *v;
4124   unsigned HOST_WIDE_INT offset = get_binfo_offset_as_int (binfo);
4125
4126   v = (varray_type *) data;
4127   while (VARRAY_SIZE (*v) <= offset)
4128     VARRAY_GROW (*v, 2 * VARRAY_SIZE (*v));
4129   VARRAY_TREE (*v, offset) = tree_cons (NULL_TREE,
4130                                         BINFO_TYPE (binfo),
4131                                         VARRAY_TREE (*v, offset));
4132
4133   return NULL_TREE;
4134 }
4135
4136 /* Returns non-NULL if there is already an entry in DATA (which is
4137    really a `varray_type') indicating that an object with the same
4138    type of BINFO is already at the BINFO_OFFSET for BINFO.  */
4139
4140 static tree
4141 dfs_search_base_offsets (binfo, data)
4142      tree binfo;
4143      void *data;
4144 {
4145   if (is_empty_class (BINFO_TYPE (binfo)))
4146     {
4147       varray_type v = (varray_type) data;
4148       unsigned HOST_WIDE_INT offset;
4149       tree t;
4150
4151       /* Find the offset for this BINFO.  */
4152       offset = get_binfo_offset_as_int (binfo);
4153       /* If we haven't yet encountered any objects at offsets that
4154          big, then there's no conflict.  */
4155       if (VARRAY_SIZE (v) <= offset)
4156         return NULL_TREE;
4157       /* Otherwise, go through the objects already allocated at this
4158          offset.  */
4159       for (t = VARRAY_TREE (v, offset); t; t = TREE_CHAIN (t))
4160         if (same_type_p (TREE_VALUE (t), BINFO_TYPE (binfo)))
4161           return binfo;
4162     }
4163
4164   return NULL_TREE;
4165 }
4166
4167 /* DECL is a FIELD_DECL corresponding either to a base subobject of a
4168    non-static data member of the type indicated by RLI.  BINFO is the
4169    binfo corresponding to the base subobject, or, if this is a
4170    non-static data-member, a dummy BINFO for the type of the data
4171    member.  V maps offsets to types already located at those offsets.
4172    This function determines the position of the DECL.  */
4173
4174 static void
4175 layout_nonempty_base_or_field (rli, decl, binfo, v)
4176      record_layout_info rli;
4177      tree decl;
4178      tree binfo;
4179      varray_type v;
4180 {
4181   /* Try to place the field.  It may take more than one try if we have
4182      a hard time placing the field without putting two objects of the
4183      same type at the same address.  */
4184   while (1)
4185     {
4186       tree offset;
4187
4188       /* Layout this field.  */
4189       layout_field (rli, decl);
4190       
4191       /* Now that we know where it wil be placed, update its
4192          BINFO_OFFSET.  */
4193       offset = size_int (CEIL (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (decl)),
4194                                BITS_PER_UNIT));
4195       propagate_binfo_offsets (binfo, offset);
4196  
4197       /* We have to check to see whether or not there is already
4198          something of the same type at the offset we're about to use.
4199          For example:
4200          
4201          struct S {};
4202          struct T : public S { int i; };
4203          struct U : public S, public T {};
4204          
4205          Here, we put S at offset zero in U.  Then, we can't put T at
4206          offset zero -- its S component would be at the same address
4207          as the S we already allocated.  So, we have to skip ahead.
4208          Since all data members, including those whose type is an
4209          empty class, have non-zero size, any overlap can happen only
4210          with a direct or indirect base-class -- it can't happen with
4211          a data member.  */
4212       if (flag_new_abi && dfs_walk (binfo,
4213                                     dfs_search_base_offsets,
4214                                     dfs_skip_vbases,
4215                                     v))
4216         {
4217           /* Undo the propogate_binfo_offsets call.  */
4218           offset = convert (sizetype,
4219                             size_diffop (size_zero_node, offset));
4220           propagate_binfo_offsets (binfo, offset);
4221
4222           /* Strip off the size allocated to this field.  That puts us
4223              at the first place we could have put the field with
4224              proper alignment.  */
4225           rli->const_size -= TREE_INT_CST_LOW (DECL_SIZE (decl));
4226           /* Bump up by th alignment required for the type, without
4227              virtual base classes.  */
4228           rli->const_size += CLASSTYPE_ALIGN (BINFO_TYPE (binfo));
4229         }
4230       else
4231         /* There was no conflict.  We're done laying out this field.  */
4232         break;
4233     }
4234 }
4235
4236 /* Build a FIELD_DECL for the base given by BINFO in the class
4237    *indicated by RLI.  If the new object is non-empty, clear *EMPTY_P.
4238    *BASE_ALIGN is a running maximum of the alignments of any base
4239    *class.  */
4240
4241 static void
4242 build_base_field (rli, binfo, empty_p, base_align, v)
4243      record_layout_info rli;
4244      tree binfo;
4245      int *empty_p;
4246      unsigned int *base_align;
4247      varray_type *v;
4248 {
4249   tree basetype = BINFO_TYPE (binfo);
4250   tree decl;
4251
4252   if (TYPE_SIZE (basetype) == 0)
4253     /* This error is now reported in xref_tag, thus giving better
4254        location information.  */
4255     return;
4256   
4257   decl = build_lang_decl (FIELD_DECL, NULL_TREE, basetype);
4258   DECL_ARTIFICIAL (decl) = 1;
4259   DECL_FIELD_CONTEXT (decl) = rli->t;
4260   DECL_SIZE (decl) = CLASSTYPE_SIZE (basetype);
4261   DECL_SIZE_UNIT (decl) = CLASSTYPE_SIZE_UNIT (basetype);
4262   DECL_ALIGN (decl) = CLASSTYPE_ALIGN (basetype);
4263   
4264   if (! flag_new_abi)
4265     {
4266       /* Brain damage for backwards compatibility.  For no good
4267          reason, the old layout_basetypes made every base at least
4268          as large as the alignment for the bases up to that point,
4269          gratuitously wasting space.  So we do the same thing
4270          here.  */
4271       *base_align = MAX (*base_align, DECL_ALIGN (decl));
4272       DECL_SIZE (decl)
4273         = size_binop (MAX_EXPR, DECL_SIZE (decl), bitsize_int (*base_align));
4274       DECL_SIZE_UNIT (decl)
4275         = size_binop (MAX_EXPR, DECL_SIZE_UNIT (decl),
4276                       size_int (*base_align / BITS_PER_UNIT));
4277     }
4278
4279   if (!integer_zerop (DECL_SIZE (decl)))
4280     {
4281       /* The containing class is non-empty because it has a non-empty
4282          base class.  */
4283       *empty_p = 0;
4284
4285       /* Try to place the field.  It may take more than one try if we
4286          have a hard time placing the field without putting two
4287          objects of the same type at the same address.  */
4288       layout_nonempty_base_or_field (rli, decl, binfo, *v);
4289     }
4290   else
4291     {
4292       /* This code assumes that zero-sized classes have one-byte
4293          alignment.  There might someday be a system where that's not
4294          true.  */
4295       my_friendly_assert (TYPE_ALIGN (basetype) == BITS_PER_UNIT, 
4296                           20000314);
4297
4298       /* This is an empty base class.  We first try to put it at
4299          offset zero.  */
4300       if (dfs_walk (binfo, dfs_search_base_offsets, dfs_skip_vbases, *v))
4301         {
4302           /* That didn't work.  Now, we move forward from the next
4303              available spot in the class.  */
4304           propagate_binfo_offsets (binfo, size_int (rli->const_size));
4305           while (1) 
4306             {
4307               if (!dfs_walk (binfo, dfs_search_base_offsets, 
4308                              dfs_skip_vbases, *v))
4309                 /* We finally found a spot where there's no overlap.  */
4310                 break;
4311
4312               /* There's overlap here, too.  Bump along to the next
4313                  spot.  */
4314               propagate_binfo_offsets (binfo, size_one_node);
4315             }
4316         }
4317     }
4318
4319   /* Check for inaccessible base classes.  If the same base class
4320      appears more than once in the hierarchy, but isn't virtual, then
4321      it's ambiguous.  */
4322   if (get_base_distance (basetype, rli->t, 0, NULL) == -2)
4323     cp_warning ("direct base `%T' inaccessible in `%T' due to ambiguity",
4324                 basetype, rli->t);
4325   
4326   /* Record the offsets of BINFO and its base subobjects.  */
4327   dfs_walk (binfo,
4328             dfs_record_base_offsets,
4329             dfs_skip_vbases,
4330             v);
4331 }
4332
4333 /* Layout all of the non-virtual base classes.  Returns a map from
4334    offsets to types present at those offsets.  */
4335
4336 static varray_type
4337 build_base_fields (rli, empty_p)
4338      record_layout_info rli;
4339      int *empty_p;
4340 {
4341   /* Chain to hold all the new FIELD_DECLs which stand in for base class
4342      subobjects.  */
4343   tree rec = rli->t;
4344   int n_baseclasses = CLASSTYPE_N_BASECLASSES (rec);
4345   int i;
4346   varray_type v;
4347   unsigned int base_align = 0;
4348
4349   /* Create the table mapping offsets to empty base classes.  */
4350   VARRAY_TREE_INIT (v, 32, "v");
4351
4352   /* Under the new ABI, the primary base class is always allocated
4353      first.  */
4354   if (flag_new_abi && CLASSTYPE_HAS_PRIMARY_BASE_P (rec))
4355     build_base_field (rli, CLASSTYPE_PRIMARY_BINFO (rec), 
4356                       empty_p, &base_align, &v);
4357
4358   /* Now allocate the rest of the bases.  */
4359   for (i = 0; i < n_baseclasses; ++i)
4360     {
4361       tree base_binfo;
4362
4363       /* Under the new ABI, the primary base was already allocated
4364          above, so we don't need to allocate it again here.  */
4365       if (flag_new_abi && i == CLASSTYPE_VFIELD_PARENT (rec))
4366         continue;
4367
4368       base_binfo = BINFO_BASETYPE (TYPE_BINFO (rec), i);
4369
4370       /* A primary virtual base class is allocated just like any other
4371          base class, but a non-primary virtual base is allocated
4372          later, in layout_basetypes.  */
4373       if (TREE_VIA_VIRTUAL (base_binfo) 
4374           && !BINFO_PRIMARY_MARKED_P (base_binfo))
4375         continue;
4376
4377       build_base_field (rli, base_binfo, empty_p, &base_align, &v);
4378     }
4379
4380   return v;
4381 }
4382
4383 /* Go through the TYPE_METHODS of T issuing any appropriate
4384    diagnostics, figuring out which methods override which other
4385    methods, and so forth.  */
4386
4387 static void
4388 check_methods (t)
4389      tree t;
4390 {
4391   tree x;
4392   int seen_one_arg_array_delete_p = 0;
4393
4394   for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
4395     {
4396       GNU_xref_member (current_class_name, x);
4397
4398       /* If this was an evil function, don't keep it in class.  */
4399       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (x)))
4400         continue;
4401
4402       DECL_SAVED_INSNS (x) = 0;
4403       check_for_override (x, t);
4404       if (DECL_PURE_VIRTUAL_P (x) && ! DECL_VINDEX (x))
4405         cp_error_at ("initializer specified for non-virtual method `%D'", x);
4406
4407       /* The name of the field is the original field name
4408          Save this in auxiliary field for later overloading.  */
4409       if (DECL_VINDEX (x))
4410         {
4411           TYPE_POLYMORPHIC_P (t) = 1;
4412           if (DECL_PURE_VIRTUAL_P (x))
4413             CLASSTYPE_PURE_VIRTUALS (t)
4414               = tree_cons (NULL_TREE, x, CLASSTYPE_PURE_VIRTUALS (t));
4415         }
4416
4417       if (DECL_ARRAY_DELETE_OPERATOR_P (x))
4418         {
4419           tree second_parm;
4420
4421           /* When dynamically allocating an array of this type, we
4422              need a "cookie" to record how many elements we allocated,
4423              even if the array elements have no non-trivial
4424              destructor, if the usual array deallocation function
4425              takes a second argument of type size_t.  The standard (in
4426              [class.free]) requires that the second argument be set
4427              correctly.  */
4428           second_parm = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (x)));
4429           /* This is overly conservative, but we must maintain this
4430              behavior for backwards compatibility.  */
4431           if (!flag_new_abi && second_parm != void_list_node)
4432             TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4433           /* Under the new ABI, we choose only those function that are
4434              explicitly declared as `operator delete[] (void *,
4435              size_t)'.  */
4436           else if (flag_new_abi 
4437                    && !seen_one_arg_array_delete_p
4438                    && second_parm
4439                    && TREE_CHAIN (second_parm) == void_list_node
4440                    && same_type_p (TREE_VALUE (second_parm), sizetype))
4441             TYPE_VEC_DELETE_TAKES_SIZE (t) = 1;
4442           /* If there's no second parameter, then this is the usual
4443              deallocation function.  */
4444           else if (second_parm == void_list_node)
4445             seen_one_arg_array_delete_p = 1;
4446         }
4447     }
4448 }
4449
4450 /* Remove all zero-width bit-fields from T.  */
4451
4452 static void
4453 remove_zero_width_bit_fields (t)
4454      tree t;
4455 {
4456   tree *fieldsp;
4457
4458   fieldsp = &TYPE_FIELDS (t); 
4459   while (*fieldsp)
4460     {
4461       if (TREE_CODE (*fieldsp) == FIELD_DECL
4462           && DECL_C_BIT_FIELD (*fieldsp) 
4463           && DECL_INITIAL (*fieldsp))
4464         *fieldsp = TREE_CHAIN (*fieldsp);
4465       else
4466         fieldsp = &TREE_CHAIN (*fieldsp);
4467     }
4468 }
4469
4470 /* Check the validity of the bases and members declared in T.  Add any
4471    implicitly-generated functions (like copy-constructors and
4472    assignment operators).  Compute various flag bits (like
4473    CLASSTYPE_NON_POD_T) for T.  This routine works purely at the C++
4474    level: i.e., independently of the ABI in use.  */
4475
4476 static void
4477 check_bases_and_members (t, empty_p)
4478      tree t;
4479      int *empty_p;
4480 {
4481   /* Nonzero if we are not allowed to generate a default constructor
4482      for this case.  */
4483   int cant_have_default_ctor;
4484   /* Nonzero if the implicitly generated copy constructor should take
4485      a non-const reference argument.  */
4486   int cant_have_const_ctor;
4487   /* Nonzero if the the implicitly generated assignment operator
4488      should take a non-const reference argument.  */
4489   int no_const_asn_ref;
4490   tree access_decls;
4491
4492   /* By default, we use const reference arguments and generate default
4493      constructors.  */
4494   cant_have_default_ctor = 0;
4495   cant_have_const_ctor = 0;
4496   no_const_asn_ref = 0;
4497
4498   /* Assume that the class is nearly empty; we'll clear this flag if
4499      it turns out not to be nearly empty.  */
4500   CLASSTYPE_NEARLY_EMPTY_P (t) = 1;
4501
4502   /* Check all the base-classes. */
4503   check_bases (t, &cant_have_default_ctor, &cant_have_const_ctor,
4504                &no_const_asn_ref);
4505
4506   /* Check all the data member declarations.  */
4507   check_field_decls (t, &access_decls, empty_p,
4508                      &cant_have_default_ctor,
4509                      &cant_have_const_ctor,
4510                      &no_const_asn_ref);
4511
4512   /* Check all the method declarations.  */
4513   check_methods (t);
4514
4515   /* A nearly-empty class has to be vptr-containing; a nearly empty
4516      class contains just a vptr.  */
4517   if (!TYPE_CONTAINS_VPTR_P (t))
4518     CLASSTYPE_NEARLY_EMPTY_P (t) = 0;
4519
4520   /* Do some bookkeeping that will guide the generation of implicitly
4521      declared member functions.  */
4522   TYPE_HAS_COMPLEX_INIT_REF (t)
4523     |= (TYPE_HAS_INIT_REF (t) 
4524         || TYPE_USES_VIRTUAL_BASECLASSES (t)
4525         || TYPE_POLYMORPHIC_P (t));
4526   TYPE_NEEDS_CONSTRUCTING (t)
4527     |= (TYPE_HAS_CONSTRUCTOR (t) 
4528         || TYPE_USES_VIRTUAL_BASECLASSES (t)
4529         || TYPE_POLYMORPHIC_P (t));
4530   CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
4531                                   || TYPE_POLYMORPHIC_P (t));
4532   CLASSTYPE_NON_POD_P (t)
4533     |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t) 
4534         || TYPE_HAS_ASSIGN_REF (t));
4535   TYPE_HAS_REAL_ASSIGN_REF (t) |= TYPE_HAS_ASSIGN_REF (t);
4536   TYPE_HAS_COMPLEX_ASSIGN_REF (t)
4537     |= TYPE_HAS_ASSIGN_REF (t) || TYPE_USES_VIRTUAL_BASECLASSES (t);
4538
4539   /* Synthesize any needed methods.  Note that methods will be synthesized
4540      for anonymous unions; grok_x_components undoes that.  */
4541   add_implicitly_declared_members (t, cant_have_default_ctor,
4542                                    cant_have_const_ctor,
4543                                    no_const_asn_ref);
4544
4545   /* Process the using-declarations.  */
4546   for (; access_decls; access_decls = TREE_CHAIN (access_decls))
4547     handle_using_decl (TREE_VALUE (access_decls), t);
4548
4549   /* Build and sort the CLASSTYPE_METHOD_VEC.  */
4550   finish_struct_methods (t);
4551 }
4552
4553 /* If T needs a pointer to its virtual function table, set TYPE_VFIELD
4554    accordingly.  If a new vfield was created (because T doesn't have a
4555    primary base class), then the newly created field is returned.  It
4556    is not added to the TYPE_FIELDS list; it is the callers
4557    responsibility to do that.  */
4558
4559 static tree
4560 create_vtable_ptr (t, empty_p, has_virtual_p, 
4561                    new_virtuals_p, overridden_virtuals_p)
4562      tree t;
4563      int *empty_p;
4564      int *has_virtual_p;
4565      tree *new_virtuals_p;
4566      tree *overridden_virtuals_p;
4567 {
4568   tree fn;
4569
4570   /* Loop over the virtual functions, adding them to our various
4571      vtables.  */
4572   for (fn = TYPE_METHODS (t); fn; fn = TREE_CHAIN (fn))
4573     if (DECL_VINDEX (fn))
4574       add_virtual_function (new_virtuals_p, overridden_virtuals_p,
4575                             has_virtual_p, fn, t);
4576
4577   /* Even if there weren't any new virtual functions, we might need a
4578      new virtual function table if we're supposed to include vptrs in
4579      all classes that need them.  */
4580   if (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ())
4581     start_vtable (t, has_virtual_p);
4582     
4583   /* If we couldn't find an appropriate base class, create a new field
4584      here.  */
4585   if (*has_virtual_p && !TYPE_VFIELD (t))
4586     {
4587       /* We build this decl with vtbl_ptr_type_node, which is a
4588          `vtable_entry_type*'.  It might seem more precise to use
4589          `vtable_entry_type (*)[N]' where N is the number of firtual
4590          functions.  However, that would require the vtable pointer in
4591          base classes to have a different type than the vtable pointer
4592          in derived classes.  We could make that happen, but that
4593          still wouldn't solve all the problems.  In particular, the
4594          type-based alias analysis code would decide that assignments
4595          to the base class vtable pointer can't alias assignments to
4596          the derived class vtable pointer, since they have different
4597          types.  Thus, in an derived class destructor, where the base
4598          class constructor was inlined, we could generate bad code for
4599          setting up the vtable pointer.  
4600
4601          Therefore, we use one type for all vtable pointers.  We still
4602          use a type-correct type; it's just doesn't indicate the array
4603          bounds.  That's better than using `void*' or some such; it's
4604          cleaner, and it let's the alias analysis code know that these
4605          stores cannot alias stores to void*!  */
4606       TYPE_VFIELD (t) 
4607         = build_vtbl_or_vbase_field (get_vfield_name (t),
4608                                      get_identifier (VFIELD_BASE),
4609                                      vtbl_ptr_type_node,
4610                                      t,
4611                                      t,
4612                                      empty_p);
4613
4614       if (flag_new_abi && CLASSTYPE_N_BASECLASSES (t))
4615         /* If there were any baseclasses, they can't possibly be at
4616            offset zero any more, because that's where the vtable
4617            pointer is.  So, converting to a base class is going to
4618            take work.  */
4619         TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (t) = 1;
4620
4621       return TYPE_VFIELD (t);
4622     }
4623
4624   return NULL_TREE;
4625 }
4626
4627 /* Fixup the inline function given by INFO now that the class is
4628    complete.  */
4629
4630 static void
4631 fixup_pending_inline (info)
4632      struct pending_inline *info;
4633 {
4634   if (info)
4635     {
4636       tree args;
4637       tree fn = info->fndecl;
4638
4639       args = DECL_ARGUMENTS (fn);
4640       while (args)
4641         {
4642           DECL_CONTEXT (args) = fn;
4643           args = TREE_CHAIN (args);
4644         }
4645     }
4646 }
4647
4648 /* Fixup the inline methods and friends in TYPE now that TYPE is
4649    complete.  */
4650
4651 static void
4652 fixup_inline_methods (type)
4653      tree type;
4654 {
4655   tree method = TYPE_METHODS (type);
4656
4657   if (method && TREE_CODE (method) == TREE_VEC)
4658     {
4659       if (TREE_VEC_ELT (method, 1))
4660         method = TREE_VEC_ELT (method, 1);
4661       else if (TREE_VEC_ELT (method, 0))
4662         method = TREE_VEC_ELT (method, 0);
4663       else
4664         method = TREE_VEC_ELT (method, 2);
4665     }
4666
4667   /* Do inline member functions.  */
4668   for (; method; method = TREE_CHAIN (method))
4669     fixup_pending_inline (DECL_PENDING_INLINE_INFO (method));
4670
4671   /* Do friends.  */
4672   for (method = CLASSTYPE_INLINE_FRIENDS (type); 
4673        method; 
4674        method = TREE_CHAIN (method))
4675     fixup_pending_inline (DECL_PENDING_INLINE_INFO (TREE_VALUE (method)));
4676   CLASSTYPE_INLINE_FRIENDS (type) = NULL_TREE;
4677 }
4678
4679 /* Called from propagate_binfo_offsets via dfs_walk.  */
4680
4681 static tree
4682 dfs_propagate_binfo_offsets (binfo, data)
4683      tree binfo; 
4684      void *data;
4685 {
4686   tree offset = (tree) data;
4687
4688   /* Update the BINFO_OFFSET for this base.  */
4689   BINFO_OFFSET (binfo) = size_binop (PLUS_EXPR, BINFO_OFFSET (binfo), offset);
4690
4691   SET_BINFO_MARKED (binfo);
4692
4693   return NULL_TREE;
4694 }
4695
4696 /* Add OFFSET to all base types of BINFO which is a base in the
4697    hierarchy dominated by T.
4698
4699    OFFSET, which is a type offset, is number of bytes.
4700
4701    Note that we don't have to worry about having two paths to the
4702    same base type, since this type owns its association list.  */
4703
4704 static void
4705 propagate_binfo_offsets (binfo, offset)
4706      tree binfo;
4707      tree offset;
4708 {
4709   dfs_walk (binfo, 
4710             dfs_propagate_binfo_offsets, 
4711             dfs_skip_nonprimary_vbases_unmarkedp,
4712             offset);
4713   dfs_walk (binfo,
4714             dfs_unmark,
4715             dfs_skip_nonprimary_vbases_markedp,
4716             NULL);
4717 }
4718
4719 /* Called via dfs_walk from layout_virtual bases.  */
4720
4721 static tree
4722 dfs_set_offset_for_shared_vbases (binfo, data)
4723      tree binfo;
4724      void *data;
4725 {
4726   if (TREE_VIA_VIRTUAL (binfo) && BINFO_PRIMARY_MARKED_P (binfo))
4727     {
4728       /* Update the shared copy.  */
4729       tree shared_binfo;
4730
4731       shared_binfo = BINFO_FOR_VBASE (BINFO_TYPE (binfo), (tree) data);
4732       BINFO_OFFSET (shared_binfo) = BINFO_OFFSET (binfo);
4733     }
4734
4735   return NULL_TREE;
4736 }
4737
4738 /* Called via dfs_walk from layout_virtual bases.  */
4739
4740 static tree
4741 dfs_set_offset_for_unshared_vbases (binfo, data)
4742      tree binfo;
4743      void *data;
4744 {
4745   /* If this is a virtual base, make sure it has the same offset as
4746      the shared copy.  If it's a primary base, then we know it's
4747      correct.  */
4748   if (TREE_VIA_VIRTUAL (binfo) && !BINFO_PRIMARY_MARKED_P (binfo))
4749     {
4750       tree t = (tree) data;
4751       tree vbase;
4752       tree offset;
4753       
4754       vbase = BINFO_FOR_VBASE (BINFO_TYPE (binfo), t);
4755       offset = size_binop (MINUS_EXPR, 
4756                            BINFO_OFFSET (vbase), BINFO_OFFSET (binfo));
4757       propagate_binfo_offsets (binfo, offset);
4758     }
4759
4760   return NULL_TREE;
4761 }
4762
4763 /* Set BINFO_OFFSET for all of the virtual bases for T.  Update
4764    TYPE_ALIGN and TYPE_SIZE for T.  */
4765
4766 static void
4767 layout_virtual_bases (t)
4768      tree t;
4769 {
4770   tree vbase;
4771   unsigned HOST_WIDE_INT dsize;
4772
4773   /* DSIZE is the size of the class without the virtual bases.  */
4774   dsize = tree_low_cst (TYPE_SIZE (t), 1);
4775
4776   /* Make every class have alignment of at least one.  */
4777   TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), BITS_PER_UNIT);
4778
4779   /* Go through the virtual bases, allocating space for each virtual
4780      base that is not already a primary base class.  */
4781   for (vbase = CLASSTYPE_VBASECLASSES (t); 
4782        vbase; 
4783        vbase = TREE_CHAIN (vbase))
4784     if (!BINFO_VBASE_PRIMARY_P (vbase))
4785       {
4786         /* This virtual base is not a primary base of any class in the
4787            hierarchy, so we have to add space for it.  */
4788         tree basetype;
4789         unsigned int desired_align;
4790
4791         basetype = BINFO_TYPE (vbase);
4792         desired_align = TYPE_ALIGN (basetype);
4793         TYPE_ALIGN (t) = MAX (TYPE_ALIGN (t), desired_align);
4794
4795         /* Add padding so that we can put the virtual base class at an
4796            appropriately aligned offset.  */
4797         dsize = CEIL (dsize, desired_align) * desired_align;
4798         /* And compute the offset of the virtual base.  */
4799         propagate_binfo_offsets (vbase, 
4800                                  size_int (CEIL (dsize, BITS_PER_UNIT)));
4801         /* Every virtual baseclass takes a least a UNIT, so that we can
4802            take it's address and get something different for each base.  */
4803         dsize += MAX (BITS_PER_UNIT,
4804                       tree_low_cst (CLASSTYPE_SIZE (basetype), 0));
4805       }
4806
4807   /* Make sure that all of the CLASSTYPE_VBASECLASSES have their
4808      BINFO_OFFSET set correctly.  Those we just allocated certainly
4809      will.  The others are primary baseclasses; we walk the hierarchy
4810      to find the primary copies and update the shared copy.  */
4811   dfs_walk (TYPE_BINFO (t), 
4812             dfs_set_offset_for_shared_vbases, 
4813             dfs_unmarked_real_bases_queue_p,
4814             t);
4815
4816   /* Now, go through the TYPE_BINFO hierarchy again, setting the
4817      BINFO_OFFSETs correctly for all non-primary copies of the virtual
4818      bases and their direct and indirect bases.  The ambiguity checks
4819      in get_base_distance depend on the BINFO_OFFSETs being set
4820      correctly.  */
4821   dfs_walk (TYPE_BINFO (t), dfs_set_offset_for_unshared_vbases, NULL, t);
4822   for (vbase = CLASSTYPE_VBASECLASSES (t);
4823        vbase;
4824        vbase = TREE_CHAIN (vbase))
4825     dfs_walk (vbase, dfs_set_offset_for_unshared_vbases, NULL, t);
4826
4827   /* Now, make sure that the total size of the type is a multiple of
4828      its alignment.  */
4829   dsize = CEIL (dsize, TYPE_ALIGN (t)) * TYPE_ALIGN (t);
4830   TYPE_SIZE (t) = bitsize_int (dsize);
4831   TYPE_SIZE_UNIT (t) = convert (sizetype,
4832                                 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (t),
4833                                             bitsize_int (BITS_PER_UNIT)));
4834 }
4835
4836 /* Finish the work of layout_record, now taking virtual bases into account.
4837    Also compute the actual offsets that our base classes will have.
4838    This must be performed after the fields are laid out, since virtual
4839    baseclasses must lay down at the end of the record.  */
4840
4841 static void
4842 layout_basetypes (rec)
4843      tree rec;
4844 {
4845   tree vbase_types;
4846
4847   if (CLASSTYPE_N_BASECLASSES (rec) == 0)
4848     return;
4849
4850 #ifdef STRUCTURE_SIZE_BOUNDARY
4851   /* Packed structures don't need to have minimum size.  */
4852   if (! TYPE_PACKED (rec))
4853     TYPE_ALIGN (rec) = MAX (TYPE_ALIGN (rec), STRUCTURE_SIZE_BOUNDARY);
4854 #endif
4855
4856   /* Allocate the virtual base classes.  */
4857   layout_virtual_bases (rec);
4858
4859   /* Get all the virtual base types that this type uses.  The
4860      TREE_VALUE slot holds the virtual baseclass type.  Note that
4861      get_vbase_types makes copies of the virtual base BINFOs, so that
4862      the vbase_types are unshared.  */
4863   for (vbase_types = CLASSTYPE_VBASECLASSES (rec); vbase_types;
4864        vbase_types = TREE_CHAIN (vbase_types))
4865     if (extra_warnings)
4866       {
4867         tree basetype = BINFO_TYPE (vbase_types);
4868         if (get_base_distance (basetype, rec, 0, (tree*)0) == -2)
4869           cp_warning ("virtual base `%T' inaccessible in `%T' due to ambiguity",
4870                       basetype, rec);
4871       }
4872 }
4873
4874 /* Calculate the TYPE_SIZE, TYPE_ALIGN, etc for T.  Calculate
4875    BINFO_OFFSETs for all of the base-classes.  Position the vtable
4876    pointer.  */
4877
4878 static void
4879 layout_class_type (t, empty_p, has_virtual_p, 
4880                    new_virtuals_p, overridden_virtuals_p)
4881      tree t;
4882      int *empty_p;
4883      int *has_virtual_p;
4884      tree *new_virtuals_p;
4885      tree *overridden_virtuals_p;
4886 {
4887   tree non_static_data_members;
4888   tree field;
4889   tree vptr;
4890   record_layout_info rli;
4891   varray_type v;
4892   int i;
4893
4894   /* Keep track of the first non-static data member.  */
4895   non_static_data_members = TYPE_FIELDS (t);
4896
4897   /* Initialize the layout information.  */
4898   rli = new_record_layout_info (t);
4899
4900   /* If possible, we reuse the virtual function table pointer from one
4901      of our base classes.  */
4902   determine_primary_base (t, has_virtual_p);
4903
4904   /* Create a pointer to our virtual function table.  */
4905   vptr = create_vtable_ptr (t, empty_p, has_virtual_p,
4906                             new_virtuals_p, overridden_virtuals_p);
4907
4908   /* Under the new ABI, the vptr is always the first thing in the
4909      class.  */
4910   if (flag_new_abi && vptr)
4911     {
4912       TYPE_FIELDS (t) = chainon (vptr, TYPE_FIELDS (t));
4913       layout_field (rli, vptr);
4914     }
4915
4916   /* Add pointers to all of our virtual base-classes.  */
4917   TYPE_FIELDS (t) = chainon (build_vbase_pointer_fields (rli, empty_p),
4918                              TYPE_FIELDS (t));
4919   /* Build FIELD_DECLs for all of the non-virtual base-types.  */
4920   v = build_base_fields (rli, empty_p);
4921
4922   /* CLASSTYPE_INLINE_FRIENDS is really TYPE_NONCOPIED_PARTS.  Thus,
4923      we have to save this before we start modifying
4924      TYPE_NONCOPIED_PARTS.  */
4925   fixup_inline_methods (t);
4926
4927   /* Layout the non-static data members.  */
4928   for (field = non_static_data_members; 
4929        field; 
4930        field = TREE_CHAIN (field))
4931     {
4932       tree binfo;
4933
4934       /* We still pass things that aren't non-static data members to
4935          the back-end, in case it wants to do something with them.  */
4936       if (TREE_CODE (field) != FIELD_DECL)
4937         {
4938           layout_field (rli, field);
4939           continue;
4940         }
4941
4942       /* Create a dummy BINFO corresponding to this field.  */
4943       binfo = make_binfo (size_zero_node, TREE_TYPE (field),
4944                           NULL_TREE, NULL_TREE);
4945       unshare_base_binfos (binfo);
4946       layout_nonempty_base_or_field (rli, field, binfo, v);
4947     }
4948
4949   /* Clean up.  */
4950   VARRAY_FREE (v);
4951   
4952   /* It might be the case that we grew the class to allocate a
4953      zero-sized base class.  That won't be reflected in RLI, yet,
4954      because we are willing to overlay multiple bases at the same
4955      offset.  However, now we need to make sure that RLI is big enough
4956      to reflect the entire class.  */
4957   for (i = 0; i < CLASSTYPE_N_BASECLASSES (t); ++i)
4958     {
4959       tree base_binfo;
4960       unsigned HOST_WIDE_INT offset;
4961
4962       base_binfo = BINFO_BASETYPE (TYPE_BINFO (t), i);
4963       offset = get_binfo_offset_as_int (base_binfo);
4964       if (offset * BITS_PER_UNIT > rli->const_size)
4965         rli->const_size = (offset + 1) * BITS_PER_UNIT;
4966     }
4967
4968   /* We make all structures have at least one element, so that they
4969      have non-zero size.  In the new ABI, the class may be empty even
4970      if it has basetypes.  Therefore, we add the fake field after all
4971      the other fields; if there are already FIELD_DECLs on the list,
4972      their offsets will not be disturbed.  */
4973   if (*empty_p)
4974     {
4975       tree padding;
4976
4977       padding = build_lang_decl (FIELD_DECL, NULL_TREE, char_type_node);
4978       layout_field (rli, padding);
4979       TYPE_NONCOPIED_PARTS (t) 
4980         = tree_cons (NULL_TREE, padding, TYPE_NONCOPIED_PARTS (t));
4981       TREE_STATIC (TYPE_NONCOPIED_PARTS (t)) = 1;
4982     }
4983
4984   /* Under the old ABI, the vptr comes at the very end of the 
4985      class.   */
4986   if (!flag_new_abi && vptr)
4987     {
4988       layout_field (rli, vptr);
4989       TYPE_FIELDS (t) = chainon (TYPE_FIELDS (t), vptr);
4990     }
4991   
4992   /* Let the back-end lay out the type. Note that at this point we
4993      have only included non-virtual base-classes; we will lay out the
4994      virtual base classes later.  So, the TYPE_SIZE/TYPE_ALIGN after
4995      this call are not necessarily correct; they are just the size and
4996      alignment when no virtual base clases are used.  */
4997   finish_record_layout (rli);
4998
4999   /* Delete all zero-width bit-fields from the list of fields.  Now
5000      that the type is laid out they are no longer important.  */
5001   remove_zero_width_bit_fields (t);
5002
5003   /* Remember the size and alignment of the class before adding
5004      the virtual bases.  */
5005   if (*empty_p && flag_new_abi)
5006     {
5007       CLASSTYPE_SIZE (t) = bitsize_int (0);
5008       CLASSTYPE_SIZE_UNIT (t) = size_zero_node;
5009     }
5010   else if (flag_new_abi && TYPE_HAS_COMPLEX_INIT_REF (t)
5011            && TYPE_HAS_COMPLEX_ASSIGN_REF (t))
5012     {
5013       CLASSTYPE_SIZE (t) = TYPE_BINFO_SIZE (t);
5014       CLASSTYPE_SIZE_UNIT (t) = TYPE_BINFO_SIZE_UNIT (t);
5015     }
5016   else
5017     {
5018       CLASSTYPE_SIZE (t) = TYPE_SIZE (t);
5019       CLASSTYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (t);
5020     }
5021
5022   CLASSTYPE_ALIGN (t) = TYPE_ALIGN (t);
5023
5024   /* Set the TYPE_DECL for this type to contain the right
5025      value for DECL_OFFSET, so that we can use it as part
5026      of a COMPONENT_REF for multiple inheritance.  */
5027   layout_decl (TYPE_MAIN_DECL (t), 0);
5028
5029   /* Now fix up any virtual base class types that we left lying
5030      around.  We must get these done before we try to lay out the
5031      virtual function table.  As a side-effect, this will remove the
5032      base subobject fields.  */
5033   layout_basetypes (t);
5034 }
5035      
5036 /* Create a RECORD_TYPE or UNION_TYPE node for a C struct or union declaration
5037    (or C++ class declaration).
5038
5039    For C++, we must handle the building of derived classes.
5040    Also, C++ allows static class members.  The way that this is
5041    handled is to keep the field name where it is (as the DECL_NAME
5042    of the field), and place the overloaded decl in the bit position
5043    of the field.  layout_record and layout_union will know about this.
5044
5045    More C++ hair: inline functions have text in their
5046    DECL_PENDING_INLINE_INFO nodes which must somehow be parsed into
5047    meaningful tree structure.  After the struct has been laid out, set
5048    things up so that this can happen.
5049
5050    And still more: virtual functions.  In the case of single inheritance,
5051    when a new virtual function is seen which redefines a virtual function
5052    from the base class, the new virtual function is placed into
5053    the virtual function table at exactly the same address that
5054    it had in the base class.  When this is extended to multiple
5055    inheritance, the same thing happens, except that multiple virtual
5056    function tables must be maintained.  The first virtual function
5057    table is treated in exactly the same way as in the case of single
5058    inheritance.  Additional virtual function tables have different
5059    DELTAs, which tell how to adjust `this' to point to the right thing.
5060
5061    ATTRIBUTES is the set of decl attributes to be applied, if any.  */
5062
5063 void
5064 finish_struct_1 (t)
5065      tree t;
5066 {
5067   tree x;
5068   int has_virtual;
5069   /* The NEW_VIRTUALS is a TREE_LIST.  The TREE_VALUE of each node is
5070      a FUNCTION_DECL.  Each of these functions is a virtual function
5071      declared in T that does not override any virtual function from a
5072      base class.  */
5073   tree new_virtuals = NULL_TREE;
5074   /* The OVERRIDDEN_VIRTUALS list is like the NEW_VIRTUALS list,
5075      except that each declaration here overrides the declaration from
5076      a base class.  */
5077   tree overridden_virtuals = NULL_TREE;
5078   int n_fields = 0;
5079   tree vfield;
5080   int empty = 1;
5081
5082   if (TYPE_SIZE (t))
5083     {
5084       if (IS_AGGR_TYPE (t))
5085         cp_error ("redefinition of `%#T'", t);
5086       else
5087         my_friendly_abort (172);
5088       popclass ();
5089       return;
5090     }
5091
5092   GNU_xref_decl (current_function_decl, t);
5093
5094   /* If this type was previously laid out as a forward reference,
5095      make sure we lay it out again.  */
5096   TYPE_SIZE (t) = NULL_TREE;
5097   CLASSTYPE_GOT_SEMICOLON (t) = 0;
5098   CLASSTYPE_VFIELD_PARENT (t) = -1;
5099   has_virtual = 0;
5100   CLASSTYPE_RTTI (t) = NULL_TREE;
5101
5102   /* Do end-of-class semantic processing: checking the validity of the
5103      bases and members and add implicitly generated methods.  */
5104   check_bases_and_members (t, &empty);
5105
5106   /* Layout the class itself.  */
5107   layout_class_type (t, &empty, &has_virtual,
5108                      &new_virtuals, &overridden_virtuals);
5109
5110   /* Set up the DECL_FIELD_BITPOS of the vfield if we need to, as we
5111      might need to know it for setting up the offsets in the vtable
5112      (or in thunks) below.  */
5113   vfield = TYPE_VFIELD (t);
5114   if (vfield != NULL_TREE
5115       && DECL_FIELD_CONTEXT (vfield) != t)
5116     {
5117       tree binfo = get_binfo (DECL_FIELD_CONTEXT (vfield), t, 0);
5118       tree offset = convert (bitsizetype, BINFO_OFFSET (binfo));
5119
5120       vfield = copy_node (vfield);
5121       copy_lang_decl (vfield);
5122
5123       if (! integer_zerop (offset))
5124         offset = size_binop (MULT_EXPR, offset, bitsize_int (BITS_PER_UNIT));
5125
5126       DECL_FIELD_CONTEXT (vfield) = t;
5127       DECL_FIELD_BITPOS (vfield)
5128         = size_binop (PLUS_EXPR, offset, bit_position (vfield));
5129       TYPE_VFIELD (t) = vfield;
5130     }
5131
5132   overridden_virtuals 
5133     = modify_all_vtables (t, &has_virtual, nreverse (overridden_virtuals));
5134
5135   /* If necessary, create the primary vtable for this class.  */
5136   if (new_virtuals
5137       || overridden_virtuals
5138       || (TYPE_CONTAINS_VPTR_P (t) && vptrs_present_everywhere_p ()))
5139     {
5140       new_virtuals = nreverse (new_virtuals);
5141       /* We must enter these virtuals into the table.  */
5142       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5143         {
5144           if (! CLASSTYPE_COM_INTERFACE (t))
5145             {
5146               /* The second slot is for the tdesc pointer when thunks
5147                  are used.  */
5148               if (flag_vtable_thunks)
5149                 new_virtuals = tree_cons (NULL_TREE, NULL_TREE, new_virtuals);
5150
5151               /* The first slot is for the rtti offset.  */
5152               new_virtuals = tree_cons (NULL_TREE, NULL_TREE, new_virtuals);
5153
5154               set_rtti_entry (new_virtuals,
5155                               convert (ssizetype, integer_zero_node), t);
5156             }
5157           build_primary_vtable (NULL_TREE, t);
5158         }
5159       else if (! BINFO_NEW_VTABLE_MARKED (TYPE_BINFO (t)))
5160         /* Here we know enough to change the type of our virtual
5161            function table, but we will wait until later this function.  */
5162         build_primary_vtable (CLASSTYPE_PRIMARY_BINFO (t), t);
5163
5164       /* If this type has basetypes with constructors, then those
5165          constructors might clobber the virtual function table.  But
5166          they don't if the derived class shares the exact vtable of the base
5167          class.  */
5168
5169       CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5170     }
5171   /* If we didn't need a new vtable, see if we should copy one from
5172      the base.  */
5173   else if (CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5174     {
5175       tree binfo = CLASSTYPE_PRIMARY_BINFO (t);
5176
5177       /* This class contributes nothing new to the virtual function
5178          table.  However, it may have declared functions which
5179          went into the virtual function table "inherited" from the
5180          base class.  If so, we grab a copy of those updated functions,
5181          and pretend they are ours.  */
5182
5183       /* See if we should steal the virtual info from base class.  */
5184       if (TYPE_BINFO_VTABLE (t) == NULL_TREE)
5185         TYPE_BINFO_VTABLE (t) = BINFO_VTABLE (binfo);
5186       if (TYPE_BINFO_VIRTUALS (t) == NULL_TREE)
5187         TYPE_BINFO_VIRTUALS (t) = BINFO_VIRTUALS (binfo);
5188       if (TYPE_BINFO_VTABLE (t) != BINFO_VTABLE (binfo))
5189         CLASSTYPE_NEEDS_VIRTUAL_REINIT (t) = 1;
5190     }
5191
5192   if (TYPE_CONTAINS_VPTR_P (t))
5193     {
5194       if (TYPE_BINFO_VTABLE (t))
5195         my_friendly_assert (DECL_VIRTUAL_P (TYPE_BINFO_VTABLE (t)),
5196                             20000116);
5197       if (!CLASSTYPE_HAS_PRIMARY_BASE_P (t))
5198         my_friendly_assert (TYPE_BINFO_VIRTUALS (t) == NULL_TREE,
5199                             20000116);
5200
5201       CLASSTYPE_VSIZE (t) = has_virtual;
5202       /* Entries for virtual functions defined in the primary base are
5203          followed by entries for new functions unique to this class.  */
5204       TYPE_BINFO_VIRTUALS (t) 
5205         = chainon (TYPE_BINFO_VIRTUALS (t), new_virtuals);
5206       /* Finally, add entries for functions that override virtuals
5207          from non-primary bases.  */
5208       TYPE_BINFO_VIRTUALS (t) 
5209         = chainon (TYPE_BINFO_VIRTUALS (t), overridden_virtuals);
5210     }
5211
5212   /* If we created a new vtbl pointer for this class, add it to the
5213      list.  */
5214   if (TYPE_VFIELD (t) && CLASSTYPE_VFIELD_PARENT (t) == -1)
5215     CLASSTYPE_VFIELDS (t) 
5216       = chainon (CLASSTYPE_VFIELDS (t), build_tree_list (NULL_TREE, t));
5217
5218   finish_struct_bits (t);
5219
5220   /* Complete the rtl for any static member objects of the type we're
5221      working on.  */
5222   for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
5223     {
5224       if (TREE_CODE (x) == VAR_DECL && TREE_STATIC (x)
5225           && TREE_TYPE (x) == t)
5226         {
5227           DECL_MODE (x) = TYPE_MODE (t);
5228           make_decl_rtl (x, NULL, 0);
5229         }
5230     }
5231
5232   /* Done with FIELDS...now decide whether to sort these for
5233      faster lookups later.
5234
5235      The C front-end only does this when n_fields > 15.  We use
5236      a smaller number because most searches fail (succeeding
5237      ultimately as the search bores through the inheritance
5238      hierarchy), and we want this failure to occur quickly.  */
5239
5240   n_fields = count_fields (TYPE_FIELDS (t));
5241   if (n_fields > 7)
5242     {
5243       tree field_vec = make_tree_vec (n_fields);
5244       add_fields_to_vec (TYPE_FIELDS (t), field_vec, 0);
5245       qsort (&TREE_VEC_ELT (field_vec, 0), n_fields, sizeof (tree),
5246              (int (*)(const void *, const void *))field_decl_cmp);
5247       if (! DECL_LANG_SPECIFIC (TYPE_MAIN_DECL (t)))
5248         retrofit_lang_decl (TYPE_MAIN_DECL (t));
5249       DECL_SORTED_FIELDS (TYPE_MAIN_DECL (t)) = field_vec;
5250     }
5251
5252   if (TYPE_HAS_CONSTRUCTOR (t))
5253     {
5254       tree vfields = CLASSTYPE_VFIELDS (t);
5255
5256       while (vfields)
5257         {
5258           /* Mark the fact that constructor for T
5259              could affect anybody inheriting from T
5260              who wants to initialize vtables for VFIELDS's type.  */
5261           if (VF_DERIVED_VALUE (vfields))
5262             TREE_ADDRESSABLE (vfields) = 1;
5263           vfields = TREE_CHAIN (vfields);
5264         }
5265     }
5266
5267   /* Make the rtl for any new vtables we have created, and unmark
5268      the base types we marked.  */
5269   finish_vtbls (t);
5270
5271   if (CLASSTYPE_VSIZE (t) != 0)
5272     {
5273       /* In addition to this one, all the other vfields should be listed.  */
5274       /* Before that can be done, we have to have FIELD_DECLs for them, and
5275          a place to find them.  */
5276       TYPE_NONCOPIED_PARTS (t) 
5277         = tree_cons (default_conversion (TYPE_BINFO_VTABLE (t)),
5278                      TYPE_VFIELD (t), TYPE_NONCOPIED_PARTS (t));
5279
5280       if (warn_nonvdtor && TYPE_HAS_DESTRUCTOR (t)
5281           && DECL_VINDEX (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1)) == NULL_TREE)
5282         cp_warning ("`%#T' has virtual functions but non-virtual destructor",
5283                     t);
5284     }
5285
5286   hack_incomplete_structures (t);
5287
5288   if (warn_overloaded_virtual)
5289     warn_hidden (t);
5290
5291   maybe_suppress_debug_info (t);
5292
5293   /* Finish debugging output for this type.  */
5294   rest_of_type_compilation (t, toplevel_bindings_p ());
5295 }
5296
5297 /* When T was built up, the member declarations were added in reverse
5298    order.  Rearrange them to declaration order.  */
5299
5300 void
5301 unreverse_member_declarations (t)
5302      tree t;
5303 {
5304   tree next;
5305   tree prev;
5306   tree x;
5307
5308   /* The TYPE_FIELDS, TYPE_METHODS, and CLASSTYPE_TAGS are all in
5309      reverse order.  Put them in declaration order now.  */
5310   TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
5311   CLASSTYPE_TAGS (t) = nreverse (CLASSTYPE_TAGS (t));
5312
5313   /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
5314      reverse order, so we can't just use nreverse.  */
5315   prev = NULL_TREE;
5316   for (x = TYPE_FIELDS (t); 
5317        x && TREE_CODE (x) != TYPE_DECL; 
5318        x = next)
5319     {
5320       next = TREE_CHAIN (x);
5321       TREE_CHAIN (x) = prev;
5322       prev = x;
5323     }
5324   if (prev)
5325     {
5326       TREE_CHAIN (TYPE_FIELDS (t)) = x;
5327       if (prev)
5328         TYPE_FIELDS (t) = prev;
5329     }
5330 }
5331
5332 tree
5333 finish_struct (t, attributes)
5334      tree t, attributes;
5335 {
5336   /* Now that we've got all the field declarations, reverse everything
5337      as necessary.  */
5338   unreverse_member_declarations (t);
5339
5340   cplus_decl_attributes (t, attributes, NULL_TREE);
5341
5342   if (processing_template_decl)
5343     {
5344       finish_struct_methods (t);
5345       TYPE_SIZE (t) = integer_zero_node;
5346     }
5347   else
5348     finish_struct_1 (t);
5349
5350   TYPE_BEING_DEFINED (t) = 0;
5351
5352   if (current_class_type)
5353     popclass ();
5354   else
5355     error ("trying to finish struct, but kicked out due to previous parse errors.");
5356
5357   if (processing_template_decl)
5358     {
5359       tree scope = current_scope ();
5360       if (scope && TREE_CODE (scope) == FUNCTION_DECL)
5361         add_tree (build_min (TAG_DEFN, t));
5362     }
5363
5364   return t;
5365 }
5366 \f
5367 /* Return the dynamic type of INSTANCE, if known.
5368    Used to determine whether the virtual function table is needed
5369    or not.
5370
5371    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5372    of our knowledge of its type.  *NONNULL should be initialized
5373    before this function is called.  */
5374
5375 static tree
5376 fixed_type_or_null (instance, nonnull)
5377      tree instance;
5378      int *nonnull;
5379 {
5380   switch (TREE_CODE (instance))
5381     {
5382     case INDIRECT_REF:
5383       /* Check that we are not going through a cast of some sort.  */
5384       if (TREE_TYPE (instance)
5385           == TREE_TYPE (TREE_TYPE (TREE_OPERAND (instance, 0))))
5386         instance = TREE_OPERAND (instance, 0);
5387       /* fall through...  */
5388     case CALL_EXPR:
5389       /* This is a call to a constructor, hence it's never zero.  */
5390       if (TREE_HAS_CONSTRUCTOR (instance))
5391         {
5392           if (nonnull)
5393             *nonnull = 1;
5394           return TREE_TYPE (instance);
5395         }
5396       return NULL_TREE;
5397
5398     case SAVE_EXPR:
5399       /* This is a call to a constructor, hence it's never zero.  */
5400       if (TREE_HAS_CONSTRUCTOR (instance))
5401         {
5402           if (nonnull)
5403             *nonnull = 1;
5404           return TREE_TYPE (instance);
5405         }
5406       return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5407
5408     case RTL_EXPR:
5409       return NULL_TREE;
5410
5411     case PLUS_EXPR:
5412     case MINUS_EXPR:
5413       if (TREE_CODE (TREE_OPERAND (instance, 1)) == INTEGER_CST)
5414         /* Propagate nonnull.  */
5415         fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5416       if (TREE_CODE (TREE_OPERAND (instance, 0)) == ADDR_EXPR)
5417         return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5418       return NULL_TREE;
5419
5420     case NOP_EXPR:
5421     case CONVERT_EXPR:
5422       return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5423
5424     case ADDR_EXPR:
5425       if (nonnull)
5426         *nonnull = 1;
5427       return fixed_type_or_null (TREE_OPERAND (instance, 0), nonnull);
5428
5429     case COMPONENT_REF:
5430       return fixed_type_or_null (TREE_OPERAND (instance, 1), nonnull);
5431
5432     case VAR_DECL:
5433     case FIELD_DECL:
5434       if (TREE_CODE (TREE_TYPE (instance)) == ARRAY_TYPE
5435           && IS_AGGR_TYPE (TREE_TYPE (TREE_TYPE (instance))))
5436         {
5437           if (nonnull)
5438             *nonnull = 1;
5439           return TREE_TYPE (TREE_TYPE (instance));
5440         }
5441       /* fall through...  */
5442     case TARGET_EXPR:
5443     case PARM_DECL:
5444       if (IS_AGGR_TYPE (TREE_TYPE (instance)))
5445         {
5446           if (nonnull)
5447             *nonnull = 1;
5448           return TREE_TYPE (instance);
5449         }
5450       else if (nonnull)
5451         {
5452           if (instance == current_class_ptr
5453               && flag_this_is_variable <= 0)
5454             {
5455               /* Normally, 'this' must be non-null.  */
5456               if (flag_this_is_variable == 0)
5457                 *nonnull = 1;
5458
5459               /* <0 means we're in a constructor and we know our type.  */
5460               if (flag_this_is_variable < 0)
5461                 return TREE_TYPE (TREE_TYPE (instance));
5462             }
5463           else if (TREE_CODE (TREE_TYPE (instance)) == REFERENCE_TYPE)
5464             /* Reference variables should be references to objects.  */
5465             *nonnull = 1;
5466         }
5467       return NULL_TREE;
5468
5469     default:
5470       return NULL_TREE;
5471     }
5472 }
5473
5474 /* Return non-zero if the dynamic type of INSTANCE is known, and equivalent
5475    to the static type.  We also handle the case where INSTANCE is really
5476    a pointer.
5477
5478    Used to determine whether the virtual function table is needed
5479    or not.
5480
5481    *NONNULL is set iff INSTANCE can be known to be nonnull, regardless
5482    of our knowledge of its type.  *NONNULL should be initialized
5483    before this function is called.  */
5484
5485 int
5486 resolves_to_fixed_type_p (instance, nonnull)
5487      tree instance;
5488      int *nonnull;
5489 {
5490   tree t = TREE_TYPE (instance);
5491   tree fixed = fixed_type_or_null (instance, nonnull);
5492   if (fixed == NULL_TREE)
5493     return 0;
5494   if (POINTER_TYPE_P (t))
5495     t = TREE_TYPE (t);
5496   return same_type_p (TYPE_MAIN_VARIANT (t), TYPE_MAIN_VARIANT (fixed));
5497 }
5498
5499 \f
5500 void
5501 init_class_processing ()
5502 {
5503   current_class_depth = 0;
5504   current_class_stack_size = 10;
5505   current_class_stack 
5506     = (class_stack_node_t) xmalloc (current_class_stack_size 
5507                                     * sizeof (struct class_stack_node));
5508
5509   access_default_node = build_int_2 (0, 0);
5510   access_public_node = build_int_2 (1, 0);
5511   access_protected_node = build_int_2 (2, 0);
5512   access_private_node = build_int_2 (3, 0);
5513   access_default_virtual_node = build_int_2 (4, 0);
5514   access_public_virtual_node = build_int_2 (5, 0);
5515   access_protected_virtual_node = build_int_2 (6, 0);
5516   access_private_virtual_node = build_int_2 (7, 0);
5517 }
5518
5519 /* Set current scope to NAME. CODE tells us if this is a
5520    STRUCT, UNION, or ENUM environment.
5521
5522    NAME may end up being NULL_TREE if this is an anonymous or
5523    late-bound struct (as in "struct { ... } foo;")  */
5524
5525 /* Set global variables CURRENT_CLASS_NAME and CURRENT_CLASS_TYPE to
5526    appropriate values, found by looking up the type definition of
5527    NAME (as a CODE).
5528
5529    If MODIFY is 1, we set IDENTIFIER_CLASS_VALUE's of names
5530    which can be seen locally to the class.  They are shadowed by
5531    any subsequent local declaration (including parameter names).
5532
5533    If MODIFY is 2, we set IDENTIFIER_CLASS_VALUE's of names
5534    which have static meaning (i.e., static members, static
5535    member functions, enum declarations, etc).
5536
5537    If MODIFY is 3, we set IDENTIFIER_CLASS_VALUE of names
5538    which can be seen locally to the class (as in 1), but
5539    know that we are doing this for declaration purposes
5540    (i.e. friend foo::bar (int)).
5541
5542    So that we may avoid calls to lookup_name, we cache the _TYPE
5543    nodes of local TYPE_DECLs in the TREE_TYPE field of the name.
5544
5545    For multiple inheritance, we perform a two-pass depth-first search
5546    of the type lattice.  The first pass performs a pre-order search,
5547    marking types after the type has had its fields installed in
5548    the appropriate IDENTIFIER_CLASS_VALUE slot.  The second pass merely
5549    unmarks the marked types.  If a field or member function name
5550    appears in an ambiguous way, the IDENTIFIER_CLASS_VALUE of
5551    that name becomes `error_mark_node'.  */
5552
5553 void
5554 pushclass (type, modify)
5555      tree type;
5556      int modify;
5557 {
5558   type = TYPE_MAIN_VARIANT (type);
5559
5560   /* Make sure there is enough room for the new entry on the stack.  */
5561   if (current_class_depth + 1 >= current_class_stack_size) 
5562     {
5563       current_class_stack_size *= 2;
5564       current_class_stack
5565         = (class_stack_node_t) xrealloc (current_class_stack,
5566                                          current_class_stack_size
5567                                          * sizeof (struct class_stack_node));
5568     }
5569
5570   /* Insert a new entry on the class stack.  */
5571   current_class_stack[current_class_depth].name = current_class_name;
5572   current_class_stack[current_class_depth].type = current_class_type;
5573   current_class_stack[current_class_depth].access = current_access_specifier;
5574   current_class_stack[current_class_depth].names_used = 0;
5575   current_class_depth++;
5576
5577   /* Now set up the new type.  */
5578   current_class_name = TYPE_NAME (type);
5579   if (TREE_CODE (current_class_name) == TYPE_DECL)
5580     current_class_name = DECL_NAME (current_class_name);
5581   current_class_type = type;
5582
5583   /* By default, things in classes are private, while things in
5584      structures or unions are public.  */
5585   current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type) 
5586                               ? access_private_node 
5587                               : access_public_node);
5588
5589   if (previous_class_type != NULL_TREE
5590       && (type != previous_class_type 
5591           || TYPE_SIZE (previous_class_type) == NULL_TREE)
5592       && current_class_depth == 1)
5593     {
5594       /* Forcibly remove any old class remnants.  */
5595       invalidate_class_lookup_cache ();
5596     }
5597
5598   /* If we're about to enter a nested class, clear
5599      IDENTIFIER_CLASS_VALUE for the enclosing classes.  */
5600   if (modify && current_class_depth > 1)
5601     clear_identifier_class_values ();
5602
5603   pushlevel_class ();
5604
5605 #if 0
5606   if (CLASSTYPE_TEMPLATE_INFO (type))
5607     overload_template_name (type);
5608 #endif
5609
5610   if (modify)
5611     {
5612       if (type != previous_class_type || current_class_depth > 1)
5613         push_class_decls (type);
5614       else
5615         {
5616           tree item;
5617
5618           /* We are re-entering the same class we just left, so we
5619              don't have to search the whole inheritance matrix to find
5620              all the decls to bind again.  Instead, we install the
5621              cached class_shadowed list, and walk through it binding
5622              names and setting up IDENTIFIER_TYPE_VALUEs.  */
5623           set_class_shadows (previous_class_values);
5624           for (item = previous_class_values; item; item = TREE_CHAIN (item))
5625             {
5626               tree id = TREE_PURPOSE (item);
5627               tree decl = TREE_TYPE (item);
5628
5629               push_class_binding (id, decl);
5630               if (TREE_CODE (decl) == TYPE_DECL)
5631                 set_identifier_type_value (id, TREE_TYPE (decl));
5632             }
5633           unuse_fields (type);
5634         }
5635
5636       storetags (CLASSTYPE_TAGS (type));
5637     }
5638 }
5639
5640 /* When we exit a toplevel class scope, we save the
5641    IDENTIFIER_CLASS_VALUEs so that we can restore them quickly if we
5642    reenter the class.  Here, we've entered some other class, so we
5643    must invalidate our cache.  */
5644
5645 void
5646 invalidate_class_lookup_cache ()
5647 {
5648   tree t;
5649   
5650   /* This code can be seen as a cache miss.  When we've cached a
5651      class' scope's bindings and we can't use them, we need to reset
5652      them.  This is it!  */
5653   for (t = previous_class_values; t; t = TREE_CHAIN (t))
5654     IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
5655   
5656   previous_class_type = NULL_TREE;
5657 }
5658  
5659 /* Get out of the current class scope. If we were in a class scope
5660    previously, that is the one popped to.  */
5661
5662 void
5663 popclass ()
5664 {
5665   poplevel_class ();
5666   /* Since poplevel_class does the popping of class decls nowadays,
5667      this really only frees the obstack used for these decls.  */
5668   pop_class_decls ();
5669
5670   current_class_depth--;
5671   current_class_name = current_class_stack[current_class_depth].name;
5672   current_class_type = current_class_stack[current_class_depth].type;
5673   current_access_specifier = current_class_stack[current_class_depth].access;
5674   if (current_class_stack[current_class_depth].names_used)
5675     splay_tree_delete (current_class_stack[current_class_depth].names_used);
5676 }
5677
5678 /* Returns 1 if current_class_type is either T or a nested type of T.
5679    We start looking from 1 because entry 0 is from global scope, and has
5680    no type.  */
5681
5682 int
5683 currently_open_class (t)
5684      tree t;
5685 {
5686   int i;
5687   if (t == current_class_type)
5688     return 1;
5689   for (i = 1; i < current_class_depth; ++i)
5690     if (current_class_stack [i].type == t)
5691       return 1;
5692   return 0;
5693 }
5694
5695 /* If either current_class_type or one of its enclosing classes are derived
5696    from T, return the appropriate type.  Used to determine how we found
5697    something via unqualified lookup.  */
5698
5699 tree
5700 currently_open_derived_class (t)
5701      tree t;
5702 {
5703   int i;
5704
5705   if (DERIVED_FROM_P (t, current_class_type))
5706     return current_class_type;
5707
5708   for (i = current_class_depth - 1; i > 0; --i)
5709     if (DERIVED_FROM_P (t, current_class_stack[i].type))
5710       return current_class_stack[i].type;
5711
5712   return NULL_TREE;
5713 }
5714
5715 /* When entering a class scope, all enclosing class scopes' names with
5716    static meaning (static variables, static functions, types and enumerators)
5717    have to be visible.  This recursive function calls pushclass for all
5718    enclosing class contexts until global or a local scope is reached.
5719    TYPE is the enclosed class and MODIFY is equivalent with the pushclass
5720    formal of the same name.  */
5721
5722 void
5723 push_nested_class (type, modify)
5724      tree type;
5725      int modify;
5726 {
5727   tree context;
5728
5729   /* A namespace might be passed in error cases, like A::B:C.  */
5730   if (type == NULL_TREE 
5731       || type == error_mark_node 
5732       || TREE_CODE (type) == NAMESPACE_DECL
5733       || ! IS_AGGR_TYPE (type)
5734       || TREE_CODE (type) == TEMPLATE_TYPE_PARM
5735       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
5736     return;
5737   
5738   context = DECL_CONTEXT (TYPE_MAIN_DECL (type));
5739
5740   if (context && CLASS_TYPE_P (context))
5741     push_nested_class (context, 2);
5742   pushclass (type, modify);
5743 }
5744
5745 /* Undoes a push_nested_class call.  MODIFY is passed on to popclass.  */
5746
5747 void
5748 pop_nested_class ()
5749 {
5750   tree context = DECL_CONTEXT (TYPE_MAIN_DECL (current_class_type));
5751
5752   popclass ();
5753   if (context && CLASS_TYPE_P (context))
5754     pop_nested_class ();
5755 }
5756
5757 /* Set global variables CURRENT_LANG_NAME to appropriate value
5758    so that behavior of name-mangling machinery is correct.  */
5759
5760 void
5761 push_lang_context (name)
5762      tree name;
5763 {
5764   *current_lang_stack++ = current_lang_name;
5765   if (current_lang_stack - &VARRAY_TREE (current_lang_base, 0)
5766       >= (ptrdiff_t) VARRAY_SIZE (current_lang_base))
5767     {
5768       size_t old_size = VARRAY_SIZE (current_lang_base);
5769
5770       VARRAY_GROW (current_lang_base, old_size + 10);
5771       current_lang_stack = &VARRAY_TREE (current_lang_base, old_size);
5772     }
5773
5774   if (name == lang_name_cplusplus)
5775     {
5776       strict_prototype = strict_prototypes_lang_cplusplus;
5777       current_lang_name = name;
5778     }
5779   else if (name == lang_name_java)
5780     {
5781       strict_prototype = strict_prototypes_lang_cplusplus;
5782       current_lang_name = name;
5783       /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
5784          (See record_builtin_java_type in decl.c.)  However, that causes
5785          incorrect debug entries if these types are actually used.
5786          So we re-enable debug output after extern "Java". */
5787       DECL_IGNORED_P (java_byte_type_node) = 0;
5788       DECL_IGNORED_P (java_short_type_node) = 0;
5789       DECL_IGNORED_P (java_int_type_node) = 0;
5790       DECL_IGNORED_P (java_long_type_node) = 0;
5791       DECL_IGNORED_P (java_float_type_node) = 0;
5792       DECL_IGNORED_P (java_double_type_node) = 0;
5793       DECL_IGNORED_P (java_char_type_node) = 0;
5794       DECL_IGNORED_P (java_boolean_type_node) = 0;
5795     }
5796   else if (name == lang_name_c)
5797     {
5798       strict_prototype = strict_prototypes_lang_c;
5799       current_lang_name = name;
5800     }
5801   else
5802     error ("language string `\"%s\"' not recognized", IDENTIFIER_POINTER (name));
5803 }
5804   
5805 /* Get out of the current language scope.  */
5806
5807 void
5808 pop_lang_context ()
5809 {
5810   /* Clear the current entry so that garbage collector won't hold on
5811      to it.  */
5812   *current_lang_stack = NULL_TREE;
5813   current_lang_name = *--current_lang_stack;
5814   if (current_lang_name == lang_name_cplusplus
5815       || current_lang_name == lang_name_java)
5816     strict_prototype = strict_prototypes_lang_cplusplus;
5817   else if (current_lang_name == lang_name_c)
5818     strict_prototype = strict_prototypes_lang_c;
5819 }
5820 \f
5821 /* Type instantiation routines.  */
5822
5823 /* Given an OVERLOAD and a TARGET_TYPE, return the function that
5824    matches the TARGET_TYPE.  If there is no satisfactory match, return
5825    error_mark_node, and issue an error message if COMPLAIN is
5826    non-zero.  If TEMPLATE_ONLY, the name of the overloaded function
5827    was a template-id, and EXPLICIT_TARGS are the explicitly provided
5828    template arguments.  */
5829
5830 static tree
5831 resolve_address_of_overloaded_function (target_type, 
5832                                         overload,
5833                                         complain, 
5834                                         template_only,
5835                                         explicit_targs)
5836      tree target_type;
5837      tree overload;
5838      int complain;
5839      int template_only;
5840      tree explicit_targs;
5841 {
5842   /* Here's what the standard says:
5843      
5844        [over.over]
5845
5846        If the name is a function template, template argument deduction
5847        is done, and if the argument deduction succeeds, the deduced
5848        arguments are used to generate a single template function, which
5849        is added to the set of overloaded functions considered.
5850
5851        Non-member functions and static member functions match targets of
5852        type "pointer-to-function" or "reference-to-function."  Nonstatic
5853        member functions match targets of type "pointer-to-member
5854        function;" the function type of the pointer to member is used to
5855        select the member function from the set of overloaded member
5856        functions.  If a nonstatic member function is selected, the
5857        reference to the overloaded function name is required to have the
5858        form of a pointer to member as described in 5.3.1.
5859
5860        If more than one function is selected, any template functions in
5861        the set are eliminated if the set also contains a non-template
5862        function, and any given template function is eliminated if the
5863        set contains a second template function that is more specialized
5864        than the first according to the partial ordering rules 14.5.5.2.
5865        After such eliminations, if any, there shall remain exactly one
5866        selected function.  */
5867
5868   int is_ptrmem = 0;
5869   int is_reference = 0;
5870   /* We store the matches in a TREE_LIST rooted here.  The functions
5871      are the TREE_PURPOSE, not the TREE_VALUE, in this list, for easy
5872      interoperability with most_specialized_instantiation.  */
5873   tree matches = NULL_TREE;
5874   tree fn;
5875
5876   /* By the time we get here, we should be seeing only real
5877      pointer-to-member types, not the internal POINTER_TYPE to
5878      METHOD_TYPE representation.  */
5879   my_friendly_assert (!(TREE_CODE (target_type) == POINTER_TYPE
5880                         && (TREE_CODE (TREE_TYPE (target_type)) 
5881                             == METHOD_TYPE)), 0);
5882
5883   /* Check that the TARGET_TYPE is reasonable.  */
5884   if (TYPE_PTRFN_P (target_type))
5885     /* This is OK.  */
5886     ;
5887   else if (TYPE_PTRMEMFUNC_P (target_type))
5888     /* This is OK, too.  */
5889     is_ptrmem = 1;
5890   else if (TREE_CODE (target_type) == FUNCTION_TYPE)
5891     {
5892       /* This is OK, too.  This comes from a conversion to reference
5893          type.  */
5894       target_type = build_reference_type (target_type);
5895       is_reference = 1;
5896     }
5897   else 
5898     {
5899       if (complain)
5900         cp_error("cannot resolve overloaded function `%D' based on conversion to type `%T'", 
5901                  DECL_NAME (OVL_FUNCTION (overload)), target_type);
5902       return error_mark_node;
5903     }
5904   
5905   /* If we can find a non-template function that matches, we can just
5906      use it.  There's no point in generating template instantiations
5907      if we're just going to throw them out anyhow.  But, of course, we
5908      can only do this when we don't *need* a template function.  */
5909   if (!template_only)
5910     {
5911       tree fns;
5912
5913       for (fns = overload; fns; fns = OVL_CHAIN (fns))
5914         {
5915           tree fn = OVL_FUNCTION (fns);
5916           tree fntype;
5917
5918           if (TREE_CODE (fn) == TEMPLATE_DECL)
5919             /* We're not looking for templates just yet.  */
5920             continue;
5921
5922           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5923               != is_ptrmem)
5924             /* We're looking for a non-static member, and this isn't
5925                one, or vice versa.  */
5926             continue;
5927         
5928           /* See if there's a match.  */
5929           fntype = TREE_TYPE (fn);
5930           if (is_ptrmem)
5931             fntype = build_ptrmemfunc_type (build_pointer_type (fntype));
5932           else if (!is_reference)
5933             fntype = build_pointer_type (fntype);
5934
5935           if (can_convert_arg (target_type, fntype, fn))
5936             matches = tree_cons (fn, NULL_TREE, matches);
5937         }
5938     }
5939
5940   /* Now, if we've already got a match (or matches), there's no need
5941      to proceed to the template functions.  But, if we don't have a
5942      match we need to look at them, too.  */
5943   if (!matches) 
5944     {
5945       tree target_fn_type;
5946       tree target_arg_types;
5947       tree target_ret_type;
5948       tree fns;
5949
5950       if (is_ptrmem)
5951         target_fn_type
5952           = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (target_type));
5953       else
5954         target_fn_type = TREE_TYPE (target_type);
5955       target_arg_types = TYPE_ARG_TYPES (target_fn_type);
5956       target_ret_type = TREE_TYPE (target_fn_type);
5957           
5958       for (fns = overload; fns; fns = OVL_CHAIN (fns))
5959         {
5960           tree fn = OVL_FUNCTION (fns);
5961           tree instantiation;
5962           tree instantiation_type;
5963           tree targs;
5964
5965           if (TREE_CODE (fn) != TEMPLATE_DECL)
5966             /* We're only looking for templates.  */
5967             continue;
5968
5969           if ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5970               != is_ptrmem)
5971             /* We're not looking for a non-static member, and this is
5972                one, or vice versa.  */
5973             continue;
5974
5975           /* Try to do argument deduction.  */
5976           targs = make_tree_vec (DECL_NTPARMS (fn));
5977           if (fn_type_unification (fn, explicit_targs, targs,
5978                                    target_arg_types, target_ret_type,
5979                                    DEDUCE_EXACT) != 0)
5980             /* Argument deduction failed.  */
5981             continue;
5982
5983           /* Instantiate the template.  */
5984           instantiation = instantiate_template (fn, targs);
5985           if (instantiation == error_mark_node)
5986             /* Instantiation failed.  */
5987             continue;
5988
5989           /* See if there's a match.  */
5990           instantiation_type = TREE_TYPE (instantiation);
5991           if (is_ptrmem)
5992             instantiation_type = 
5993               build_ptrmemfunc_type (build_pointer_type (instantiation_type));
5994           else if (!is_reference)
5995             instantiation_type = build_pointer_type (instantiation_type);
5996           if (can_convert_arg (target_type, instantiation_type, instantiation))
5997             matches = tree_cons (instantiation, fn, matches);
5998         }
5999
6000       /* Now, remove all but the most specialized of the matches.  */
6001       if (matches)
6002         {
6003           tree match = most_specialized_instantiation (matches, 
6004                                                        explicit_targs);
6005
6006           if (match != error_mark_node)
6007             matches = tree_cons (match, NULL_TREE, NULL_TREE);
6008         }
6009     }
6010
6011   /* Now we should have exactly one function in MATCHES.  */
6012   if (matches == NULL_TREE)
6013     {
6014       /* There were *no* matches.  */
6015       if (complain)
6016         {
6017           cp_error ("no matches converting function `%D' to type `%#T'", 
6018                     DECL_NAME (OVL_FUNCTION (overload)),
6019                     target_type);
6020
6021           /* print_candidates expects a chain with the functions in
6022              TREE_VALUE slots, so we cons one up here (we're losing anyway,
6023              so why be clever?).  */
6024           for (; overload; overload = OVL_NEXT (overload))
6025             matches = tree_cons (NULL_TREE, OVL_CURRENT (overload),
6026                                  matches);
6027           
6028           print_candidates (matches);
6029         }
6030       return error_mark_node;
6031     }
6032   else if (TREE_CHAIN (matches))
6033     {
6034       /* There were too many matches.  */
6035
6036       if (complain)
6037         {
6038           tree match;
6039
6040           cp_error ("converting overloaded function `%D' to type `%#T' is ambiguous", 
6041                     DECL_NAME (OVL_FUNCTION (overload)),
6042                     target_type);
6043
6044           /* Since print_candidates expects the functions in the
6045              TREE_VALUE slot, we flip them here.  */
6046           for (match = matches; match; match = TREE_CHAIN (match))
6047             TREE_VALUE (match) = TREE_PURPOSE (match);
6048
6049           print_candidates (matches);
6050         }
6051       
6052       return error_mark_node;
6053     }
6054
6055   /* Good, exactly one match.  Now, convert it to the correct type.  */
6056   fn = TREE_PURPOSE (matches);
6057
6058   mark_used (fn);
6059
6060   if (TYPE_PTRFN_P (target_type) || TYPE_PTRMEMFUNC_P (target_type))
6061     return build_unary_op (ADDR_EXPR, fn, 0);
6062   else
6063     {
6064       /* The target must be a REFERENCE_TYPE.  Above, build_unary_op
6065          will mark the function as addressed, but here we must do it
6066          explicitly.  */
6067       mark_addressable (fn);
6068
6069       return fn;
6070     }
6071 }
6072
6073 /* This function will instantiate the type of the expression given in
6074    RHS to match the type of LHSTYPE.  If errors exist, then return
6075    error_mark_node.  We only complain is COMPLAIN is set.  If we are
6076    not complaining, never modify rhs, as overload resolution wants to
6077    try many possible instantiations, in hopes that at least one will
6078    work.
6079
6080    FLAGS is a bitmask, as we see at the top of the function.
6081
6082    For non-recursive calls, LHSTYPE should be a function, pointer to
6083    function, or a pointer to member function.  */
6084
6085 tree
6086 instantiate_type (lhstype, rhs, flags)
6087      tree lhstype, rhs;
6088      int flags;
6089 {
6090   int complain = (flags & 1);
6091   int strict = (flags & 2) ? COMPARE_NO_ATTRIBUTES : COMPARE_STRICT;
6092
6093   if (TREE_CODE (lhstype) == UNKNOWN_TYPE)
6094     {
6095       if (complain)
6096         error ("not enough type information");
6097       return error_mark_node;
6098     }
6099
6100   if (TREE_TYPE (rhs) != NULL_TREE && ! (type_unknown_p (rhs)))
6101     {
6102       if (comptypes (lhstype, TREE_TYPE (rhs), strict))
6103         return rhs;
6104       if (complain)
6105         cp_error ("argument of type `%T' does not match `%T'",
6106                   TREE_TYPE (rhs), lhstype);
6107       return error_mark_node;
6108     }
6109
6110   /* We don't overwrite rhs if it is an overloaded function.
6111      Copying it would destroy the tree link.  */
6112   if (TREE_CODE (rhs) != OVERLOAD)
6113     rhs = copy_node (rhs);
6114
6115   /* This should really only be used when attempting to distinguish
6116      what sort of a pointer to function we have.  For now, any
6117      arithmetic operation which is not supported on pointers
6118      is rejected as an error.  */
6119
6120   switch (TREE_CODE (rhs))
6121     {
6122     case TYPE_EXPR:
6123     case CONVERT_EXPR:
6124     case SAVE_EXPR:
6125     case CONSTRUCTOR:
6126     case BUFFER_REF:
6127       my_friendly_abort (177);
6128       return error_mark_node;
6129
6130     case INDIRECT_REF:
6131     case ARRAY_REF:
6132       {
6133         tree new_rhs;
6134
6135         new_rhs = instantiate_type (build_pointer_type (lhstype),
6136                                     TREE_OPERAND (rhs, 0), flags);
6137         if (new_rhs == error_mark_node)
6138           return error_mark_node;
6139
6140         TREE_TYPE (rhs) = lhstype;
6141         TREE_OPERAND (rhs, 0) = new_rhs;
6142         return rhs;
6143       }
6144
6145     case NOP_EXPR:
6146       rhs = copy_node (TREE_OPERAND (rhs, 0));
6147       TREE_TYPE (rhs) = unknown_type_node;
6148       return instantiate_type (lhstype, rhs, flags);
6149
6150     case COMPONENT_REF:
6151       {
6152         tree r = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6153
6154         if (r != error_mark_node && TYPE_PTRMEMFUNC_P (lhstype)
6155             && complain && !flag_ms_extensions)
6156           {
6157             /* Note: we check this after the recursive call to avoid
6158                complaining about cases where overload resolution fails.  */
6159
6160             tree t = TREE_TYPE (TREE_OPERAND (rhs, 0));
6161             tree fn = PTRMEM_CST_MEMBER (r);
6162
6163             my_friendly_assert (TREE_CODE (r) == PTRMEM_CST, 990811);
6164
6165             cp_pedwarn
6166               ("object-dependent reference to `%E' can only be used in a call",
6167                DECL_NAME (fn));
6168             cp_pedwarn
6169               ("  to form a pointer to member function, say `&%T::%E'",
6170                t, DECL_NAME (fn));
6171           }
6172
6173         return r;
6174       }
6175
6176     case OFFSET_REF:
6177       rhs = TREE_OPERAND (rhs, 1);
6178       if (BASELINK_P (rhs))
6179         return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6180
6181       /* This can happen if we are forming a pointer-to-member for a
6182          member template.  */
6183       my_friendly_assert (TREE_CODE (rhs) == TEMPLATE_ID_EXPR, 0);
6184
6185       /* Fall through.  */
6186
6187     case TEMPLATE_ID_EXPR:
6188       return 
6189         resolve_address_of_overloaded_function (lhstype,
6190                                                 TREE_OPERAND (rhs, 0),
6191                                                 complain,
6192                                                 /*template_only=*/1,
6193                                                 TREE_OPERAND (rhs, 1));
6194
6195     case OVERLOAD:
6196       return 
6197         resolve_address_of_overloaded_function (lhstype, 
6198                                                 rhs,
6199                                                 complain,
6200                                                 /*template_only=*/0,
6201                                                 /*explicit_targs=*/NULL_TREE);
6202
6203     case TREE_LIST:
6204       /* Now we should have a baselink. */
6205       my_friendly_assert (BASELINK_P (rhs), 990412);
6206
6207       return instantiate_type (lhstype, TREE_VALUE (rhs), flags);
6208
6209     case CALL_EXPR:
6210       /* This is too hard for now.  */
6211       my_friendly_abort (183);
6212       return error_mark_node;
6213
6214     case PLUS_EXPR:
6215     case MINUS_EXPR:
6216     case COMPOUND_EXPR:
6217       TREE_OPERAND (rhs, 0)
6218         = instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6219       if (TREE_OPERAND (rhs, 0) == error_mark_node)
6220         return error_mark_node;
6221       TREE_OPERAND (rhs, 1)
6222         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6223       if (TREE_OPERAND (rhs, 1) == error_mark_node)
6224         return error_mark_node;
6225
6226       TREE_TYPE (rhs) = lhstype;
6227       return rhs;
6228
6229     case MULT_EXPR:
6230     case TRUNC_DIV_EXPR:
6231     case FLOOR_DIV_EXPR:
6232     case CEIL_DIV_EXPR:
6233     case ROUND_DIV_EXPR:
6234     case RDIV_EXPR:
6235     case TRUNC_MOD_EXPR:
6236     case FLOOR_MOD_EXPR:
6237     case CEIL_MOD_EXPR:
6238     case ROUND_MOD_EXPR:
6239     case FIX_ROUND_EXPR:
6240     case FIX_FLOOR_EXPR:
6241     case FIX_CEIL_EXPR:
6242     case FIX_TRUNC_EXPR:
6243     case FLOAT_EXPR:
6244     case NEGATE_EXPR:
6245     case ABS_EXPR:
6246     case MAX_EXPR:
6247     case MIN_EXPR:
6248     case FFS_EXPR:
6249
6250     case BIT_AND_EXPR:
6251     case BIT_IOR_EXPR:
6252     case BIT_XOR_EXPR:
6253     case LSHIFT_EXPR:
6254     case RSHIFT_EXPR:
6255     case LROTATE_EXPR:
6256     case RROTATE_EXPR:
6257
6258     case PREINCREMENT_EXPR:
6259     case PREDECREMENT_EXPR:
6260     case POSTINCREMENT_EXPR:
6261     case POSTDECREMENT_EXPR:
6262       if (complain)
6263         error ("invalid operation on uninstantiated type");
6264       return error_mark_node;
6265
6266     case TRUTH_AND_EXPR:
6267     case TRUTH_OR_EXPR:
6268     case TRUTH_XOR_EXPR:
6269     case LT_EXPR:
6270     case LE_EXPR:
6271     case GT_EXPR:
6272     case GE_EXPR:
6273     case EQ_EXPR:
6274     case NE_EXPR:
6275     case TRUTH_ANDIF_EXPR:
6276     case TRUTH_ORIF_EXPR:
6277     case TRUTH_NOT_EXPR:
6278       if (complain)
6279         error ("not enough type information");
6280       return error_mark_node;
6281
6282     case COND_EXPR:
6283       if (type_unknown_p (TREE_OPERAND (rhs, 0)))
6284         {
6285           if (complain)
6286             error ("not enough type information");
6287           return error_mark_node;
6288         }
6289       TREE_OPERAND (rhs, 1)
6290         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6291       if (TREE_OPERAND (rhs, 1) == error_mark_node)
6292         return error_mark_node;
6293       TREE_OPERAND (rhs, 2)
6294         = instantiate_type (lhstype, TREE_OPERAND (rhs, 2), flags);
6295       if (TREE_OPERAND (rhs, 2) == error_mark_node)
6296         return error_mark_node;
6297
6298       TREE_TYPE (rhs) = lhstype;
6299       return rhs;
6300
6301     case MODIFY_EXPR:
6302       TREE_OPERAND (rhs, 1)
6303         = instantiate_type (lhstype, TREE_OPERAND (rhs, 1), flags);
6304       if (TREE_OPERAND (rhs, 1) == error_mark_node)
6305         return error_mark_node;
6306
6307       TREE_TYPE (rhs) = lhstype;
6308       return rhs;
6309       
6310     case ADDR_EXPR:
6311       return instantiate_type (lhstype, TREE_OPERAND (rhs, 0), flags);
6312
6313     case ENTRY_VALUE_EXPR:
6314       my_friendly_abort (184);
6315       return error_mark_node;
6316
6317     case ERROR_MARK:
6318       return error_mark_node;
6319
6320     default:
6321       my_friendly_abort (185);
6322       return error_mark_node;
6323     }
6324 }
6325 \f
6326 /* Return the name of the virtual function pointer field
6327    (as an IDENTIFIER_NODE) for the given TYPE.  Note that
6328    this may have to look back through base types to find the
6329    ultimate field name.  (For single inheritance, these could
6330    all be the same name.  Who knows for multiple inheritance).  */
6331
6332 static tree
6333 get_vfield_name (type)
6334      tree type;
6335 {
6336   tree binfo = TYPE_BINFO (type);
6337   char *buf;
6338
6339   while (BINFO_BASETYPES (binfo)
6340          && TYPE_CONTAINS_VPTR_P (BINFO_TYPE (BINFO_BASETYPE (binfo, 0)))
6341          && ! TREE_VIA_VIRTUAL (BINFO_BASETYPE (binfo, 0)))
6342     binfo = BINFO_BASETYPE (binfo, 0);
6343
6344   type = BINFO_TYPE (binfo);
6345   buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT)
6346                          + TYPE_NAME_LENGTH (type) + 2);
6347   sprintf (buf, VFIELD_NAME_FORMAT, TYPE_NAME_STRING (type));
6348   return get_identifier (buf);
6349 }
6350
6351 void
6352 print_class_statistics ()
6353 {
6354 #ifdef GATHER_STATISTICS
6355   fprintf (stderr, "convert_harshness = %d\n", n_convert_harshness);
6356   fprintf (stderr, "compute_conversion_costs = %d\n", n_compute_conversion_costs);
6357   fprintf (stderr, "build_method_call = %d (inner = %d)\n",
6358            n_build_method_call, n_inner_fields_searched);
6359   if (n_vtables)
6360     {
6361       fprintf (stderr, "vtables = %d; vtable searches = %d\n",
6362                n_vtables, n_vtable_searches);
6363       fprintf (stderr, "vtable entries = %d; vtable elems = %d\n",
6364                n_vtable_entries, n_vtable_elems);
6365     }
6366 #endif
6367 }
6368
6369 /* Build a dummy reference to ourselves so Derived::Base (and A::A) works,
6370    according to [class]:
6371                                           The class-name is also inserted
6372    into  the scope of the class itself.  For purposes of access checking,
6373    the inserted class name is treated as if it were a public member name.  */
6374
6375 void
6376 build_self_reference ()
6377 {
6378   tree name = constructor_name (current_class_type);
6379   tree value = build_lang_decl (TYPE_DECL, name, current_class_type);
6380   tree saved_cas;
6381
6382   DECL_NONLOCAL (value) = 1;
6383   DECL_CONTEXT (value) = current_class_type;
6384   DECL_ARTIFICIAL (value) = 1;
6385
6386   if (processing_template_decl)
6387     value = push_template_decl (value);
6388
6389   saved_cas = current_access_specifier;
6390   current_access_specifier = access_public_node;
6391   finish_member_declaration (value);
6392   current_access_specifier = saved_cas;
6393 }
6394
6395 /* Returns 1 if TYPE contains only padding bytes.  */
6396
6397 int
6398 is_empty_class (type)
6399      tree type;
6400 {
6401   tree t;
6402
6403   if (type == error_mark_node)
6404     return 0;
6405
6406   if (! IS_AGGR_TYPE (type))
6407     return 0;
6408
6409   if (flag_new_abi)
6410     return integer_zerop (CLASSTYPE_SIZE (type));
6411
6412   if (TYPE_BINFO_BASETYPES (type))
6413     return 0;
6414   t = TYPE_FIELDS (type);
6415   while (t && TREE_CODE (t) != FIELD_DECL)
6416     t = TREE_CHAIN (t);
6417   return (t == NULL_TREE);
6418 }
6419
6420 /* Find the enclosing class of the given NODE.  NODE can be a *_DECL or
6421    a *_TYPE node.  NODE can also be a local class.  */
6422
6423 tree
6424 get_enclosing_class (type)
6425      tree type;
6426 {
6427   tree node = type;
6428
6429   while (node && TREE_CODE (node) != NAMESPACE_DECL)
6430     {
6431       switch (TREE_CODE_CLASS (TREE_CODE (node)))
6432         {
6433         case 'd':
6434           node = DECL_CONTEXT (node);
6435           break;
6436
6437         case 't':
6438           if (node != type)
6439             return node;
6440           node = TYPE_CONTEXT (node);
6441           break;
6442
6443         default:
6444           my_friendly_abort (0);
6445         }
6446     }
6447   return NULL_TREE;
6448 }
6449
6450 /* Return 1 if TYPE or one of its enclosing classes is derived from BASE.  */
6451
6452 int
6453 is_base_of_enclosing_class (base, type)
6454      tree base, type;
6455 {
6456   while (type)
6457     {
6458       if (get_binfo (base, type, 0))
6459         return 1;
6460
6461       type = get_enclosing_class (type);
6462     }
6463   return 0;
6464 }
6465
6466 /* Note that NAME was looked up while the current class was being
6467    defined and that the result of that lookup was DECL.  */
6468
6469 void
6470 maybe_note_name_used_in_class (name, decl)
6471      tree name;
6472      tree decl;
6473 {
6474   splay_tree names_used;
6475
6476   /* If we're not defining a class, there's nothing to do.  */
6477   if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
6478     return;
6479   
6480   /* If there's already a binding for this NAME, then we don't have
6481      anything to worry about.  */
6482   if (IDENTIFIER_CLASS_VALUE (name))
6483     return;
6484
6485   if (!current_class_stack[current_class_depth - 1].names_used)
6486     current_class_stack[current_class_depth - 1].names_used
6487       = splay_tree_new (splay_tree_compare_pointers, 0, 0);
6488   names_used = current_class_stack[current_class_depth - 1].names_used;
6489
6490   splay_tree_insert (names_used,
6491                      (splay_tree_key) name, 
6492                      (splay_tree_value) decl);
6493 }
6494
6495 /* Note that NAME was declared (as DECL) in the current class.  Check
6496    to see that the declaration is legal.  */
6497
6498 void
6499 note_name_declared_in_class (name, decl)
6500      tree name;
6501      tree decl;
6502 {
6503   splay_tree names_used;
6504   splay_tree_node n;
6505
6506   /* Look to see if we ever used this name.  */
6507   names_used 
6508     = current_class_stack[current_class_depth - 1].names_used;
6509   if (!names_used)
6510     return;
6511
6512   n = splay_tree_lookup (names_used, (splay_tree_key) name);
6513   if (n)
6514     {
6515       /* [basic.scope.class]
6516          
6517          A name N used in a class S shall refer to the same declaration
6518          in its context and when re-evaluated in the completed scope of
6519          S.  */
6520       cp_error ("declaration of `%#D'", decl);
6521       cp_error_at ("changes meaning of `%s' from `%+#D'", 
6522                    IDENTIFIER_POINTER (DECL_NAME (OVL_CURRENT (decl))),
6523                    (tree) n->value);
6524     }
6525 }
6526
6527 /* Dump the offsets of all the bases rooted at BINFO to stderr.
6528    INDENT should be zero when called from the top level; it is
6529    incremented recursively.  */
6530
6531 void
6532 dump_class_hierarchy (binfo, indent)
6533      tree binfo;
6534      int indent;
6535 {
6536   int i;
6537
6538   fprintf (stderr, "%*s0x%lx (%s) ", indent, "",
6539            (unsigned long) binfo,
6540            type_as_string (binfo, TS_PLAIN));
6541   fprintf (stderr, HOST_WIDE_INT_PRINT_DEC,
6542            tree_low_cst (BINFO_OFFSET (binfo), 0));
6543   fprintf (stderr, " %s\n",
6544            BINFO_PRIMARY_MARKED_P (binfo) ? "primary" : "");
6545
6546   for (i = 0; i < BINFO_N_BASETYPES (binfo); ++i)
6547     dump_class_hierarchy (BINFO_BASETYPE (binfo, i), indent + 2);
6548 }